一、系统版本

二、添加仓库
curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
还有中方法:
# https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/el/8/config_file.repo
拷贝上面文件内容到gitlab服务器新建git-ce.repo文件里。
# cat /etc/yum.repos.d/git-ce.repo
[gitlab_gitlab-ce]
name=gitlab_gitlab-ce
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/8/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packages.gitlab.com/gpgkey/gpg.key
https://packages.gitlab.com/gpgkey/gitlab/3D645A26AB9FBD22.pub.gpg
https://packages.gitlab.com/gpgkey/gitlab/CB947AD886C8E8FD.pub.gpg
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[gitlab_gitlab-ce-source]
name=gitlab_gitlab-ce-source
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packages.gitlab.com/gpgkey/gpg.key
https://packages.gitlab.com/gpgkey/gitlab/3D645A26AB9FBD22.pub.gpg
https://packages.gitlab.com/gpgkey/gitlab/CB947AD886C8E8FD.pub.gpg
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

三、安装及配置

如果在线下载慢,可以先下载,在上传服务器。最后使用下面命令部署:
yum localinstall gitlab-ce-19.0.1-ce.0.el8.x86_64.rpm

使修改后的配置文件生效并重启:
# gitlab-ctl reconfigure
启动命令:
gitlab-ctl start
防火墙配置:
# firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
查看密码:
cat /etc/gitlab/initial_root_password
登录:

四、登录后的配置
登录后的提示,按实际需求修改:

禁止新用户注册:

配置当前账户语言:

修改时区

修改密码

全局禁止ci/cd:

特定项目开启或者关闭CI/CD:

五、备份
## cat gitlab_full_backup.sh
#!/bin/bash
set -euo pipefail
# ================== 变量定义 ==================
BACKUP_DIR="/var/opt/gitlab/backups" # GitLab 默认数据备份目录
CONFIG_BACKUP_DIR="/data/backup/gitlab_config" # 配置文件独立备份目录
KEEP_DAYS=7 # 保留天数
DATE=$(date +%Y%m%d_%H%M%S) # 时间戳
LOG_FILE="${BACKUP_DIR}/backup_${DATE}.log" # 日志文件
# 确保目录存在
mkdir -p "$CONFIG_BACKUP_DIR" "$BACKUP_DIR"
echo "[$(date)] ========== GitLab 完整备份开始 ==========" | tee -a "$LOG_FILE"
# ================== 1. 数据备份 (代码、账户、权限、CI产物) ==================
echo "[$(date)] 正在执行数据备份..." | tee -a "$LOG_FILE"
# CRON=1: 静默模式,减少输出;SKIP=db: 如需跳过数据库可添加,此处保留完整备份
/opt/gitlab/bin/gitlab-backup create CRON=1 >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] ✅ 数据备份成功" | tee -a "$LOG_FILE"
else
echo "[$(date)] ❌ 数据备份失败,请检查日志: $LOG_FILE" | tee -a "$LOG_FILE"
exit 1
fi
# ================== 2. 配置文件备份 (gitlab.rb + secrets) ==================
echo "[$(date)] 正在备份配置文件..." | tee -a "$LOG_FILE"
CONFIG_TAR="${CONFIG_BACKUP_DIR}/gitlab_config_${DATE}.tar.gz"
tar -czf "$CONFIG_TAR" \
/etc/gitlab/gitlab.rb \
/etc/gitlab/gitlab-secrets.json \
>> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] ✅ 配置文件已打包至: $CONFIG_TAR" | tee -a "$LOG_FILE"
else
echo "[$(date)] ❌ 配置文件备份失败" | tee -a "$LOG_FILE"
fi
# ================== 3. 清理超过7天的旧备份 ==================
echo "[$(date)] 正在清理 ${KEEP_DAYS} 天前的旧备份..." | tee -a "$LOG_FILE"
# 清理数据备份
find "$BACKUP_DIR" -name "*_gitlab_backup.tar" -type f -mtime +${KEEP_DAYS} -delete
# 清理配置备份
find "$CONFIG_BACKUP_DIR" -name "gitlab_config_*.tar.gz" -type f -mtime +${KEEP_DAYS} -delete
# 清理旧日志
find "$BACKUP_DIR" -name "backup_*.log" -type f -mtime +${KEEP_DAYS} -delete
echo "[$(date)] ✅ 旧备份清理完成" | tee -a "$LOG_FILE"
echo "[$(date)] ========== 所有备份任务完成 ==========" | tee -a "$LOG_FILE"
sh -x gitlab_full_backup.sh
添加任务计划:
crontab -l
0 2 * * * /opt/scripts/gitlab_full_backup.sh
六、关键注意事项
| 事项 | 说明 |
|---|---|
| 版本一致性 | 恢复时目标 GitLab 版本必须与备份时完全一致(包括小版本号),否则恢复会失败 |
| secrets.json 重要性 | gitlab-secrets.json 包含数据库加密密钥、2FA 密钥等,丢失则备份数据无法解密恢复 |
| 异地容灾 | 当前脚本仅做本地备份,强烈建议在脚本末尾追加 rsync/scp 将备份同步到远程 NAS 或对象存储 |
| 备份期间性能 | 备份过程会占用大量磁盘 I/O,务必安排在业务低峰期(如凌晨)执行 |
| 定期恢复演练 | 建议每月至少进行一次恢复测试,验证备份文件的完整性和可用性 |
| Omnibus 路径 | 脚本中的 /opt/gitlab/bin/gitlab-backup 适用于 Omnibus 安装方式;若为源码安装,请使用 bundle exec rake gitlab:backup:create |