一. 安装前准备
在正式安装 GitLab 之前,需要先安装一些依赖软件并配置邮件服务。
安装依赖:打开终端,执行以下命令安装必要的依赖包。
sudo yum install -ycurl policycoreutils-python openssh-server
curl:用于传输数据。
policycoreutils-python:用于管理 SELinux 策略。
openssh-server:用于通过 SSH 协议访问 Git 仓库。
2.配置 Postfix (用于邮件通知):Postfix 是一款邮件传输代理,GitLab 通过它来发送邮件通知(如注册确认、评论提醒等)。
# 安装 Postfix
sudo yum install -y postfix
# 设置 Postfix 开机自启并立即启动
sudo systemctl enable postfix
sudo systemctl start postfix
二. 安装 GitLab (RPM方式)
安装 GitLab 主要有两种 RPM 方式:通过官方仓库在线安装(推荐)和直接使用 RPM 包手动安装。
方式一:通过官方仓库安装 (在线,最常用)
这是最标准的安装方式,系统会自动处理依赖关系和后续的更新。
添加 GitLab 官方仓库:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudobash
安装 GitLab CE 包:安装时可以同时配置外部访问 URL(即你之后在浏览器中访问 GitLab 的地址)
# 请将 http://your_server_ip 替换为你服务器的实际 IP 地址或域名
sudoEXTERNAL_URL="http://your_server_ip" yum install -y gitlab-ce
如果不想在安装时指定,也可以安装完成后在配置文件中修改
方式二:直接使用 RPM 包安装 (离线或指定版本)
如果你需要在没有网络的环境下安装,或者需要安装特定版本,可以手动下载 RPM 包进行安装。
下载 RPM 包:从国内镜像源(如清华大学镜像站)或官方仓库下载对应系统版本的 GitLab RPM 包。例如
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.0.2-ce.0.el7.x86_64.rpm
2.执行本地安装:
# 使用 rpm 命令安装,-i 代表安装,-v 代表显示详细信息,-h 代表显示进度
sudo rpm -ivh gitlab-ce-15.0.2-ce.0.el7.x86_64.rpm
如果遇到依赖缺失,可以使用 yum 命令自动解决并补装:
sudo yum install -y gitlab-ce-15.0.2-ce.0.el7.x86_64.rpm
三. 基础配置与启动
无论哪种方式安装,完成后的基础配置步骤是一致的。
修改配置文件 (可选):如果安装时没有设置 EXTERNAL_URL,或者需要修改其他配置(如端口、时区等),可以编辑主配置文件。
sudovim /etc/gitlab/gitlab.rb
找到 external_url 这一行,将其修改为你的服务器地址和端口
external_url 'http://192.168.1.100:8080'
应用配置并启动:这是最关键的一步。reconfigure 命令会根据 gitlab.rb 中的配置来生成所有子服务的配置文件并启动它们。
# 这个过程需要几分钟,请耐心等待
sudo gitlab-ctl reconfigure
四. 首次登录与常用管理命令
首次登录
在浏览器中输入你配置的 external_url (例如 http://192.168.1.100:8080)。
首次访问,你需要设置 root 用户的密码。或者,你也可以查看系统自动生成的初始密码(24小时内有效)
sudocat /etc/gitlab/initial_root_password
3.使用用户名 root 和刚才设置的密码(或初始密码)登录。
GitLab 常用管理命令
日常运维中,最常用的就是 gitlab-ctl 命令集
| 命令 | 用途 |
|---|
sudo gitlab-ctl reconfigure | 最常用。修改配置文件 /etc/gitlab/gitlab.rb 后必须执行,用于重新应用配置。 |
sudo gitlab-ctl start | 启动所有 GitLab 服务。 |
sudo gitlab-ctl stop | 停止所有 GitLab 服务。 |
sudo gitlab-ctl restart | 重启所有 GitLab 服务。 |
sudo gitlab-ctl status | 查看所有 GitLab 服务的运行状态。 |
sudo gitlab-ctl tail | 实时查看所有 GitLab 服务的日志。也可指定服务名,如 sudo gitlab-ctl tail nginx。 |
五. 卸载 GitLab
如果不再需要 GitLab 或需要彻底重装,可以按以下步骤完全卸载
停止服务:
sudo gitlab-ctl stop
卸载软件包:
# 如果安装的是社区版 (CE)
sudo rpm -e gitlab-ce
# 如果安装的是企业版 (EE)
# sudo rpm -e gitlab-ee
删除残留文件:
删除 GitLab 创建的所有数据、配置和日志目录。
sudorm-rf /opt/gitlab
sudorm-rf /var/opt/gitlab
sudorm-rf /etc/gitlab
sudorm-rf /var/log/gitlab
六. 数据备份与恢复
6.1.数据备份
6.1.1 创建备份
执行以下命令即可创建一个完整的 GitLab 备份包(包含数据库、仓库、附件等)。
# GitLab 12.2 及以上版本
sudo gitlab-backup create
# 或者对于旧版本 GitLab
sudo gitlab-rake gitlab:backup:create
命令执行过程:
它会生成一个以时间戳命名的 .tar 文件。
默认存储在 /var/opt/gitlab/backups 目录下。
例如:1701234567_2023_11_29_15.0.2_gitlab_backup.tar
6.1.2 备份关键配置文件(非常重要!)
gitlab-backup 命令只备份数据,不会备份配置文件。在恢复时,配置文件是必需的。因此,你需要手动备份以下两个关键目录:
# 创建备份目录(如果不存在)
sudomkdir-p /root/gitlab-config-backup
# 备份配置文件和密钥
sudocp /etc/gitlab/gitlab.rb /root/gitlab-config-backup/
sudocp /etc/gitlab/gitlab-secrets.json /root/gitlab-config-backup/
# 可选:将密钥打包下载到安全的地方
特别提醒:gitlab-secrets.json 文件包含了数据库加密密钥和 2FA 密钥,如果丢失,恢复后用户将无法通过 2FA 登录。
6.1.3 自定义备份策略
如果你想修改备份的保留时间或存储位置,可以编辑 /etc/gitlab/gitlab.rb 配置文件
# 打开配置文件
sudovi /etc/gitlab/gitlab.rb
# 找到以下行并修改
# 1. 修改备份保留时间(单位:秒,604800 = 7天)
gitlab_rails['backup_keep_time'] =604800
# 2. 修改备份存储路径
gitlab_rails['backup_path'] ="/mnt/backups/gitlab"
# 保存文件后,重新配置生效
sudo gitlab-ctl reconfigure
6.1.4 自定义备份策略
使用 cron 任务实现每天自动备份。
# 编辑 root 用户的 crontab
sudo crontab -e
# 添加以下行,表示每天凌晨 2 点执行备份
02 * * * /usr/bin/gitlab-backup create
# 如果同时想备份配置文件,可以写一个脚本:
# 0 2 * * * /usr/bin/gitlab-backup create && cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/
6.2 数据恢复
恢复过程要求 GitLab 的版本与备份时的版本完全一致,并且配置相同。
1. 恢复前的准备
停止数据写入服务:避免在恢复过程中有新的数据进入。
# 停止与数据库相关的服务,但保持 web 服务可访问(显示维护页面)
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
确认备份文件存在:检查备份文件是否在正确的目录下。
# 检查备份文件
ls-la /var/opt/gitlab/backups/
确保备份文件的权限正确:
sudochowngit:git /var/opt/gitlab/backups/1701234567_2023_11_29_15.0.2_gitlab_backup.tar
2. 执行恢复命令
恢复时需要使用备份文件的时间戳部分作为参数。
# 语法格式
sudo gitlab-backup restore BACKUP=时间戳
# 实际例子(假设文件名为 1701234567_2023_11_29_15.0.2_gitlab_backup.tar)
sudo gitlab-backup restore BACKUP=1701234567_2023_11_29_15.0.2
# 对于旧版本
# sudo gitlab-rake gitlab:backup:restore BACKUP=1701234567_2023_11_29_15.0.2
执行过程:
系统会列出将要恢复的数据表。
提示 This task will now rebuild the authorized_keys file. 按 yes 继续。
最后提示 Put GitLab into an endless loop to restart? 按 yes 重启服务。
3. 恢复配置文件(如果必要)
如果你是在新机器上恢复,或者原配置文件丢失:
# 1. 停止服务
sudo gitlab-ctl stop
# 2. 恢复配置文件
sudocp /root/gitlab-config-backup/gitlab.rb /etc/gitlab/
sudocp /root/gitlab-config-backup/gitlab-secrets.json /etc/gitlab/
# 3. 重新配置并启动
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
4. 验证恢复结果
恢复完成后,进行基础验证:
# 检查服务状态
sudo gitlab-ctl status
# 检查数据库迁移(确保没有遗留问题)
sudo gitlab-rake db:migrate
# 清理过期的进程(可选)
sudo gitlab-rake cache:clear
最后,打开浏览器访问 GitLab,确认项目和用户数据是否完整。
七、常见问题与注意事项
版本必须一致:备份和恢复的 GitLab 版本必须相同(例如都是 15.0.2)。如果版本不同,恢复会报错或导致数据损坏。
备份空间:确保备份目录所在分区有足够的磁盘空间。GitLab 备份文件大小通常与 /var/opt/gitlab 目录大小相当。
恢复时长的预估:如果数据量很大(例如几十 GB),恢复过程可能需要 10-30 分钟,请耐心等待,不要中断进程。
恢复后权限问题:如果恢复后发现无法通过 SSH 访问仓库,可能需要重新生成 authorized_keys 文件:
sudo gitlab-rake gitlab:shell:setup
使用绝对路径:
在 cron 脚本中,建议使用命令的绝对路径来避免环境变量问题:
which gitlab-backup
# 通常输出 /usr/bin/gitlab-backup