logo

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

作者:demo2025.09.26 11:09浏览量:1

简介:本文详细介绍如何使用Docker-Compose实现GitLab的私有化部署,涵盖环境准备、配置优化、数据持久化及运维建议,助力开发者快速构建安全可控的代码管理平台。

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

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

在传统部署方式中,GitLab的安装需要手动配置数据库、Redis、存储路径等组件,过程复杂且容易出错。而Docker-Compose通过声明式YAML文件,将GitLab及其依赖服务(如PostgreSQL、Redis)封装为容器化服务,实现”开箱即用”的部署体验。其核心优势包括:

  1. 环境一致性:避免因操作系统差异导致的配置问题
  2. 资源隔离:每个服务运行在独立容器中,互不干扰
  3. 快速回滚:通过版本化的compose文件可快速重建环境
  4. 横向扩展:支持通过修改配置轻松增加Runner等组件

某中型开发团队实践显示,使用Docker-Compose部署将环境准备时间从8小时缩短至30分钟,且故障复现率降低90%。

二、部署前环境准备

硬件要求

组件 最低配置 推荐配置
CPU 2核 4核(支持并发)
内存 4GB 8GB(含对象存储
磁盘空间 40GB 100GB+(SSD优先)

关键提示:GitLab的存储需求随项目增长呈线性上升,建议初始分配至少50GB空间,并配置自动扩展卷。

软件依赖

  1. 安装Docker Engine(建议20.10+版本)
    1. curl -fsSL https://get.docker.com | sh
    2. sudo usermod -aG docker $USER
  2. 安装Docker-Compose(v2.0+)
    1. sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    2. sudo chmod +x /usr/local/bin/docker-compose

三、核心部署流程

1. 创建配置目录结构

  1. mkdir -p ~/gitlab/config ~/gitlab/data ~/gitlab/logs
  2. cd ~/gitlab

2. 编写docker-compose.yml

  1. version: '3.8'
  2. services:
  3. web:
  4. image: gitlab/gitlab-ee:latest
  5. container_name: gitlab
  6. restart: unless-stopped
  7. hostname: 'gitlab.example.com' # 需替换为实际域名
  8. environment:
  9. GITLAB_OMNIBUS_CONFIG: |
  10. external_url 'http://gitlab.example.com'
  11. gitlab_rails['gitlab_shell_ssh_port'] = 2222
  12. postgresql['enable'] = false
  13. gitlab_rails['db_host'] = 'db'
  14. gitlab_rails['db_password'] = 'secure_password'
  15. redis['enable'] = false
  16. gitlab_rails['redis_host'] = 'redis'
  17. ports:
  18. - '80:80'
  19. - '443:443'
  20. - '2222:22'
  21. volumes:
  22. - './config:/etc/gitlab'
  23. - './logs:/var/log/gitlab'
  24. - './data:/var/opt/gitlab'
  25. depends_on:
  26. - db
  27. - redis
  28. db:
  29. image: postgres:14-alpine
  30. container_name: gitlab-db
  31. restart: unless-stopped
  32. environment:
  33. POSTGRES_DB: gitlabhq_production
  34. POSTGRES_USER: gitlab
  35. POSTGRES_PASSWORD: 'secure_password'
  36. volumes:
  37. - './postgresql:/var/lib/postgresql/data'
  38. redis:
  39. image: redis:7-alpine
  40. container_name: gitlab-redis
  41. restart: unless-stopped
  42. command: redis-server --requirepass 'secure_password'
  43. volumes:
  44. - './redis:/data'

配置要点解析

  • 外部URL:必须与域名解析一致,否则会导致CI/CD失败
  • SSH端口:默认22端口可能被占用,建议映射到高位端口
  • 持久化存储:三个volume分别对应配置、日志和数据,缺一不可
  • 安全密码:生产环境应使用openssl rand -base64 24生成强密码

3. 启动服务

  1. docker-compose up -d

首次启动需要下载镜像(约1.5GB),可通过docker-compose logs -f查看实时日志。待出现GitLab is now running.字样表示部署成功。

四、关键配置优化

1. 邮件服务配置

~/gitlab/config/gitlab.rb中添加:

  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"
  6. gitlab_rails['smtp_domain'] = "example.com"
  7. gitlab_rails['smtp_authentication'] = "login"
  8. gitlab_rails['smtp_enable_starttls_auto'] = true

2. 备份策略配置

创建备份脚本/usr/local/bin/gitlab-backup.sh

  1. #!/bin/bash
  2. docker-compose exec web gitlab-backup create BACKUP=daily
  3. find /home/ubuntu/gitlab/data/backups -name "*.tar" -mtime +7 -delete

通过crontab设置每日凌晨2点执行:

  1. 0 2 * * * /usr/local/bin/gitlab-backup.sh

3. 性能调优参数

gitlab.rb中调整以下参数:

  1. # 数据库连接池
  2. postgresql['shared_buffers'] = '256MB'
  3. postgresql['work_mem'] = '16MB'
  4. # Sidekiq并发数
  5. gitlab_rails['sidekiq_concurrency'] = 25
  6. # Unicorn工作进程
  7. unicorn['worker_processes'] = 4

五、运维管理最佳实践

1. 监控方案

推荐使用Prometheus+Grafana监控组合:

  1. # 在docker-compose.yml中添加
  2. prometheus:
  3. image: prom/prometheus:v2.47
  4. volumes:
  5. - ./prometheus.yml:/etc/prometheus/prometheus.yml
  6. ports:
  7. - "9090:9090"
  8. grafana:
  9. image: grafana/grafana:10.2
  10. ports:
  11. - "3000:3000"
  12. depends_on:
  13. - prometheus

2. 升级策略

采用蓝绿部署方式:

  1. 创建新版本目录mkdir ~/gitlab-v2
  2. 修改新compose文件中的镜像版本
  3. 执行docker-compose -f ~/gitlab-v2/docker-compose.yml up -d
  4. 验证服务正常后,逐步迁移数据

3. 故障排查指南

现象 排查步骤
502 Bad Gateway 检查docker-compose logs web是否有Unicorn崩溃日志
页面加载缓慢 使用docker stats查看容器资源占用,调整unicorn['worker_timeout']
Git操作超时 检查SSH端口映射,验证gitlab_rails['gitlab_shell_ssh_port']配置
备份失败 确保/var/opt/gitlab/backups目录有写入权限,检查磁盘空间

六、安全加固建议

  1. 网络隔离:使用network_mode: "host"或自定义网络限制访问
  2. 数据加密:对持久化卷启用LUKS加密
  3. 访问控制
    1. gitlab_rails['gitlab_default_can_create_group'] = false
    2. gitlab_rails['gitlab_username_changing_enabled'] = false
  4. 定期审计:通过docker-compose exec web cat /var/log/gitlab/gitlab-rails/production.log检查异常登录

七、扩展场景实现

1. 集成Runner

  1. # 添加到docker-compose.yml
  2. runner:
  3. image: gitlab/gitlab-runner:alpine
  4. restart: unless-stopped
  5. volumes:
  6. - '/var/run/docker.sock:/var/run/docker.sock'
  7. - './runner-config:/etc/gitlab-runner'
  8. command: register --non-interactive --url "http://web" --registration-token "TOKEN" --executor "docker" --description "docker-runner" --docker-image "alpine:latest"

2. 多节点部署

对于大型团队,可采用:

  1. 主节点部署完整GitLab
  2. 从节点仅部署GitLab Pages和MinIO对象存储
  3. 通过NFS共享存储

八、常见问题解决方案

问题1:数据库连接失败
解决方案

  1. 检查db服务是否正常运行:docker-compose ps
  2. 验证密码一致性:docker-compose exec db psql -U gitlab -d gitlabhq_production -c "\conninfo"
  3. 检查防火墙规则:ufw status

问题2:内存不足导致OOM
解决方案

  1. 临时调整:docker-compose up -d --scale web=1减少容器实例
  2. 永久修改:在/etc/docker/daemon.json中添加:
    1. {
    2. "default-ulimits": {
    3. "memlock": {
    4. "Name": "memlock",
    5. "Hard": -1,
    6. "Soft": -1
    7. }
    8. }
    9. }

九、总结与展望

通过Docker-Compose部署GitLab,开发者可以在30分钟内完成从零到全功能代码管理平台的搭建。这种部署方式特别适合:

  • 中小型开发团队(10-100人)
  • 需要快速迭代的持续集成环境
  • 预算有限但要求高可用的场景

未来发展方向可关注:

  1. GitLab与Kubernetes的深度集成
  2. 基于边缘计算的分布式部署方案
  3. AI辅助的代码审查集成

建议定期(每季度)进行以下维护:

  1. 执行docker-compose pull更新镜像
  2. 验证备份文件的可恢复性
  3. 审查用户权限和项目访问控制

通过本文提供的完整方案,读者可以构建出既满足功能需求又具备高可用性的私有GitLab环境,为软件开发提供稳定可靠的基础设施支持。

相关文章推荐

发表评论

活动