Docker Compose 部署极狐GitLab 17.103步构建企业级CI/CD平台为什么选择Docker Compose部署极狐GitLab在容器化技术普及的今天传统的手动安装方式已经无法满足DevOps团队对效率和一致性的要求。极狐GitLab作为国内领先的一站式DevOps平台其Docker化部署方案能带来三大核心优势环境一致性消除在我机器上能运行的经典问题确保开发、测试、生产环境完全一致快速部署从零到可用的CI/CD平台只需10分钟资源隔离避免依赖冲突保持主机环境纯净最新发布的极狐GitLab 17.10版本在CI/CD流水线效率上提升了40%并新增了安全扫描集成功能这使得容器化部署的价值更加凸显。下面我们将通过一个生产级配置示例展示如何用Docker Compose快速搭建高可用GitLab环境。1. 环境准备与配置1.1 系统要求在开始前请确保宿主机满足以下最低配置资源类型最低要求推荐配置CPU4核8核内存8GB16GB存储100GB500GB SSD系统Linux内核5.4Ubuntu 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] gitlabexample.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] gitlabexample.com3. 启动与初始化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 CRON1备份文件默认存储在/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证书配置使用Lets Encrypt自动获取证书letsencrypt[enable] true letsencrypt[contact_emails] [adminexample.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关键服务状态应为runnginxpostgresqlredissidekiqpuma存储空间不足通过定期清理无用数据释放空间# 清理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查看监控仪表盘