温馨提示×

linux gitlab如何维护

小樊
36
2026-07-01 08:44:10
栏目: 智能运维

针对 Linux 环境下 GitLab 的维护,主要涵盖系统更新、数据备份、日志清理、服务监控以及故障排查等方面。

以下是一份详细的维护指南,适用于 Omnibus 包安装方式(最常见的安装方式)。


1. 基础运维命令

GitLab 提供了一个统一的命令行工具 gitlab-ctl 来管理服务。

  • 查看服务状态(检查是否有服务挂掉):
    sudo gitlab-ctl status
    
  • 重启所有服务
    sudo gitlab-ctl restart
    
  • 重启单个服务(例如 unicorn 或 sidekiq,通常用于排查问题):
    sudo gitlab-ctl restart unicorn
    sudo gitlab-ctl restart sidekiq
    
  • 停止/启动服务
    sudo gitlab-ctl stop
    sudo gitlab-ctl start
    
  • 重新加载配置(修改 /etc/gitlab/gitlab.rb 后必须执行):
    sudo gitlab-ctl reconfigure
    

2. 备份与恢复 (最重要)

数据无价,定期备份是第一要务。

创建备份

GitLab 自带的备份命令会将数据打包成一个 .tar 文件。

# 执行备份(默认存放在 /var/opt/gitlab/backups/)
sudo gitlab-backup create

注意:从 GitLab 12.2 起,命令由 gitlab-rake gitlab:backup:create 改为 gitlab-backup create

修改备份路径(可选)

编辑 /etc/gitlab/gitlab.rb

gitlab_rails['backup_path'] = "/mnt/backups"

然后执行 sudo gitlab-ctl reconfigure

定时备份(Crontab)

建议配置定时任务,例如每天凌晨2点备份:

sudo crontab -e
# 加入以下行
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

注:CRON=1 参数会抑制备份过程中的交互式输出,防止 Cron 发送无关邮件。

恢复备份

恢复是一个高风险操作,会覆盖现有数据。

  1. 停止连接数据的服务:
    sudo gitlab-ctl stop puma
    sudo gitlab-ctl stop sidekiq
    
  2. 恢复数据(假设备份文件名为 11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar):
    sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
    
  3. 重启服务:
    sudo gitlab-ctl restart
    

3. 日志与磁盘空间管理

GitLab 的日志非常多,容易占满磁盘。

查看实时日志

# 查看所有日志
sudo gitlab-ctl tail

# 查看特定服务日志(如 nginx)
sudo gitlab-ctl tail nginx
sudo gitlab-ctl tail gitlab-rails

清理日志(Logrotate)

GitLab 自带了 logrotate 配置,通常会自动轮转。如果需要手动触发清理:

sudo gitlab-ctl logrotate

为了防止日志无限增长,建议在 /etc/gitlab/gitlab.rb 中配置保留策略:

logging['logrotate_frequency'] = "daily"
logging['logrotate_rotate'] = 30 # 保留30天
logging['logrotate_size'] = "200M"

清理 Docker/Registry 镜像(如果不使用需关闭)

如果开启了 GitLab Container Registry,旧的镜像会占用大量空间。需要在项目中手动清理或使用 API 清理。


4. 版本升级

GitLab 升级路径非常严格,不能跨大版本跳跃(例如不能直接从 12.x 升级到 14.x)。

  1. 备份:升级前务必先备份。
  2. 查阅升级路径:访问 GitLab Upgrade Path 工具,确认你需要经历的版本顺序(例如:13.12.x -> 14.0.x -> 14.3.x -> 15.0.x)。
  3. 执行升级
    # CentOS/RHEL
    sudo yum update gitlab-ee  # 或者 gitlab-ce
    
    # Ubuntu/Debian
    sudo apt update
    sudo apt upgrade gitlab-ee
    

5. 数据库与运维工具

如果你需要直接操作 GitLab 的数据库(PostgreSQL)或执行 Rails 命令进行高级维护。

进入 PostgreSQL 控制台

sudo gitlab-psql -d gitlabhq_production

注意:一般情况下不建议直接修改数据库,除非你非常清楚在做什么。

检查 GitLab 健康状态

sudo gitlab-rake gitlab:check SANITIZE=true

清理 Redis 缓存(解决诡异的前端问题)

sudo gitlab-rake cache:clear

6. 安全与配置优化

配置 HTTPS (SSL)

修改 /etc/gitlab/gitlab.rb

external_url 'https://gitlab.yourdomain.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"

然后执行 sudo gitlab-ctl reconfigure

修改仓库存储路径

如果系统盘空间不足,可以将仓库迁移到大磁盘。

git_data_dirs({
  "default" => { "path" => "/data/gitlab/git-data" }
})

7. 常见故障排查清单

  1. 502 Whoops, GitLab is taking too much time to respond

    • 通常是内存不足导致 Puma/Unicorn 重启。
    • 检查内存:free -h
    • 查看日志:sudo gitlab-ctl tail puma
  2. 磁盘空间满

    • 检查:df -h
    • 清理 docker/registry 或旧的备份文件。
  3. GitLab 服务无法启动

    • 检查配置文件语法:sudo gitlab-rake gitlab:env:info
    • 检查端口占用:netstat -tulnp | grep 80
  4. 忘记 root 密码

    sudo gitlab-rails console
    u = User.where(id: 1).first
    u.password = 'new_password'
    u.password_confirmation = 'new_password'
    u.save!
    

总结维护建议

项目 频率 命令/操作
检查服务状态 每天/监控报警 gitlab-ctl status
检查磁盘空间 每周 df -h
备份 每天 gitlab-backup create
查看日志 按需 gitlab-ctl tail
更新版本 每季度/安全更新 按官方路径升级
清理旧备份 每月 手动删除 /var/opt/gitlab/backups/ 下的旧文件

0