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
安全加固
生产环境下,以下几点强烈建议配上:
- 启用 HTTPS,尤其是对外暴露的实例:
external_url 'https://your-gitlab-domain.com'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']
- 设置密码复杂度要求:
gitlab_rails['password_minimum_length'] = 12
-
定期备份:配置自动备份并将备份文件存储在异地
-
限制 SSH 访问:配置防火墙只允许特定 IP 访问 SSH 端口
常见问题排查
遇到问题不要慌,大多数情况都是资源不够或配置不对:
- 502 错误:十有八九是内存不够,GitLab 的组件没完全启动起来。先用
free -m看看内存,再用sudo gitlab-ctl status检查各组件状态 - 无法发送邮件:检查 SMTP 配置是否正确,可以用
sudo gitlab-rails console进去手动发一封测试邮件排查 - 性能问题:用
top或htop看资源占用,大概率是内存吃紧,参考上面的调优配置
写在最后
自建 GitLab 的过程并不复杂,真正的挑战在于后期的维护和调优。建议上线前做好监控和告警,定期检查备份是否可用(别等到要恢复的时候才发现备份是坏的),升级前仔细看 changelog。把这些习惯养成了,GitLab 就能稳稳地为团队服务。