Docker 部署 GitLab CE:从安装配置到灾备与高可用(避坑指南)

Words 1574Read Time 4 min
2022-2-12
2026-2-11
cover
type
Post
status
Published
date
Feb 12, 2022 21:14
slug
summary
本文介绍如何使用 Docker 在内网快速搭建 GitLab CE 自建实例。从镜像拉取、容器启动到 external_url 配置,解决项目地址使用容器 hostname 的问题;详解数据持久化三要素(config/data/logs)与异机备份策略(rsync + 定时任务);对比单机灾备、双机热备、多节点 HA 三种高可用方案的成本与适用场景;提供管理员密码重置、端口冲突、内存不足等常见问题的避坑清单,适合个人与小团队快速落地。
tags
Docker
Infrastructure
Git
category
DevOps
icon
password
wordCount
1821
😀
为什么要自建 GitLab: 在团队协作或个人项目管理中,GitLab 不只是代码仓库,还能把 代码托管、权限管理、Issue、Wiki、CI/CD 等能力整合到一个平台里。
选择自建 GitLab(Self-Managed)通常有这些目的:
  • 内网可用:在公司内网、实验室网络、或不方便访问外网的环境里,也能稳定使用代码托管与协作能力。
  • 数据可控:代码与制品保存在自己的服务器上,便于满足合规、审计、数据安全等要求。
  • 统一协作入口:用一个系统管理项目、成员权限、Merge Request 流程,以及代码评审记录。
  • 扩展 DevOps 能力:后续可以接入 Runner,实现自动构建、自动测试、自动部署。
本文使用 Docker 快速部署 GitLab CE,并记录关键配置与常见坑,确保“能跑起来、能访问、地址正确、数据不丢”。
 

实验环境(含软件依赖)

  • 操作系统:Deepin OS 20 社区版
  • Docker:19.03.8(建议使用与本文一致或更高的稳定版本)
    • 建议执行 docker version 确认客户端与服务端版本
    • 确认 Docker 服务已启动:systemctl status docker
  • 网络要求
    • 能访问 Docker Hub(若网络受限,建议提前配置镜像加速)
    • GitLab 需要稳定的内网 IP 或域名(用于生成项目克隆地址)

安装 GitLab

  1. 拉取 GitLab 镜像
      • gitlab-ce 为社区稳定版,默认会拉取最新标签。
  1. 启动 GitLab 容器
    1. 参数说明:
      • -d:后台运行
      • -p:端口映射(宿主机端口:容器端口)
      • --name:容器名称
      • --restart always:Docker 重启后自动拉起容器
      • -v:挂载目录(配置、日志、数据持久化)
      运行成功后会输出一串字符串,为容器 ID

配置 GitLab(解决项目 URL 使用容器 hostname 的问题)

GitLab 在生成项目访问地址时,可能会默认使用容器的 hostname(通常就是容器 ID)。作为服务端,我们通常希望对外暴露一个固定的访问地址,因此需要修改 gitlab.rb
  1. 获取宿主机 IP
      • Windows:ipconfig
      • Linux:ifconfigip a
  1. 编辑配置文件
    1. 宿主机路径:/home/gitlab/config/gitlab.rb
  1. 配置对外访问地址与端口
    1. 按实际 IP 和端口替换以下内容:
      如果你希望通过域名访问(更推荐),可以将 192.168.1.231 替换为域名,并在 DNS 或 hosts 中做好解析。
  1. 重启容器使配置生效

    重置管理员(root)密码

    1. 进入 GitLab 容器
      1. 进入 Rails 控制台(生产环境)
        1. 找到 root 用户(通常 id 为 1)
          1. 设置新密码并保存
            ⚠️
            请将示例密码 secret_pass 替换为强密码,并注意不要把真实密码提交到笔记或代码仓库。

            数据灾备(备份与恢复)

            备份需要覆盖什么?
            对象
            本文对应路径(宿主机)
            目的
            配置(config)
            /home/gitlab/config
            恢复域名、端口、SMTP、认证等配置
            数据(data)
            /home/gitlab/data
            仓库、附件、LFS、CI 产物等核心资产
            日志(logs)
            /home/gitlab/logs
            排障定位问题(可选但推荐)
            常见备份策略怎么选?
            策略
            成本
            恢复速度
            适用场景
            本机备份(同机同盘)
            仅用于临时防误删,不算灾备
            异机备份(rsync/NAS)
            低-中
            个人/小团队最实用,推荐起步方案
            对象存储备份(S3 兼容)
            异地容灾、跨机房,网络稳定时体验好
            🧯
            硬性建议: 定期做一次恢复演练(在测试机上恢复),否则备份“可能不可用”。

            示例(推荐起步):异机 rsync + 定时任务

             
            下面以“把备份同步到 NAS 或另一台 Linux 机器”为例。
            1)准备备份目录(本机)
            2)写一个同步脚本(本机)
            保存为:/usr/local/bin/backup_gitlab_dirs.sh
            赋权:
            3)配置免密 SSH(一次性)
            4)加入定时任务(每天 2:30)
            加入:
            5)简单验证
            • 检查日志:tail -f /var/log/gitlab_backup.log
            • 去 NAS/备份机确认目录是否有更新。

            高可用(HA)方案(按复杂度递进)

            方案
            核心思路
            优点
            缺点
            适合谁
            A. 单机 + 灾备(DR)
            单点运行,但异机备份 + 快速重建
            最简单,投入小,落地快
            故障期间不可用(需人工恢复)
            个人/小团队(推荐)
            B. 双机热备/冷备(DR)
            准备一台备用机,故障时切换入口
            恢复更快,风险更低
            仍需切换流程,维护成本上升
            对恢复时间有要求的小团队
            C. 多节点 HA
            LB + 多 Web 节点 + 外置 PG/Redis + 共享存储
            可做到单点故障不中断
            部署维护复杂,组件多,排障成本高
            中大型团队/生产高可用要求

            示例:方案 A(单机 + 灾备)

            对 Docker 单机部署来说,最“性价比高”的 HA 其实是 先把 DR 做到位
            • 规范化挂载目录(本文已做:config/logs/data
            • 异机定时备份(上面的 rsync + cron)
            • 预先准备好重建步骤(镜像拉取、docker run 参数、gitlab.rb)
            ⚠️
            当你能做到“删容器、换机器、靠备份恢复”这件事时,你的 GitLab 就已经具备非常强的抗风险能力了。

            常见坑与注意事项

            • 首次启动很慢:第一次启动会初始化配置与数据库,可能需要几分钟。可以用 docker logs -f gitlab 观察进度。
            • 端口冲突:宿主机若已有 Nginx/Apache 占用 80/443,会导致容器启动失败或访问异常。可改用其他端口映射,例如 -p 8080:80 -p 8443:443
            • SSH 克隆端口要一致:本文将容器 22 映射到宿主机 222,所以克隆地址需要带上 :222,并确保防火墙放行。
            • 内存不足导致 502/卡死:GitLab 对资源要求较高,内存偏小的机器容易出现启动失败、页面 502 等问题。建议至少 4GB 内存(更推荐 8GB+)。
            • 数据一定要做持久化:务必保留 config/logs/data 三个挂载目录,否则容器删除后数据会丢。
            • external_url 配置要正确:若访问地址变更(IP 改了或换域名),记得同步更新 gitlab.rb 并重启,否则项目 URL、回调地址等可能异常。
            Loading...