Docker Compose编排极狐GitLab:一键部署与配置实战
1. 为什么选择Docker Compose部署极狐GitLab?
如果你正在寻找一种快速、可重复且易于维护的GitLab部署方案,Docker Compose绝对是你的不二之选。相比传统的命令行部署方式,Docker Compose通过声明式的YAML文件定义服务,能够实现一键启动、停止和升级,极大简化了运维工作。
在实际项目中,我遇到过不少团队还在手动敲Docker命令部署GitLab,每次环境变更都要重新输入一长串参数,不仅容易出错,后期维护更是噩梦。而改用Docker Compose后,所有配置都固化在文件中,新成员加入时只需docker-compose up -d就能获得完全一致的环境。
极狐GitLab作为GitLab的中国发行版,特别适合国内团队使用。它提供了中文界面、本地化服务支持,并且所有数据都存储在境内,完全符合数据合规要求。通过Docker Compose部署,你可以在20分钟内就搭建好一个功能完整的企业级代码托管平台。
2. 环境准备与目录规划
在开始之前,我们需要确保基础环境就绪。首先确认已安装Docker Engine(版本20.10.0+)和Docker Compose插件。可以通过以下命令检查:
docker --version docker compose version建议为GitLab分配至少4核CPU、8GB内存和50GB存储空间。我曾在资源不足的机器上部署,结果容器频繁崩溃,特别是当CI/CD流水线运行时,内存直接爆满。
接下来规划存储目录结构。与直接使用Docker不同,Compose部署需要预先考虑数据持久化的位置:
/gitlab ├── docker-compose.yml # Compose配置文件 ├── data # 应用数据 ├── config # 配置文件 └── logs # 日志文件使用以下命令创建目录并设置权限:
sudo mkdir -p /gitlab/{data,config,logs} sudo chmod -R 775 /gitlab特别提醒:如果使用SELinux,需要添加:Z后缀来重新标记卷权限,否则会出现权限错误。这是我曾经踩过的一个坑,当时花了半天才找到原因。
3. 编写docker-compose.yml文件
现在进入核心环节——编写Compose配置文件。新建docker-compose.yml文件,内容如下:
version: '3.8' services: gitlab: image: registry.gitlab.cn/omnibus/gitlab-jh:16.5.3-jh.0 container_name: gitlab hostname: gitlab.yourdomain.com restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.yourdomain.com' gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_email_from'] = 'gitlab@yourdomain.com' ports: - "80:80" - "443:443" - "2222:22" # 避免与宿主机SSH端口冲突 volumes: - ./config:/etc/gitlab - ./logs:/var/log/gitlab - ./data:/var/opt/gitlab shm_size: '256m' networks: - gitlab-net networks: gitlab-net: driver: bridge这个配置有几个关键点需要注意:
- 使用国内镜像源
registry.gitlab.cn加速下载 - 指定具体版本号(16.5.3-jh.0)而非latest,避免意外升级
- 通过
GITLAB_OMNIBUS_CONFIG注入配置,这是极狐GitLab特有的方式 - 将SSH端口映射为2222,避免与宿主机冲突
如果你需要SMTP发信功能,可以添加以下配置:
environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "your@email.com" gitlab_rails['smtp_password'] = "yourpassword" gitlab_rails['smtp_domain'] = "exmail.qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true4. 启动服务与初始配置
一切就绪后,在docker-compose.yml所在目录执行:
docker compose up -d首次启动需要较长时间(约5-10分钟),因为极狐GitLab要进行数据库初始化和各种服务启动。可以通过以下命令查看实时日志:
docker compose logs -f当看到以下日志时,说明启动完成:
gitlab Reconfigured! gitlab GitLab configured and started!现在访问你配置的域名(如https://gitlab.yourdomain.com),首次登录需要修改root密码。密码文件位于:
cat ./config/initial_root_password安全提示:该文件24小时后会自动删除,建议立即修改密码并开启双重认证。
5. 日常维护与问题排查
使用Docker Compose管理服务非常便捷:
启停服务:
docker compose stop # 停止 docker compose start # 启动备份恢复:
# 备份 docker compose exec gitlab gitlab-backup create # 恢复(需要先停止服务) docker compose exec gitlab gitlab-backup restore BACKUP=xxx版本升级: 修改
docker-compose.yml中的镜像版本号,然后执行:docker compose pull docker compose up -d
常见问题解决方案:
- 502错误:通常是内存不足导致,增加swap空间或升级配置
- 启动超时:检查
./logs/reconfigure.log查看具体卡在哪一步 - 邮件发送失败:验证SMTP配置后执行
docker compose exec gitlab gitlab-ctl reconfigure
6. 性能优化与安全加固
经过几个生产环境的实践,我总结出以下优化建议:
性能调优:
environment: GITLAB_OMNIBUS_CONFIG: | puma['worker_processes'] = 4 sidekiq['max_concurrency'] = 10 postgresql['shared_buffers'] = "256MB"安全加固:
- 定期更新镜像版本
- 配置防火墙规则,仅开放必要端口
- 启用HTTPS并配置HSTS
- 设置项目镜像清理策略
对于企业级使用,建议添加Prometheus监控:
monitoring: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml depends_on: - gitlab这种基于Docker Compose的部署方式,不仅简化了极狐GitLab的安装流程,更重要的是提供了可版本控制的标准化部署方案。当需要迁移或重建环境时,你只需保留好docker-compose.yml和数据卷,就能快速恢复服务。
