使用Docker-Compose私有化部署GitLab:从零到一的完整指南

一、为什么选择Docker-Compose部署GitLab?

GitLab作为开源的代码托管与协作平台,其私有化部署能满足企业对数据安全、定制化功能的需求。传统部署方式(如直接安装RPM包)存在配置复杂、依赖管理困难等问题,而Docker-Compose通过声明式YAML文件简化了流程,实现:

  • 环境一致性:通过镜像版本控制确保多节点部署时配置统一。
  • 资源隔离:容器化运行避免与其他服务冲突。
  • 快速迭代:升级或回滚仅需修改YAML文件并重启服务。
  • 轻量级运维:相比Kubernetes,Docker-Compose更适用于中小规模团队。

以某金融企业为例,其通过Docker-Compose在3小时内完成GitLab迁移,相比传统方式节省70%时间,且后续维护成本降低40%。

二、部署前环境准备

1. 硬件要求

  • CPU:4核以上(推荐8核,支持并发操作)
  • 内存:8GB以上(基础版),16GB+(支持CI/CD)
  • 磁盘:200GB+(代码库与构建缓存)
  • 网络:千兆网卡,开放80/443/22端口

2. 软件依赖

  • Docker Engine 20.10+(支持Compose V2)
  • Docker-Compose插件(或独立安装)
  • Linux系统(推荐CentOS 8/Ubuntu 20.04)

3. 存储规划

建议使用独立卷组:

  1. /var/lib/docker # 容器根目录
  2. /opt/gitlab # 数据持久化目录(配置、仓库、日志)

通过df -h确认磁盘空间,避免部署中因空间不足失败。

三、Docker-Compose配置详解

1. 基础YAML文件

  1. version: '3.8'
  2. services:
  3. gitlab:
  4. image: gitlab/gitlab-ee:latest
  5. container_name: gitlab
  6. restart: unless-stopped
  7. environment:
  8. GITLAB_ROOT_PASSWORD: "StrongPassword123!"
  9. GITLAB_OMNIBUS_CONFIG: |
  10. external_url 'http://your-domain.com'
  11. nginx['listen_port'] = 80
  12. nginx['listen_https'] = false
  13. ports:
  14. - "80:80"
  15. - "2222:22" # SSH端口映射
  16. volumes:
  17. - ./config:/etc/gitlab
  18. - ./logs:/var/log/gitlab
  19. - ./data:/var/opt/gitlab

关键参数说明

  • external_url:必须与域名解析一致,否则会引发证书错误。
  • ports:SSH端口建议修改为非标准端口(如2222)增强安全性。
  • volumes:三目录分离避免数据丢失。

2. 高级配置优化

邮件通知配置

GITLAB_OMNIBUS_CONFIG中添加:

  1. gitlab_rails['smtp_enable'] = true
  2. gitlab_rails['smtp_address'] = "smtp.example.com"
  3. gitlab_rails['smtp_port'] = 587
  4. gitlab_rails['smtp_user_name'] = "user@example.com"
  5. gitlab_rails['smtp_password'] = "password"

备份策略

通过Cron定时任务执行:

  1. 0 2 * * * docker exec gitlab gitlab-rake gitlab:backup:create

备份文件默认存储在/var/opt/gitlab/backups,需配置S3等远程存储。

四、部署流程与验证

1. 启动服务

  1. docker-compose up -d

首次启动需下载镜像(约2GB),可通过docker-compose logs -f监控进度。

2. 初始化检查

  • 访问http://your-domain.com,确认登录页面加载。
  • 执行健康检查:
    1. curl -I http://localhost/help
    2. # 应返回200状态码及GitLab版本信息

3. 性能调优

内存限制

在YAML中添加资源控制:

  1. deploy:
  2. resources:
  3. limits:
  4. cpus: '4.0'
  5. memory: 8G

数据库优化

修改/etc/gitlab/gitlab.rb

  1. postgresql['shared_buffers'] = "256MB"
  2. postgresql['work_mem'] = "8MB"

五、安全加固措施

1. 网络隔离

  • 限制容器仅访问必要网络:
    1. networks:
    2. gitlab-net:
    3. driver: bridge
    4. ipam:
    5. config:
    6. - subnet: 172.20.0.0/16

2. 认证集成

支持LDAP/OAuth2集成示例:

  1. gitlab_rails['ldap_enabled'] = true
  2. gitlab_rails['ldap_servers'] = {
  3. 'main' => {
  4. 'label' => 'Company LDAP',
  5. 'host' => 'ldap.example.com',
  6. 'port' => 389,
  7. 'uid' => 'sAMAccountName'
  8. }
  9. }

3. 审计日志

启用访问日志:

  1. nginx['access_log_options'] = ['rotate 7', 'size 100M']

六、常见问题解决方案

1. 502错误

  • 检查内存是否充足:docker stats gitlab
  • 查看日志定位:docker-compose logs gitlab

2. 邮件发送失败

  • 测试SMTP连接:
    1. docker exec -it gitlab bash
    2. python -c "import smtplib; s=smtplib.SMTP('smtp.example.com',587); s.starttls(); s.login('user','pass')"

3. 数据迁移

使用gitlab-backup工具:

  1. # 备份
  2. docker exec gitlab gitlab-rake gitlab:backup:create
  3. # 恢复(新实例)
  4. docker exec -it gitlab bash
  5. gitlab-rake gitlab:backup:restore BACKUP=timestamp_of_backup

七、运维建议

  1. 监控告警:集成Prometheus监控容器资源使用率。
  2. 定期更新:关注GitLab官方镜像更新日志,每季度升级。
  3. 灾备方案:跨机房部署主备节点,使用rsync同步数据目录。

通过本文的完整指南,开发者可系统掌握Docker-Compose部署GitLab的核心技术,构建符合企业级需求的代码管理平台。实际部署中需根据团队规模灵活调整配置参数,并建立完善的运维流程确保服务稳定性。