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了
重启好之后再执行
docker-compose up -d
启动后访问http://192.168.3.86:9080/
出现登录页面,部署完成!
五、指定域名访问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.yml中的host也按照内网ip初始化了,这里是进入了容器中,修改gitlab.yml中的host改为域名,port也要改为外网映射的端口即可
操作如下
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
按需修改host和port
重启服务
gitlab-ctl restart