Linux下使用Docker部署GitLab的完整步骤
一 准备与规划
- 安装并启动 Docker(验证:docker --version),可选安装 Docker Compose(验证:docker-compose --version)。
- 规划目录与端口:建议设置环境变量 GITLAB_HOME=/srv/gitlab,并创建目录 /srv/gitlab/{config,logs,data} 用于持久化;端口建议映射为 80→80、443→443、22→22,若冲突可改为 5480→80、5443→443、5022→22。
- 资源建议:容器至少需要 4 GB 内存(生产环境建议 4–8 GB),并适当调整 shm_size(如 256 MB)以避免性能问题。
- 邮件能力:官方镜像默认不包含 MTA,需配置 SMTP 或使用外部邮件服务。
二 部署方式
- 方式A Docker Compose(推荐)
- 创建目录并进入:mkdir -p $GITLAB_HOME/{config,logs,data} && cd $GITLAB_HOME
- 新建 docker-compose.yml(示例为自定义端口):
version: “3.6”
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: gitlab.example.com
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url ‘http://gitlab.example.com:5480’
gitlab_rails[‘gitlab_shell_ssh_port’] = 5022
gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’
ports:
- “5480:80”
- “5443:443”
- “5022:22”
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
shm_size: “256m”
- 启动:docker-compose up -d
- 方式B docker run(单容器)
docker run -d
–hostname gitlab.example.com
-p 8443:443 -p 8080:80 -p 2222:22
–name gitlab
–restart always
-v /srv/gitlab/config:/etc/gitlab
-v /srv/gitlab/logs:/var/log/gitlab
-v /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
- 首次访问与初始密码:浏览器打开 http://服务器IP:5480(或配置的端口),使用 root 登录;初始密码位于容器内 /etc/gitlab/initial_root_password,该文件在容器启动后 24 小时自动删除,请尽快登录并修改密码。
三 关键配置
- 外部访问地址:在容器内编辑 /etc/gitlab/gitlab.rb,设置 external_url ‘http://your_domain_or_ip:port’;如改用非标准端口,需同步设置 gitlab_rails[‘gitlab_shell_ssh_port’] 为映射的 SSH 端口(如 5022)。
- 生效配置:执行 gitlab-ctl reconfigure,必要时 gitlab-ctl restart。
- 时区:在 gitlab.rb 中设置 gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’。
- HTTPS 与证书:
- 自签名或已有证书:将证书挂载到容器内(如 /etc/gitlab/ssl),并在 gitlab.rb 中配置
nginx[‘ssl_certificate’] = “/etc/gitlab/ssl/your_domain.crt”
nginx[‘ssl_certificate_key’] = “/etc/gitlab/ssl/your_domain.key”
同时确保 external_url 使用 https://。
- Let’s Encrypt:在 gitlab.rb 中启用
letsencrypt[‘enabled’] = true
letsencrypt[‘contact_emails’] = [‘admin@example.com’]
执行 reconfigure 后自动申请与续期。
- 邮件 SMTP(示例):
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “smtp.example.com”
gitlab_rails[‘smtp_port’] = 587
gitlab_rails[‘smtp_user_name’] = “ci@example.com”
gitlab_rails[‘smtp_password’] = “password”
gitlab_rails[‘smtp_domain’] = “example.com”
gitlab_rails[‘smtp_authentication’] = “login”
gitlab_rails[‘smtp_enable_starttls_auto’] = true
gitlab_rails[‘gitlab_email_from’] = ‘gitlab@example.com’
完成后执行 reconfigure。
四 运维与安全
- 防火墙与云安全组:放行 80/443/22(或自定义的 5480/5443/5022)端口。
- 备份与恢复:
- 备份:docker exec -t gitlab gitlab-rake gitlab:backup:create(备份文件位于 /var/opt/gitlab/backups,对应宿主机 $GITLAB_HOME/data/backups)
- 恢复:docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=备份文件名
- 升级:先备份,再拉取新镜像并重启(docker-compose pull && docker-compose up -d),或替换 docker run 镜像后重启。
- 日志与排障:查看容器日志 docker-compose logs -f 或 docker logs -f gitlab;常见无法访问多为端口未放行或域名解析错误。
- 安全建议:尽快修改 root 密码,按需关闭 用户注册,限制 SSH 端口暴露面,使用 HTTPS,并定期备份。
五 常见问题与提示
- SSH 克隆地址显示端口不正确:在 gitlab.rb 设置 gitlab_rails[‘gitlab_shell_ssh_port’] 为映射的 5022,并重启;克隆时使用 ssh://git@your_domain:5022/namespace/project.git。
- 页面重定向或端口丢失:确保 external_url 包含实际端口(如 http://ip:5480),并重新 reconfigure。
- SELinux 环境:挂载卷时添加 :Z 标签(如 /srv/gitlab/config:/etc/gitlab:Z)。
- 资源不足导致卡顿:提升宿主机内存与 shm_size,并减少并发任务。