Linux环境下GitLab容器化部署指南(基于Docker Compose)
GitLab容器化部署依赖Docker引擎和Docker Compose(用于简化多容器管理)。
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo systemctl start docker && sudo systemctl enable docker # 启动并设置开机自启
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
GitLab的数据(配置、日志、仓库文件)需通过卷挂载到宿主机以实现持久化。创建专用目录(如/srv/gitlab):
sudo mkdir -p /srv/gitlab/{config,logs,data}
sudo chown -R 1000:1000 /srv/gitlab # GitLab容器内用户UID为1000,需匹配权限
在/srv/gitlab目录下创建docker-compose.yml,定义GitLab服务及资源配置:
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest # 推荐使用稳定版标签(如26.0.0-ce.0)
container_name: gitlab
restart: always # 开机自启
hostname: 'gitlab.example.com' # 替换为你的服务器域名或IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 初始外部URL(后续可修改)
ports:
- '8080:80' # HTTP端口(宿主机:容器)
- '8443:443' # HTTPS端口(可选)
- '2222:22' # SSH端口(避免与宿主机SSH冲突)
volumes:
- '/srv/gitlab/config:/etc/gitlab' # 配置文件卷
- '/srv/gitlab/logs:/var/log/gitlab' # 日志文件卷
- '/srv/gitlab/data:/var/opt/gitlab' # 数据文件卷(仓库、数据库等)
shm_size: '256m' # 共享内存(解决高并发时的性能问题)
在docker-compose.yml所在目录执行以下命令:
cd /srv/gitlab
docker-compose up -d # 后台启动容器
等待容器启动完成(约1-2分钟),可通过docker ps查看容器状态。
GitLab容器启动后,初始root用户的密码会保存在容器内的/etc/gitlab/initial_root_password文件中。执行以下命令查看:
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
输出结果类似:Password: xk9fj2a1b3c4d5e6f7g8h9i0j,记下该密码。
打开浏览器,输入http://<服务器IP或域名>:8080(如http://192.168.1.100:8080),进入登录页面。
root首次登录后,系统会强制要求修改root密码(建议设置为复杂密码,包含大小写字母、数字和符号)。
若需使用自定义域名(如gitlab.yourdomain.com),需修改GitLab全局配置:
docker exec -it gitlab vim /etc/gitlab/gitlab.rb
找到external_url配置项,修改为你的域名:
external_url 'http://gitlab.yourdomain.com'
保存退出后,重新配置GitLab使更改生效:
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
重启后,通过新域名访问GitLab即可。
若宿主机80、443或22端口已被占用,修改docker-compose.yml中的ports配置(如将8080:80改为9090:80),并同步更新external_url中的端口。
通常因GitLab服务未完全启动或配置错误导致。解决方法:
docker logs -f gitlab,定位具体错误(如端口冲突、磁盘空间不足);gitlab.rb中的unicorn['port'](如改为8084),并重新配置。若出现“Permission denied”错误,确保宿主机挂载目录的权限正确(chown -R 1000:1000 /srv/gitlab),或以root用户运行容器(不推荐)。
GitLab数据存储在/srv/gitlab/data目录(卷挂载),定期备份该目录即可(如使用rsync或tar命令)。
若需升级GitLab版本,修改docker-compose.yml中的image标签(如gitlab/gitlab-ce:26.1.0-ce.0),然后执行:
docker-compose pull # 拉取新镜像
docker-compose up -d # 重启容器(自动应用新版本)
注意:升级前建议备份数据,避免版本兼容性问题。
为提升安全性,建议配置Let’s Encrypt免费SSL证书。修改gitlab.rb文件:
letsencrypt['enabled'] = true
letsencrypt['contact_emails'] = ['your.email@example.com']
external_url 'https://gitlab.example.com'
重新配置并重启:
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
配置完成后,通过https://gitlab.example.com访问GitLab(浏览器地址栏显示锁图标)。