1. 为什么选择Docker部署GitLab?
在团队协作开发中,代码管理平台是核心基础设施。传统物理机部署GitLab需要处理复杂的依赖关系、配置系统服务、考虑升级维护成本。而Docker容器化部署方案具有以下显著优势:
- 环境隔离:每个服务运行在独立容器中,避免端口冲突和依赖污染
- 快速部署:镜像包含完整运行环境,
docker run即可启动服务 - 资源可控:通过cgroups限制CPU/内存使用,不影响宿主机其他服务
- 版本管理:镜像tag对应特定版本,升级/回滚只需切换镜像版本
- 数据持久化:通过volume机制保障数据安全存储
重要提示:生产环境建议使用至少4核CPU+8GB内存的服务器,GitLab对资源要求较高,特别是开启CI/CD功能时
2. 部署前环境准备
2.1 Docker环境配置
首先确保宿主机已安装Docker引擎(版本≥20.10):
# Ubuntu/Debian系统安装命令 sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl enable --now docker # 验证安装 docker --version docker-compose --version国内用户建议配置镜像加速器:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"] } EOF sudo systemctl restart docker2.2 资源规划建议
根据团队规模规划资源分配:
| 团队规模 | CPU核心 | 内存 | 存储空间 |
|---|---|---|---|
| <10人 | 2核 | 4GB | 50GB |
| 10-50人 | 4核 | 8GB | 100GB |
| >50人 | 8核+ | 16GB+ | 200GB+ |
3. 单容器快速部署方案
3.1 基础启动命令
使用官方镜像快速启动:
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest参数说明:
--hostname:设置访问域名(需配置DNS或本地hosts)--publish:映射HTTP(80)、HTTPS(443)和SSH(22)端口--volume:持久化配置、日志和数据目录
3.2 首次启动配置
等待容器启动完成(约5-10分钟):
docker logs -f gitlab当看到
GitLab configured and started表示启动完成获取初始root密码:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password访问
http://服务器IP,使用root和获取的密码登录
4. 生产环境优化部署
4.1 Docker Compose方案
创建docker-compose.yml:
version: '3' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: 'gitlab.yourdomain.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.yourdomain.com' gitlab_rails['gitlab_shell_ssh_port'] = 2222 ports: - "80:80" - "443:443" - "2222:22" volumes: - /srv/gitlab/config:/etc/gitlab - /srv/gitlab/logs:/var/log/gitlab - /srv/gitlab/data:/var/opt/gitlab shm_size: '256m'启动服务:
docker-compose up -d4.2 性能调优配置
修改/srv/gitlab/config/gitlab.rb:
# 工作进程数 = CPU核心数 + 1 unicorn['worker_processes'] = 5 # 数据库连接池大小 postgresql['max_worker_processes'] = 8 # 内存缓存 redis['max_memory'] = '1GB' # 后台任务 sidekiq['concurrency'] = 10应用配置变更:
docker exec -it gitlab gitlab-ctl reconfigure5. 日常维护操作指南
5.1 备份与恢复
创建完整备份:
docker exec -it gitlab gitlab-backup create备份文件默认存储在/var/opt/gitlab/backups目录(对应宿主机/srv/gitlab/data/backups)
恢复备份:
# 停止相关服务 docker exec -it gitlab gitlab-ctl stop unicorn docker exec -it gitlab gitlab-ctl stop sidekiq # 执行恢复(将BACKUP_TIMESTAMP替换为实际备份时间戳) docker exec -it gitlab gitlab-backup restore BACKUP=<BACKUP_TIMESTAMP> # 重启服务 docker exec -it gitlab gitlab-ctl restart5.2 版本升级步骤
停止当前容器:
docker stop gitlab创建完整备份
拉取新版本镜像:
docker pull gitlab/gitlab-ce:latest使用相同参数启动新容器
监控升级日志:
docker logs -f gitlab
6. 常见问题排查
6.1 502错误处理
可能原因及解决方案:
内存不足:
docker stats gitlab # 查看资源使用情况解决方法:增加容器内存限制或优化配置
服务未启动:
docker exec -it gitlab gitlab-ctl status重启异常服务:
docker exec -it gitlab gitlab-ctl restart unicorn
6.2 邮件配置
修改/srv/gitlab/config/gitlab.rb:
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.example.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "gitlab@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'应用配置:
docker exec -it gitlab gitlab-ctl reconfigure docker exec -it gitlab gitlab-rake cache:clear7. 安全加固建议
定期更新:
docker pull gitlab/gitlab-ce:latest docker-compose down && docker-compose up -d防火墙配置:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 2222/tcp # 如果修改了SSH端口 sudo ufw enable禁用注册功能: 在
Admin Area > Settings > General中关闭"Sign-up enabled"配置HTTPS: 使用Let's Encrypt自动证书:
letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com']
8. 性能监控方案
8.1 内置监控
查看资源使用:
docker exec -it gitlab gitlab-ctl tail prometheus8.2 外部监控
配置Prometheus监控:
prometheus['enable'] = true prometheus['listen_address'] = '0.0.0.0:9090' node_exporter['enable'] = trueGrafana仪表板导入ID:10662
9. 高级功能配置
9.1 CI/CD Runner集成
注册共享Runner:
docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest获取注册令牌: 在
Admin Area > Overview > Runners查看注册Runner:
docker exec -it gitlab-runner gitlab-runner register
9.2 容器仓库配置
启用容器镜像库:
registry['enable'] = true registry_external_url 'https://registry.gitlab.example.com'10. 故障恢复演练
建议定期进行以下演练:
- 模拟数据丢失,测试备份恢复流程
- 强制停止容器,验证自愈能力
- 模拟网络中断,测试服务可用性
- 进行压力测试(可使用ab、wrk等工具)
记录每次演练结果,不断完善应急预案