m1 docker部署gitlab社区版详细踩坑记录

  • 一、安装docker
  • 二、docker-compose.yml
  • 三、gitlab.rb
  • 四、启动服务
  • 五、指定域名访问nginx代理服务
  • 六、项目地址为内网ip时如何处理


一、安装docker

自行安装

二、docker-compose.yml

安装的时候使用的是16.7.0,但安装好后页面推荐使用16.8.1,这里直接用最终版(都亲测有效)

version: '3.6'

services:
  gitlab:
    image: yrzr/gitlab-ce-arm64v8:16.8.1-ce.0
    container_name: gitlab-ce
    restart: unless-stopped
    privileged: true
    ports:
      - 9080:80  
      - 9443:443             
      - 9022:22
    volumes:
      - /you_adress/gitlab/data:/var/opt/gitlab:z  # 映射数据卷,用于持久化存储 GitLab 数据
      - /you_adress/gitlab/config:/etc/gitlab:z     # 映射配置文件,用于自定义 GitLab 配置
      - /you_adress/gitlab/logs:/var/log/gitlab:z   # 映射日志文件,用于存储 GitLab 日志
      # - /Users/ronzhang/work/environment/gitlab/opt:/opt/gitlab:z
    environment:
      TZ: Asia/Shanghai
      GITLAB_ROOT_PASSWORD: 123456 #可以不在这里配置,去容器中找初始密码(不细说了,自行搜索)
      # GITLAB_OMNIBUS_CONFIG: 
        # external_url 'http://code.xxx.net'
        # gitlab_rails['time_zone'] = 'Asia/Shanghai'
        # registry['enable'] = false
        # GITLAB_OMNIBUS[your_other_configs] = `options` #没在这里配置,要改的有点多,看着冗长,就配了一个gitlab.rb,以后倒是也能直接用(注释掉的都可以删了)

先执行

docker-compose up -d

三、gitlab.rb

上述执行完后会在服务器挂载路径生成一些文件,其中包含gitlab.rb,下面是修改的部分

external_url 'http://192.168.3.86'
gitlab_rails['gitlab_ssh_host'] = '192.168.3.86'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# 可以自己选择合适的邮件服务,我这里用的163
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@163.com"
# 授权码
gitlab_rails['smtp_password'] = "xxxPX"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false

修改完成后重新启动

四、启动服务

这里有一个惊天大坑
按照这样的配置启动,会报找不到postgresql
跑偏了很久,最后参考下文解决了问题,说是新版本docker container有问题
https://forums.docker.com/t/docker-desktop-for-macs-virtualization-framework-is-unable-to-run-the-gitlab-docker-image/136742 具体解决方案是把docker desktop -》general中的VirtioFS修改为gRPC FUSE,重启docker就ok了
社区版gitlab限制 gitlab社区版注册_社区版gitlab限制
重启好之后再执行

docker-compose up -d

启动后访问http://192.168.3.86:9080/

社区版gitlab限制 gitlab社区版注册_gitlab_02


出现登录页面,部署完成!

五、指定域名访问nginx代理服务

这里遇到一个重定向丢失端口的问题,nginx配置如下:

upstream gitlab {
    server 192.168.3.86:9080;
}
server {
    listen 9990;
    server_name code.xxx.net;
    # absolute_redirect off;
    client_max_body_size 60M;
    # proxy_set_header X-Real-IP $remote_addr;

    location / {
        proxy_redirect off;
        proxy_pass http://gitlab/;
        proxy_set_header Host $host:9990;
        proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header X-Forwarded-Proto $scheme;
        index index.html index.htm;
    }
}

目前的解决方案是先把端口写死就可以了

六、项目地址为内网ip时如何处理

因为我用nginx反向代理了gitlab服务,所以external_url中配置的是内网ip,这就导致了项目路径依旧是内网ip,无法远程拉取项目(手敲域名替换ip能成功拉取。。)

社区版gitlab限制 gitlab社区版注册_docker_03


这是因为gitlab初始化的时候gitlab.yml中的host也按照内网ip初始化了,这里是进入了容器中,修改gitlab.yml中的host改为域名,port也要改为外网映射的端口即可

操作如下

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

按需修改host和port

社区版gitlab限制 gitlab社区版注册_git_04


重启服务

gitlab-ctl restart