返回

Linux 服务器部署 GitLab 完整指南

本文记录了在 Linux 服务器上从零部署 GitLab 的完整过程,涵盖安装配置、性能调优、安全加固和日常维护。以 CentOS/RHEL 为例,其他发行版可参考调整。

graph TD
    A[系统准备] --> B[安装依赖]
    B --> C[配置 GitLab]
    C --> D[初始化启动]
    D --> E[日常运维]
    E --> F[备份与恢复]
    E --> G[性能调优]
    E --> H[安全加固]

自建 GitLab,值得吗?

团队规模一大,代码托管就成了绕不开的话题。用 GitHub 或 Gitee?私有项目要收费,而且代码放在别人服务器上,有些公司的安全策略不允许。这时候自建一套 GitLab 就成了最务实的选择——代码仓库、CI/CD、项目管理全都有,一个平台搞定。

GitLab CE vs EE 怎么选

很多人一上来就纠结版本,其实对大多数团队来说答案很明确:

维度CE(社区版)EE(企业版)
价格完全免费免费层可用,高级功能付费
核心功能Git 仓库、CI/CD、Issue、Wiki包含 CE 全部功能
高级功能高级 CI/CD、审计日志、LDAP 组同步
安全功能基础SAST/DAST 代码扫描、依赖扫描
技术支持社区支持官方技术支持
适合场景中小团队、个人项目大型企业、合规要求高的场景

[!TIP] 实际上 EE 版本也可以免费使用(不激活 License 就等同于 CE),好处是以后想升级到付费功能时无需重新安装。但如果你确定不需要企业功能,CE 更轻量省心。

下面记录一下在 CentOS 上从零部署 GitLab CE 的完整过程,包括安装后的调优和日常维护,都是实际踩过坑总结出来的。

先确认机器配置够不够

GitLab 是个资源大户,别在 1 核 2G 的小机器上折腾,启动都费劲1

配置项最低要求推荐配置说明
操作系统CentOS 7 / 8CentOS 8 StreamCentOS 7 已 EOL,建议尽快迁移
内存4GB8GB+4G 能跑但会卡,10 人以上团队至少 8G
CPU2 核4 核+CI/CD 用得多的话 CPU 很关键
磁盘10GB50GB+ SSD仓库数据增长很快,SSD 对性能有明显提升
网络稳定连接内网千兆大仓库 clone/push 对带宽有要求

[!WARNING] 4G 内存能跑起来,但用着会卡。如果团队超过 10 人同时使用,8G 是起步线。内存不够是 GitLab 502 错误的头号原因。

安装步骤

1. 更新系统,装好依赖

老规矩,装软件之前先把系统包更新到最新,避免一些莫名其妙的兼容性问题:

sudo yum update -y
sudo yum install -y curl policycoreutils-python openssh-server perl

2. 配置网络服务

SSH 和防火墙是基础设施,GitLab 需要通过 HTTP/HTTPS 提供 Web 访问,通过 SSH 提供 Git 操作:

# 启用 SSH 服务
sudo systemctl enable sshd
sudo systemctl start sshd

# 开放防火墙端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

3. 配置邮件服务

GitLab 的很多功能依赖邮件通知——合并请求提醒、CI 构建结果、密码重置等等。先把 Postfix 装上,后面再配 SMTP

sudo yum install -y postfix
sudo systemctl enable postfix
sudo systemctl start postfix

4. 安装 GitLab

准备工作做完,终于到正题了。添加官方仓库源,然后一条命令安装:

# 添加 GitLab 仓库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

# 安装(替换为你的实际域名或 IP)
sudo EXTERNAL_URL="http://your-gitlab-domain.com" yum install -y gitlab-ce

[!NOTE] 将 your-gitlab-domain.com 替换为你的实际域名或服务器 IP 地址。如果只在内网使用,直接填内网 IP 即可。安装过程会比较久——它在后台装 PostgreSQL、Redis、Nginx 等一堆组件,耐心等就好。

5. 个性化配置

装完之后,大部分默认配置其实就能用。但有几个地方建议改一下,打开配置文件:

sudo vim /etc/gitlab/gitlab.rb

使用 i 进入编辑模式,修改完成后按 Esc 退出编辑模式,然后输入 :wq 保存退出。

核心配置项一览:

配置项说明示例值
external_url外部访问地址'http://gitlab.example.com'
gitlab_rails['smtp_enable']启用 SMTP 邮件true
gitlab_rails['smtp_address']SMTP 服务器地址'smtp.server.com'
gitlab_rails['smtp_port']SMTP 端口587
gitlab_rails['smtp_user_name']SMTP 用户名'user@example.com'
gitlab_rails['smtp_password']SMTP 密码'password'
gitlab_rails['smtp_authentication']认证方式'login'
gitlab_rails['smtp_enable_starttls_auto']启用 TLStrue
gitlab_rails['gitlab_email_from']发件人地址'gitlab@example.com'
gitlab_rails['backup_keep_time']备份保留时间(秒)604800(一周)

改完之后让配置生效:

sudo gitlab-ctl reconfigure

这个命令会重新生成所有组件的配置文件并重启相关服务,第一次执行会比较慢。

6. 首次登录

打开浏览器,访问你设置的 URL。首次访问会要求你设置管理员密码,默认用户名是 root。设好密码之后就可以开始创建项目了。

[!TIP] GitLab 14.0+ 版本会把初始 root 密码写入 /etc/gitlab/initial_root_password 文件,24 小时后自动删除。如果你用的是新版本,先去这个文件里看初始密码,登录后立即修改。

日常维护

GitLab 跑起来之后,日常维护也不能落下。以下是最常用的操作命令。

基本管理命令

sudo gitlab-ctl status      # 查看各组件状态
sudo gitlab-ctl start       # 启动所有组件
sudo gitlab-ctl stop        # 停止所有组件
sudo gitlab-ctl restart     # 重启所有组件
sudo gitlab-ctl reconfigure # 重新加载配置
sudo gitlab-ctl tail        # 查看实时日志

备份与恢复

数据无价,备份这件事怎么强调都不过分。建议至少配一个每日自动备份,再搞一个异地备份。

手动备份与恢复:

# 创建备份
sudo gitlab-rake gitlab:backup:create

# 恢复备份(先停相关服务)
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=1612345678_2021_02_03
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true

[!NOTE] 备份文件默认保存在 /var/opt/gitlab/backups 目录下。恢复时 BACKUP 参数填文件名中去掉 _gitlab_backup.tar 后缀的部分。

自动备份脚本:

建议配一个 cron 定时任务,每天凌晨自动备份并清理过期文件:

#!/bin/bash
# GitLab 自动备份脚本
# 建议通过 crontab -e 添加:0 2 * * * /opt/scripts/gitlab-backup-cron.sh

BACKUP_LOG="/var/log/gitlab-backup.log"

echo "=== 开始备份: $(date) ===" >> "$BACKUP_LOG"
sudo gitlab-rake gitlab:backup:create >> "$BACKUP_LOG" 2>&1

if [ $? -eq 0 ]; then
  echo "备份成功" >> "$BACKUP_LOG"
else
  echo "备份失败!请检查" >> "$BACKUP_LOG"
  # 可在此处添加邮件/钉钉告警
fi

echo "=== 备份结束: $(date) ===" >> "$BACKUP_LOG"

[!IMPORTANT] gitlab.rbgitlab-secrets.json 这两个文件不包含在 gitlab-rake 备份中,需要单独备份。丢了 gitlab-secrets.json 的话,双因子认证和加密的 CI 变量都会失效。

性能调优

如果服务器资源不太富裕,下面这几项配置能显著降低内存占用。实测 4G 内存的机器调完之后流畅很多:

# 减少 Puma 工作进程数(默认按 CPU 核数,小机器改为 2)
puma['worker_processes'] = 2

# 减少 Sidekiq 并发数(默认 25,小机器改为 5)
sidekiq['concurrency'] = 5

# 减少 PostgreSQL 共享缓冲区
postgresql['shared_buffers'] = "256MB"

# 禁用 Prometheus 监控(省约 200MB 内存)
prometheus_monitoring['enable'] = false
调优项默认值推荐值(4G 内存)节省内存
puma['worker_processes']CPU 核数2约 400MB
sidekiq['concurrency']255约 200MB
prometheus_monitoringtruefalse约 200MB
postgresql['shared_buffers']自动256MB视情况而定

升级 GitLab

升级之前务必先备份,这是铁律。另外注意 GitLab 不支持跨大版本升级,需要按照官方升级路径一步步来:

# 1. 先备份!
sudo gitlab-rake gitlab:backup:create

# 2. 更新包信息并升级
sudo yum update
sudo yum install gitlab-ce

# 3. 应用配置
sudo gitlab-ctl reconfigure

[!WARNING] 跨大版本升级(比如从 15.x 直接跳到 17.x)大概率会翻车。务必按官方文档的升级路径走,中间版本不能跳。每升一个版本都要确认服务正常后再继续。

安全加固

生产环境下,以下几点强烈建议配上。

HTTPS 配置

对外暴露的实例必须上 HTTPS,Let’s Encrypt 提供免费 SSL 证书,GitLab 内置支持:

external_url 'https://your-gitlab-domain.com'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']

安全加固检查清单

  • 启用 HTTPS — 配置 Let’s Encrypt 或自有证书 — 必须
  • 修改默认 root 密码 — 首次登录后立即修改 — 必须
  • 密码复杂度 — gitlab_rails['password_minimum_length'] = 12 — 高
  • 限制注册 — 关闭公开注册或限制邮箱域名 — 高
  • SSH 访问限制 — 防火墙仅允许特定 IP 段访问 22 端口 — 高
  • 双因子认证 — 管理后台强制启用 2FA — 中
  • 定期备份 — 每日自动备份 + 异地存储 — 必须
  • 备份恢复演练 — 每月至少测试一次恢复流程 — 中
  • 及时升级 — 关注安全公告,及时打补丁 — 高
  • 限制 API 速率 — 管理后台 → 设置 → 网络 → 速率限制 — 中

常见问题排查

遇到问题不要慌,大多数情况都是资源不够或配置不对。

[!WARNING] 502 错误 是 GitLab 最常见的问题,排查思路:

  1. free -m 查内存——十有八九是内存不够,组件没完全启动
  2. sudo gitlab-ctl status 看哪个组件挂了
  3. sudo gitlab-ctl tail puma 看 Puma 日志
  4. 如果是刚装完或刚重启,等 2-3 分钟再试(GitLab 启动慢是正常的)
  5. 实在内存不够就按上面的调优配置减负

[!NOTE] 无法发送邮件:检查 SMTP 配置是否正确,可以用 sudo gitlab-rails console 进去手动发一封测试邮件排查:

Notify.test_email('test@example.com', '测试', '测试邮件内容').deliver_now

[!NOTE] 性能问题:用 tophtop 看资源占用,大概率是内存吃紧。如果 Sidekiq 占用过高,降低并发数;如果 Puma 占用过高,减少 worker 数量。调完别忘了 sudo gitlab-ctl reconfigure

写在最后

自建 GitLab 的过程并不复杂,真正的挑战在于后期的维护和调优。建议上线前做好监控和告警,定期检查备份是否可用(别等到要恢复的时候才发现备份是坏的),升级前仔细看 changelog。把这些习惯养成了,GitLab 就能稳稳地为团队服务。更多配置细节可参考 GitLab 官方文档

Footnotes

  1. 根据 GitLab 官方文档,最低要求 4GB 内存才能正常运行所有组件,推荐 8GB 以上。详见 GitLab installation requirements