Docker Compose 编排 GitLab CE 16.7.2:1个文件管理3大服务配置
·
Docker Compose 编排 GitLab CE 16.7.2:1个文件管理3大服务配置
在现代化开发流程中,GitLab 已成为 DevOps 团队不可或缺的一站式平台。本文将展示如何通过 Docker Compose 声明式编排 GitLab CE 16.7.2 版本,实现跨平台部署(支持 ARM64/AMD64 架构),并通过单文件管理 Web、SSH 和 Sidekiq 三大核心服务。
1. 环境准备与架构设计
GitLab 作为资源密集型应用,建议部署主机满足以下最低配置:
- CPU :4 核(ARM64 或 x86_64)
- 内存 :4GB(生产环境推荐 8GB+)
- 存储 :至少 20GB 可用空间
传统单容器部署方式存在配置分散、难以版本控制的痛点。我们采用 Docker Compose 方案具有三大优势:
- 服务定义集中化 :所有服务、网络、卷配置在单个 YAML 文件中
- 跨平台一致性 :通过多阶段构建支持不同 CPU 架构
- 配置即代码 :docker-compose.yml 可纳入版本控制系统管理
提示:若使用 Apple Silicon 或树莓派等 ARM 设备,需确认 Docker 已启用
buildx多平台构建支持
2. 编排文件深度解析
以下是完整的 docker-compose.yml 文件,包含关键配置注释:
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:16.7.2-ce.0
container_name: gitlab-ce
restart: unless-stopped
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['initial_root_password'] = '${GITLAB_ROOT_PASSWORD}'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
redis['bind'] = '127.0.0.1'
postgresql['shared_buffers'] = '256MB'
ports:
- "80:80"
- "443:443"
- "2222:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_data:/var/opt/gitlab
- gitlab_logs:/var/log/gitlab
healthcheck:
test: ["CMD", "/opt/gitlab/bin/gitlab-healthcheck", "--fail"]
interval: 1m
timeout: 10s
retries: 3
volumes:
gitlab_config:
gitlab_data:
gitlab_logs:
networks:
default:
name: gitlab_network
关键配置说明:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
GITLAB_OMNIBUS_CONFIG |
内嵌 Ruby 配置语法 | 需包含 external_url |
gitlab_shell_ssh_port |
SSH 克隆端口映射 | 避免与主机 22 端口冲突 |
postgresql['shared_buffers'] |
数据库缓存大小 | 内存的 1/4 |
healthcheck |
容器健康监测 | 使用官方检查脚本 |
3. 跨平台构建实践
针对 ARM64 设备(如 Mac M1/M2、树莓派 4),我们需要自定义 Dockerfile:
# 多阶段构建 - 同时支持 x86_64 和 arm64
FROM --platform=$BUILDPLATFORM alpine as builder
ARG TARGETARCH
RUN apk add --no-cache curl
RUN case ${TARGETARCH} in \
"amd64") DL_ARCH="x86_64" ;; \
"arm64") DL_ARCH="aarch64" ;; \
esac && \
curl -L -o /gitlab.deb "https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/jammy/gitlab-ce_16.7.2-ce.0_${DL_ARCH}.deb/download.deb"
FROM ubuntu:22.04
COPY --from=builder /gitlab.deb /tmp/
RUN apt-get update && \
apt-get install -y /tmp/gitlab.deb && \
rm -f /tmp/gitlab.deb && \
apt-get clean
CMD ["/assets/wrapper"]
构建命令示例:
# 启用 buildx 多平台构建
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t yourrepo/gitlab-ce:16.7.2 .
4. 初始化与故障排查
首次启动后执行以下操作:
- 获取 root 密码 :
docker exec -it gitlab-ce \
grep 'Password:' /etc/gitlab/initial_root_password
- 检查服务状态 :
docker exec gitlab-ce gitlab-ctl status
常见问题解决方案:
- 502 错误 :通常因内存不足导致,增加容器内存限制
- SSH 连接失败 :检查
gitlab.rb中gitlab_shell_ssh_port配置 - ARM64 性能问题 :在
docker-compose.yml中添加资源限制:deploy: resources: limits: cpus: '2' memory: 4G
5. 高级配置技巧
5.1 邮件服务集成
在 GITLAB_OMNIBUS_CONFIG 中添加 SMTP 配置:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "user@example.com"
gitlab_rails['smtp_password'] = "${SMTP_PASSWORD}"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
5.2 定期备份方案
创建备份脚本 gitlab-backup.sh :
#!/bin/bash
docker exec -t gitlab-ce gitlab-backup create
cp /var/lib/docker/volumes/gitlab_config/_data/*.rb ./config-backups/
添加到 crontab:
0 2 * * * /path/to/gitlab-backup.sh
5.3 性能调优参数
针对 8GB 内存主机的优化建议:
unicorn['worker_processes'] = 3
postgresql['shared_buffers'] = "1GB"
sidekiq['concurrency'] = 5
prometheus_monitoring['enable'] = false # 资源紧张时可关闭
6. 安全加固措施
- HTTPS 强制跳转 :
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"
- 容器安全限制 :
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
read_only: true
- 定期更新策略 :
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup
更多推荐




所有评论(0)