怎么在阿里云 ECS 上搭建 GitLab 私有仓库运维指南

文章导读
在阿里云 ECS 上搭建 GitLab 最稳妥的方式是使用官方提供的 Omnibus 安装包,配合安全组放行必要端口,适合中小团队私有代码托管。
📋 目录
  1. 前置准备与系统配置
  2. 安装 GitLab CE
  3. 配置 HTTPS 与外部访问
  4. 验证服务可用性
  5. 常见风险与排查
A A

在阿里云 ECS 上搭建 GitLab 最稳妥的方式是使用官方提供的 Omnibus 安装包,配合安全组放行必要端口,适合中小团队私有代码托管。

先说结论:直接采用 Omnibus 包部署是最省心的方案,但必须重视实例规格、Swap 配置及 HTTPS 安全加固。

  • 适合:需要完全掌控代码数据、有独立运维能力的团队或个人
  • 先准备:至少 4GB 内存的 ECS 实例(2GB 必须配置 Swap),提前规划好域名并完成 DNS 解析
  • 验收:通过 HTTPS 访问登录页,初始密码登录成功,并能完成一次 git clone 操作

前置准备与系统配置

1. 选择操作系统
推荐 Ubuntu 20.04/22.04 或 CentOS 7/8(注意 CentOS 7 已停服,建议选用 AlmaLinux/Rocky Linux 替代)。下文将分别提供对应的安装命令。

2. 配置 Swap 分区(关键)
GitLab 组件较多,2GB 内存实例在安装或运行时极易触发 OOM(内存溢出)。即使拥有 4GB 内存,也建议配置 2GB 以上 Swap 作为缓冲。

# 创建 2G Swap 文件
sudo fallocate -l 2G /swapfile
# 若 fallocate 不可用,改用 dd 命令:
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# 设置权限并格式化
sudo chmod 600 /swapfile
sudo mkswap /swapfile

# 启用 Swap
sudo swapon /swapfile

# 验证是否生效
sudo free -h

# 设置开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3. 配置安全组
登录阿里云控制台,找到实例对应的安全组。入方向放行 TCP 80(HTTP 验证用)、443(HTTPS 业务用)和 22(SSH 管理)。若不开放 80/443 端口,GitLab 内置 Nginx 无法接收请求。

安装 GitLab CE

根据操作系统选择对应的安装源和命令。注意:安装阶段先不使用环境变量配置 URL,待安装完成后统一在配置文件中修改。

怎么在阿里云 ECS 上搭建 GitLab 私有仓库运维指南

Ubuntu/Debian 系统

# 安装依赖并添加源
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates postfix
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

# 安装 GitLab CE(暂不配置外部 URL)
sudo apt-get install -y gitlab-ce

CentOS/RHEL 系统

# 安装依赖并添加源
sudo yum install -y curl policycoreutils openssh-server openssh-clients postfix
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

# 安装 GitLab CE
sudo yum install -y gitlab-ce

配置 HTTPS 与外部访问

安装完成后,默认配置为 HTTP 且监听 localhost。需编辑配置文件启用 HTTPS 并设置外部访问地址。

1. 编辑配置文件
执行 sudo vim /etc/gitlab/gitlab.rb,找到并修改以下配置项:

# 设置外部访问地址(必须使用域名,且 DNS 已解析到本机公网 IP)
external_url 'https://your-domain.com'

# 启用 Let's Encrypt 自动证书
letsencrypt['enable'] = true
letsencrypt['contact_email'] = 'your-email@example.com'

# 可选:禁用 HTTP 自动跳转前的测试,确认 HTTPS 正常后再开启
# nginx['redirect_http_to_https'] = true

2. 重新配置生效
保存文件后,执行以下命令应用配置。此过程会申请证书并重启服务,耗时较长:

怎么在阿里云 ECS 上搭建 GitLab 私有仓库运维指南
sudo gitlab-ctl reconfigure

注意:启用 Let's Encrypt 前,务必确保域名已解析到当前 ECS 公网 IP,且安全组 80 端口开放,否则证书申请会失败。

验证服务可用性

1. 网页登录
在浏览器输入 https://your-domain.com。首次访问可能因自签名证书或 Let's Encrypt 刚生效需要刷新。使用用户名 root 登录。

2. 获取初始密码
若未修改过密码,初始 root 密码保存在以下文件中:

sudo cat /etc/gitlab/initial_root_password

3. 本地克隆测试
登录后创建一个新项目,复制 HTTP/HTTPS 克隆地址。在本地终端执行:

怎么在阿里云 ECS 上搭建 GitLab 私有仓库运维指南
git clone https://your-domain.com/namespace/project.git

若能成功拉取代码,说明服务正常。

常见风险与排查

1. 内存不足导致启动失败
现象:gitlab-ctl reconfigure 过程中断或服务反复重启。
排查:执行 free -h 查看内存。若可用内存极低,检查 Swap 是否生效。建议生产环境至少 4GB 内存 + 2GB Swap。

2. 证书申请失败
现象:reconfigure 卡在 letsencrypt 步骤。
排查:检查域名 DNS 解析是否生效(ping your-domain.com),检查安全组 80 端口是否开放。若多次失败,可暂时关闭 letsencrypt['enable'],手动配置 Nginx 证书。

3. 邮件服务不可用
默认使用本地 Postfix 发送邮件,云厂商通常屏蔽 25 端口,导致密码重置邮件发不出去。
建议:生产环境配置 SMTP(如阿里云邮件推送)或在 gitlab.rb 中指定外部 SMTP 服务器。

4. 备份策略缺失
GitLab 数据至关重要,不要只依赖 ECS 快照。
建议:配置 gitlab-backup 定时任务,将备份文件上传到 OSS 或其他异地存储。命令示例:sudo gitlab-backup create