在 DigitalOcean 上使用 Docker Compose 部署 GitLab,核心步骤是创建满足内存要求的 Droplet,配置 Docker 环境,编写映射端口和存储卷的 docker-compose.yml 文件,并启动服务。此方案适合中小团队私有化部署,需注意宿主机 SSH 端口冲突和最低硬件资源限制。
先说结论:Docker Compose 是 DigitalOcean 上部署 GitLab 的高效方案,能隔离环境并简化升级,但必须预留足够内存。
- 适合:中小团队私有代码托管,需要数据自控且希望降低运维复杂度。
- 先准备:至少 4 核 CPU、8GB 内存的 Ubuntu Droplet,以及已配置的域名解析。
- 验收:能通过浏览器访问 GitLab 界面,且 SSH 克隆端口不与宿主机冲突。
命令速用版
以下是基于官方镜像的核心配置片段,可直接用于创建 docker-compose.yml 文件。注意 SSH 端口映射为 2222 以避免冲突。
version: '3.8'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.local'
container_name: gitlab
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- '/opt/gitlab/config:/etc/gitlab'
- '/opt/gitlab/logs:/var/log/gitlab'
- '/opt/gitlab/data:/var/opt/gitlab'为什么会这样
选择 Docker Compose 部署是为了实现环境一致性和资源隔离,避免直接安装带来的依赖冲突。传统 RPM 包安装涉及 Ruby、PostgreSQL 等复杂依赖,而容器化将 Web 服务、数据库和缓存封装在独立容器中,升级时仅需修改镜像标签并重启服务,显著降低维护成本。
分步处理
第一步:创建 DigitalOcean Droplet
在 DigitalOcean 控制台创建新的 Droplet,操作系统选择 Ubuntu 20.04 LTS 或更高版本。配置建议至少 4 核 CPU 和 8GB 内存,磁盘空间不低于 50GB,否则 GitLab 服务可能因内存不足无法启动。
第二步:安装 Docker 环境
登录 Droplet 后,安装 Docker 和 Docker Compose。建议使用 Docker 20.10 以上版本,并通过以下命令将当前用户加入 docker 组以避免权限问题:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
第三步:配置 Compose 文件
在~/gitlab-deploy 目录下创建 docker-compose.yml,填入上述“命令速用版”中的内容。确保 volumes 路径权限正确,建议将配置、日志和数据分别挂载到宿主机的/opt/gitlab 对应子目录。
第四步:启动服务
在 docker-compose.yml 所在目录执行启动命令。首次启动可能需要几分钟时间初始化数据库和缓存:
docker-compose up -d
怎么验证是否生效
执行docker ps命令,确认 gitlab 容器状态为 Up。在浏览器输入 Droplet 的公网 IP 或绑定的域名,应能看到 GitLab 登录页面。首次访问需等待约 5 分钟,若页面无法加载,检查 DigitalOcean 云防火墙是否放行了 80 和 443 端口。
常见坑
SSH 端口冲突:GitLab 容器默认占用 22 端口,会与宿主机 SSH 冲突。必须在 docker-compose.yml 中将容器 22 端口映射为宿主机其他端口(如 2222),克隆代码时需指定端口。
内存不足启动失败:GitLab 对内存敏感,若 Droplet 内存小于 4GB,服务可能反复重启。公开资料中没有看到可靠的量化数据表明更低配置可稳定运行,建议严格遵循 8GB 推荐值。
防火墙设置:DigitalOcean 默认可能拦截外部流量。需在控制台 Networking 页面配置 Firewall,允许 TCP 80、443 及自定义 SSH 端口入站。
常见问题
首次登录密码在哪里?
首次启动完成后,初始 root 密码存储在容器内的文件中。执行docker exec gitlab cat /etc/gitlab/initial_root_password即可查看,建议登录后立即修改。
如何备份 GitLab 数据?
数据已通过 volumes 挂载到宿主机/opt/gitlab 目录。直接备份该目录即可,或使用 GitLab 内置备份命令将数据打包存储到挂载卷中。
SSH 克隆代码命令怎么写?
由于 SSH 端口映射为 2222,克隆命令需指定端口:git clone -o ssh://git@your-domain.com:2222/group/project.git。