Docker Compose 部署极狐GitLab 17.10:3步完成高可用CI/CD环境搭建
Docker Compose 部署极狐GitLab 17.10:3步构建企业级CI/CD平台
为什么选择Docker Compose部署极狐GitLab?
在容器化技术普及的今天,传统的手动安装方式已经无法满足DevOps团队对效率和一致性的要求。极狐GitLab作为国内领先的一站式DevOps平台,其Docker化部署方案能带来三大核心优势:
- 环境一致性:消除"在我机器上能运行"的经典问题,确保开发、测试、生产环境完全一致
- 快速部署:从零到可用的CI/CD平台只需10分钟
- 资源隔离:避免依赖冲突,保持主机环境纯净
最新发布的极狐GitLab 17.10版本在CI/CD流水线效率上提升了40%,并新增了安全扫描集成功能,这使得容器化部署的价值更加凸显。下面我们将通过一个生产级配置示例,展示如何用Docker Compose快速搭建高可用GitLab环境。
1. 环境准备与配置
1.1 系统要求
在开始前,请确保宿主机满足以下最低配置:
| 资源类型 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核 |
| 内存 | 8GB | 16GB |
| 存储 | 100GB | 500GB SSD |
| 系统 | Linux内核5.4+ | Ubuntu 22.04 LTS |
提示:对于团队规模超过20人的场景,建议单独配置Redis和PostgreSQL容器以提升性能
1.2 目录结构规划
创建以下目录结构用于数据持久化:
mkdir -p /srv/gitlab/{config,logs,data} export GITLAB_HOME=/srv/gitlab这个结构将映射到容器内的关键目录:
config/:存放GitLab配置文件logs/:存储各组件日志data/:保存应用数据和仓库内容
1.3 Docker环境检查
确保Docker和Docker Compose已正确安装:
# 检查Docker版本 docker --version # 检查Compose版本 docker compose version # 查看容器运行状态 docker ps如果尚未安装,可以使用以下命令快速安装:
# Ubuntu示例 sudo apt-get update && sudo apt-get install -y docker.io docker-compose-plugin sudo systemctl enable --now docker2. 编写生产级Docker Compose配置
2.1 基础服务编排
创建docker-compose.yml文件,包含以下核心服务:
version: '3.8' services: gitlab: image: registry.gitlab.cn/omnibus/gitlab-jh:17.10.0 container_name: gitlab hostname: gitlab.yourdomain.com restart: unless-stopped environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.yourdomain.com' gitlab_rails['gitlab_shell_ssh_port'] = 2222 nginx['listen_port'] = 80 nginx['listen_https'] = false nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on" } ports: - "80:80" - "443:443" - "2222:22" volumes: - $GITLAB_HOME/config:/etc/gitlab - $GITLAB_HOME/logs:/var/log/gitlab - $GITLAB_HOME/data:/var/opt/gitlab shm_size: '256m' networks: - gitlab_net networks: gitlab_net: driver: bridge关键配置说明:
- 多端口映射:HTTP(80)、HTTPS(443)和SSH(2222)三个必备端口
- 资源限制:通过
shm_size配置共享内存大小,避免内存不足问题 - 网络隔离:使用独立网络增强安全性
2.2 健康检查与监控
在生产环境中添加健康检查配置:
healthcheck: test: ["CMD", "/opt/gitlab/bin/gitlab-healthcheck"] interval: 30s timeout: 5s retries: 3 start_period: 5m同时配置资源限制防止单个容器耗尽主机资源:
deploy: resources: limits: cpus: '2' memory: 8G reservations: memory: 4G2.3 邮件服务集成
GitLab需要邮件服务进行通知,以下是SMTP配置示例:
environment: GITLAB_OMNIBUS_CONFIG: | 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'] = "yourpassword" 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'3. 启动与初始化
3.1 一键启动服务
使用以下命令启动所有服务:
docker compose up -d启动后可以通过命令查看日志:
docker compose logs -f gitlab3.2 获取初始密码
首次启动需要获取root用户初始密码:
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password安全提示:此密码文件将在24小时后自动删除,建议立即修改
3.3 访问与配置
通过浏览器访问配置的域名(如https://gitlab.yourdomain.com),使用root账户登录后:
- 修改密码:在用户设置中更新root密码
- 配置SSH:将公钥添加到账户以便代码推送
- 设置中文:Preferences → Localization → 简体中文
3.4 备份策略
配置定期备份确保数据安全:
# 手动备份 docker exec -t gitlab gitlab-backup create # 自动备份(crontab示例) 0 2 * * * docker exec -t gitlab gitlab-backup create CRON=1备份文件默认存储在/srv/gitlab/data/backups目录
高级配置与优化
性能调优参数
在GITLAB_OMNIBUS_CONFIG中添加以下优化配置:
# 数据库连接池 postgresql['max_connections'] = 200 unicorn['worker_processes'] = 4 # 缓存配置 redis['maxmemory'] = '1gb' redis['maxmemory_policy'] = 'allkeys-lru' # Sidekiq并发 sidekiq['concurrency'] = 10HTTPS证书配置
使用Let's Encrypt自动获取证书:
letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com'] letsencrypt['auto_renew'] = true letsencrypt['auto_renew_hour'] = 12 letsencrypt['auto_renew_minute'] = 30或使用已有证书:
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"集成GitLab Runner
创建独立的Runner容器:
services: gitlab-runner: image: gitlab/gitlab-runner:alpine container_name: gitlab-runner restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock - $GITLAB_HOME/gitlab-runner:/etc/gitlab-runner networks: - gitlab_net注册Runner时使用内部服务名连接:
docker exec -it gitlab-runner gitlab-runner register \ --url http://gitlab/ \ --registration-token YOUR_PROJECT_TOKEN \ --executor docker \ --docker-image alpine:latest常见问题排查
启动超时处理
GitLab初始化可能需要较长时间(10-15分钟),若出现502错误可检查:
docker exec -it gitlab gitlab-ctl status关键服务状态应为"run":
- nginx
- postgresql
- redis
- sidekiq
- puma
存储空间不足
通过定期清理无用数据释放空间:
# 清理Docker系统资源 docker system prune -f # 清理GitLab上传文件 docker exec -it gitlab gitlab-rake gitlab:cleanup:orphan_upload_files性能监控
集成Prometheus监控:
prometheus['enable'] = true grafana['enable'] = true node_exporter['enable'] = true redis_exporter['enable'] = true postgres_exporter['enable'] = true访问https://gitlab.yourdomain.com/-/grafana查看监控仪表盘
