cd ..

CentOS 上部署 GitLab

本文记录了在 CentOS 服务器上从零部署 GitLab 的完整过程,涵盖安装配置、性能调优、安全加固和日常维护,都是实际操作中总结出来的经验。

自建 GitLab,值得吗?

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

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

先确认机器配置够不够

GitLab 是个资源大户,别在 1 核 2G 的小机器上折腾,启动都费劲。最低配置如下:

  • CentOS 7 或 CentOS 8 系统
  • 最低 4GB RAM(推荐 8GB 或更高)
  • 至少 2 核 CPU
  • 至少 10GB 可用磁盘空间(推荐 SSD)
  • 稳定的网络连接

经验之谈:4G 内存能跑起来,但用着会卡。如果团队超过 10 人同时使用,8G 是起步线。

安装步骤

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:

# 安装 Postfix
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

# 安装 GitLab
sudo EXTERNAL_URL="http://your-gitlab-domain.com" yum install -y gitlab-ce

注意:http://gitlab.example.com 替换为您的实际域名或服务器 IP 地址。如果只在内部网络使用,可以使用内部 IP 地址。

安装过程会比较久,它在后台做了很多事情:装 PostgreSQL、Redis、Nginx 等一堆组件。耐心等就好。

5. 个性化配置

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

sudo vim /etc/gitlab/gitlab.rb

常见的配置项:

# 基础 URL 配置
external_url 'http://your-gitlab-domain.com'

# SMTP 邮件配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "user@example.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'

# 备份配置
gitlab_rails['backup_keep_time'] = 604800  # 保留备份一周(秒)

改完之后别忘了让配置生效:

sudo gitlab-ctl reconfigure

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

6. 首次登录

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

日常维护

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

基本管理命令

# 查看 GitLab 状态
sudo gitlab-ctl status

# 启动所有 GitLab 组件
sudo gitlab-ctl start

# 停止所有 GitLab 组件
sudo gitlab-ctl stop

# 重启所有 GitLab 组件
sudo gitlab-ctl restart

# 重新加载配置
sudo gitlab-ctl reconfigure

# 查看日志
sudo gitlab-ctl tail

备份与恢复

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

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

# 恢复备份
sudo gitlab-ctl stop unicorn
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

备注: 备份文件默认保存在 /var/opt/gitlab/backups 目录下

性能调优

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

# 减少 Puma 工作进程数
puma['worker_processes'] = 2

# 减少 Sidekiq 并发数
sidekiq['concurrency'] = 5

# 减少 PostgreSQL 内存使用
postgresql['shared_buffers'] = "256MB"

# 禁用 Prometheus 监控
prometheus_monitoring['enable'] = false

升级 GitLab

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

# 备份当前数据
sudo gitlab-rake gitlab:backup:create

# 更新软件包信息
sudo yum update

# 升级 GitLab
sudo yum install gitlab-ce

# 应用配置
sudo gitlab-ctl reconfigure

安全加固

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

  1. 启用 HTTPS,尤其是对外暴露的实例:
external_url 'https://your-gitlab-domain.com'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']
  1. 设置密码复杂度要求:
gitlab_rails['password_minimum_length'] = 12
  1. 定期备份:配置自动备份并将备份文件存储在异地

  2. 限制 SSH 访问:配置防火墙只允许特定 IP 访问 SSH 端口

常见问题排查

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

  • 502 错误:十有八九是内存不够,GitLab 的组件没完全启动起来。先用 free -m 看看内存,再用 sudo gitlab-ctl status 检查各组件状态
  • 无法发送邮件:检查 SMTP 配置是否正确,可以用 sudo gitlab-rails console 进去手动发一封测试邮件排查
  • 性能问题:用 tophtop 看资源占用,大概率是内存吃紧,参考上面的调优配置

写在最后

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