别再手动折腾了!用Docker Compose 10分钟搞定GitLab私有化部署(含SSL证书配置)

张开发
2026/4/17 5:41:04 15 分钟阅读

分享文章

别再手动折腾了!用Docker Compose 10分钟搞定GitLab私有化部署(含SSL证书配置)
10分钟极速部署企业级GitLabDocker Compose全自动化方案每次手动部署GitLab都要折腾大半天从依赖安装到配置调优再到SSL证书申请传统方式不仅耗时费力还容易出错。作为经历过十几次GitLab部署的老司机我总结出了一套基于Docker Compose的自动化部署方案只需10分钟就能获得一个功能完整、支持HTTPS的企业级代码仓库。1. 为什么选择容器化部署GitLab传统RPM或源码安装GitLab存在几个致命痛点环境依赖复杂需要单独安装PostgreSQL、Redis等、升级困难版本升级常出现兼容性问题、配置分散服务管理需要熟悉gitlab-ctl命令。而容器化方案通过以下优势彻底解决了这些问题环境隔离所有服务Web、数据库、缓存打包在独立容器中一键部署docker-compose.yml定义所有服务依赖关系配置集中通过环境变量和Volume统一管理配置快速迁移整个环境可打包移植到任意支持Docker的主机# 传统安装 vs 容器化安装对比 ----------------------------------------------------------------------------- | 对比项 | 传统安装 | Docker Compose | ----------------------------------------------------------------------------- | 安装时间 | 30分钟~2小时 | 10分钟 | | 依赖管理 | 需手动解决 | 自动解决 | | 配置复杂度 | 多配置文件分散管理 | 单一docker-compose.yml | | 升级风险 | 易出现兼容性问题 | 版本隔离零风险升级 | | 资源占用 | 直接占用主机资源 | 可限制CPU/内存 | -----------------------------------------------------------------------------2. 准备工作Docker环境配置在开始前请确保你的主机满足以下条件Linux系统推荐Ubuntu 20.04或CentOS 8Docker 20.10和Docker Compose 2.04核CPU/8GB内存最低要求团队使用建议16GB50GB可用磁盘空间用于存储代码仓库提示生产环境建议使用云服务器的NVMe SSD存储能显著提升Git操作性能安装Docker和Compose的快速命令# Ubuntu/Debian curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker sudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # CentOS/RHEL yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl enable --now docker curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose3. 编写Docker Compose配置文件创建gitlab-docker目录新建docker-compose.yml文件version: 3.8 services: gitlab: image: gitlab/gitlab-ce:16.2.0-ce.0 container_name: gitlab hostname: gitlab.yourdomain.com # 修改为你的域名 environment: GITLAB_OMNIBUS_CONFIG: | external_url https://gitlab.yourdomain.com # HTTPS地址 gitlab_rails[gitlab_shell_ssh_port] 2222 # SSH端口映射 nginx[redirect_http_to_https] true letsencrypt[enable] true letsencrypt[contact_emails] [adminyourdomain.com] ports: - 80:80 - 443:443 - 2222:22 # Git SSH协议端口 volumes: - ./config:/etc/gitlab - ./logs:/var/log/gitlab - ./data:/var/opt/gitlab restart: always networks: - gitlab-net deploy: resources: limits: cpus: 2 memory: 4G networks: gitlab-net: driver: bridge关键配置说明letsencrypt自动证书通过Lets Encrypt自动获取并续期SSL证书数据持久化三个Volume分别保存配置、日志和应用数据资源限制限制容器使用2核CPU和4GB内存可根据实际情况调整SSH端口将容器内22端口映射到主机的2222端口避免冲突4. 启动与初始化GitLab执行以下命令启动服务mkdir -p {config,logs,data} # 创建持久化目录 docker-compose up -d # 后台启动首次启动需要约5分钟初始化可以通过以下命令查看日志docker logs -f gitlab # 实时查看日志当看到以下日志时表示启动完成gitlab Reconfigured! gitlab Logrotate rotated logs gitlab Grafana ready at http://0.0.0.0:30005. 访问与基础配置在浏览器访问https://你的域名首次登录需要设置root用户密码至少8位建议使用密码管理器生成创建第一个项目或导入现有仓库配置SMTP邮箱服务用于账号激活和通知推荐的基础安全设置开启双重认证Settings → Account → Two-Factor Authentication配置IP白名单Admin Area → Settings → Network → Outbound requests设置自动备份每天凌晨备份到指定目录# 手动执行备份备份文件存储在./data/backups docker exec -it gitlab gitlab-backup create6. 高级配置技巧6.1 性能优化调整修改docker-compose.yml中的环境变量environment: GITLAB_OMNIBUS_CONFIG: | unicorn[worker_processes] 4 postgresql[shared_buffers] 256MB redis[maxmemory] 1GB redis[maxmemory_policy] allkeys-lru sidekiq[concurrency] 106.2 集成外部服务使用Amazon S3存储附件environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails[object_store][enabled] true gitlab_rails[object_store][connection] { provider AWS, aws_access_key_id AKIAxxxxxxxx, aws_secret_access_key xxxxxxxx, region us-east-1 } gitlab_rails[object_store][objects][artifacts][bucket] gitlab-artifacts gitlab_rails[object_store][objects][uploads][bucket] gitlab-uploads6.3 定期维护命令# 检查服务状态 docker exec -it gitlab gitlab-ctl status # 重新加载配置 docker exec -it gitlab gitlab-ctl reconfigure # 升级到新版本 docker-compose pull docker-compose up -d7. 常见问题排查Q1: 访问出现502错误# 检查unicorn日志 docker exec -it gitlab tail -f /var/log/gitlab/unicorn/unicorn_stderr.log # 常见原因是内存不足尝试增加内存限制 deploy: resources: limits: memory: 8GQ2: Lets Encrypt证书获取失败确认域名已正确解析到服务器IP检查80/443端口未被防火墙拦截手动获取证书测试docker exec -it gitlab gitlab-ctl reconfigure docker exec -it gitlab grep letsencrypt /var/log/gitlab/nginx/error.logQ3: 备份恢复操作# 停止写入服务 docker exec -it gitlab gitlab-ctl stop unicorn docker exec -it gitlab gitlab-ctl stop sidekiq # 执行恢复1634715076_2021_10_20_12.3.0为备份文件名前缀 docker exec -it gitlab gitlab-backup restore BACKUP1634715076_2021_10_20_12.3.0 # 重启服务 docker exec -it gitlab gitlab-ctl restart这套方案已经在多个20人以上的技术团队稳定运行超过两年最大的优势是环境一致性——无论是开发测试还是生产环境都能保证完全相同的运行环境。最近一次从15.x升级到16.x版本只用了10分钟就完成了零停机升级这在传统部署方式中是不可想象的。

更多文章