GitLab 基础介绍

GitLab 是一个建立在 Git (分布式版本控制系统)上的平台,提供了 Git 的核心功能,还提供了web界面来对项目进行管理、权限控制等。

GitLab 常规版本:

  • GitLab-CE(Community Edition):社区版,开源且免费。提供了 GitLab 的核心功能
  • GitLab-EE(Enterprise Edition):企业版,需要付费。在社区版的基础上增加了高级功能
  • GitLab-JH:极狐版,针对中国市场进行本地化定制的版本,优化了网络访问和用户体验

GitLab 官网地址

GitLab 安装方式:

GitLab详细的安装流程可以参考官方文档:https://about.gitlab.com/install/

  • 源码编译安装:通过编译GitLab源码的方式来进行安装,一般不用这种方式,因为还需要自己去解决各个组件间的依赖问题等。
  • Omnibus 安装:推荐方式,这是官方为了简化部署的流程和难度,将GitLab实例所必需的组件和依赖整合在一起,一键安装即可。

GitLab 硬件环境:

生产环境下部署GitLab时,为了让服务可靠运行,一般推荐以下硬件配置:

  • CPU:8核心以上
  • 内存:16GB以上(关闭swapp分区)
  • 存储:两块4T的企业级SSD做RAID 1

Omnibus 包下载:

GitLab 官方是按照不同操作系统的包管理格式,将 Omnibus GitLab 打包成相应的二进制安装包。如Ubuntu / Debian 系列提供的Omnibus 安装包格式就是 .deb 格式。

Omnibus GitLab 安装后的常见路径:

目录路径 用途说明
/etc/gitlab/ 配置文件目录(如 gitlab.rbgitlab-secrets.json
/var/opt/gitlab/ 数据文件目录,包括 PostgreSQL、Redis、仓库、GitLab组件数据等
/var/log/gitlab/ 日志目录,包含各组件日志(如 NGINX、PostgreSQL、Sidekiq、GitLab自身)
/opt/gitlab/ 程序运行目录,包含 GitLab Omnibus 包的实际可执行程序
/var/opt/gitlab/backups/ 备份文件目录,执行 gitlab-rake gitlab:backup:create 后的 .tar 文件默认保存在此处

GitLab 管理命令

控制服务相关命令:

命令 作用说明
gitlab-ctl start 启动所有 GitLab 相关服务
gitlab-ctl stop 停止所有 GitLab 服务
gitlab-ctl restart 重启所有 GitLab 服务
gitlab-ctl status 查看各个服务运行状态
gitlab-ctl reconfigure 应用配置文件 /etc/gitlab/gitlab.rb 的变更
gitlab-ctl tail 实时查看所有服务日志
gitlab-ctl tail nginx/gitlab_error.log 查看特定组件的日志(如 Nginx)
gitlab-ctl hup <服务名> 向指定服务发送 HUP 信号,重新加载配置
gitlab-ctl cleanse 清空 GitLab 所有数据,恢复初始状态==(慎用)==

运维任务相关命令:

命令 作用说明
gitlab-rake gitlab:check 检查系统配置、数据库、组件连接等
gitlab-rake gitlab:env:info 查看 GitLab 版本、路径、环境等信息
gitlab-rake cache:clear 清除 GitLab 的缓存
gitlab-rake gitlab:backup:create 创建完整的数据备份(备份时不用停止服务)
gitlab-rake gitlab:backup:restore BACKUP=xxxxxx 根据备份恢复数据(恢复前一般要停止服务)
gitlab-rake gitlab:backup:list 查看备份目录中现有的备份文件
gitlab-rake gitlab:cleanup:repos 清理已失效或未使用的仓库
gitlab-rake gitlab:sidekiq:status 查看后台任务 Sidekiq 状态
gitlab-rake "gitlab:password:reset" 重置管理员(root)密码
gitlab-rake gitlab:doctor:secrets 检查 GitLab 密钥配置是否正确

GitLab 基础配置

修改了GitLab的相关配置后,需执行 sudo gitlab-ctl reconfigure 使其生效。,一般情况下,如果只是简单使用,只需要改external_url配置项,就行了,其他采用默认的就行。

Web 访问配置(external_url)

配置项 示例 说明
external_url 'http://10.0.0.166' 指定 GitLab 的访问 URL,包含协议、IP、端口
默认监听端口 external_url 解析 NGINX 自动解析协议端口(如 80/443)
默认监听地址 0.0.0.0 所有网卡地址都会监听该端口

NGINX 相关配置

配置项 示例 说明
nginx['enable'] true 启用 GitLab 内置 NGINX(默认)
nginx['listen_port'] 8080 指定 NGINX 监听的端口号,需与 external_url 匹配
nginx['listen_addresses'] ['10.0.0.166'] 指定监听的 IP 地址,默认是所有接口
nginx['client_max_body_size'] '250m' 限制 HTTP 请求体大小(如上传仓库)

提示:GitLab的web服务器采用的是NGINX,如果只配置了external_url选项,NGINX其他配置项保持默认,则会按照以下规则进行处理:

  • NGINX监听的端口:默认从external_url 解析端口信息做为NGINX的端口
  • NGINX端口的地址:默认监听的是所有接口 0.0.0.0,如果GitLab物理机存在多网卡,所有网卡都会监听这个端口。

HTTPS 相关配置

配置项 示例 说明
nginx['redirect_http_to_https'] true 是否将 HTTP 重定向到 HTTPS
nginx['redirect_http_to_https_port'] 443 HTTPS 的目标端口号
nginx['ssl_certificate'] /etc/gitlab/ssl/gitlab.crt SSL 证书路径(完整链)
nginx['ssl_certificate_key'] /etc/gitlab/ssl/gitlab.key SSL 私钥路径

Git LFS 配置项:

配置项 示例 说明
gitlab_rails['lfs_enabled'] true 启用 Git Large File Storage
gitlab_rails['lfs_storage_path'] "/var/opt/gitlab/gitlab-rails/shared/lfs-objects" 设置 LFS 对象存储路径

例如

gitlab_rails['lfs_enabled'] = true
gitlab_rails['lfs_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/lfs-objects"

数据备份配置:

配置项 示例 说明
gitlab_rails['manage_backup_path'] true 自动创建并管理备份目录
gitlab_rails['backup_path'] "/opt/gitlabbackups" 指定备份文件保存路径(默认 /var/opt/gitlab/backups
gitlab_rails['backup_archive_permissions'] 0644 设置备份文件的权限
gitlab_rails['backup_keep_time'] 259200 备份文件保留时长(单位:秒,此处为3天)
gitlab_rails['backup_pg_schema'] "public" 指定备份的 PostgreSQL 模式,限制只备份数据库内容

例如

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/opt/gitlabbackups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 259200

SMTP 相关配置:

配置项 示例值 说明
gitlab_rails['smtp_enable'] true 启用 SMTP 方式发送邮件
gitlab_rails['smtp_address'] "smtp.qq.com" 指定 SMTP 服务器地址
gitlab_rails['smtp_port'] 465 / 587 SMTP 服务器端口(465: SSL/TLS;587: STARTTLS)
gitlab_rails['smtp_user_name'] "270706881@qq.com" SMTP 登录账号(发送邮箱)
gitlab_rails['smtp_password'] "邮箱授权码" 登录 SMTP 服务器所用的密码(授权码)
gitlab_rails['smtp_domain'] "smtp.qq.com" 发信邮件头中显示的域名
gitlab_rails['smtp_authentication'] "login" SMTP 认证方式,通常为 "login"
gitlab_rails['smtp_enable_starttls_auto'] true 启用 STARTTLS 加密(587常用)
gitlab_rails['smtp_tls'] true 端口为 465 时开启,启用 TLS 加密传输

例如:使用QQ邮箱发消息

使用 QQ 邮箱时必须先在邮箱设置中开启“POP3/SMTP服务”,并获取“授权码”作为密码

gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_address'] = "smtp.qq.com" 
gitlab_rails['smtp_port'] = 465 
gitlab_rails['smtp_user_name'] = "270706881@qq.com" 
gitlab_rails['smtp_password'] = "fpwpqzzzanjacagi" 
gitlab_rails['smtp_domain'] = "smtp.qq.com"   
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true  
gitlab_rails['smtp_tls'] = true 

GitLab 备份流程

官方文档https://docs.gitlab.com/administration/backup_restore/restore_gitlab/

1、将配置文件进行打包,一般需要备份以下配置文件

文件路径 名称 说明
/etc/gitlab/gitlab.rb 主配置文件 GitLab 的核心配置文件,包含外部URL、服务端口、SMTP、NGINX、备份策略等所有配置项,执行 gitlab-ctl reconfigure 时会根据该文件生成实际配置
/etc/gitlab/gitlab-secrets.json 密钥信息文件 GitLab 安装并首次执行 gitlab-ctl reconfigure 时生成,包含密钥、令牌签名秘钥、数据库加密密钥等,每个实例唯一,用于解密数据库中敏感数据
HTTP的证书文件 HTTPS使用的SSL证书和私钥 如启用 HTTPS 通信,证书文件需备份,否则服务重建后 HTTPS 无法正常启动(如 /etc/gitlab/ssl/gitlab.crt.key

提示:

  • GitLab安装完成后,在第一次执行 gitlab-ctl reconfigure 时自动生成的密钥文件,存放在/etc/gitlab目录下,作用是为 GitLab 提供各种 加密/签名密钥。
  • 每个 GitLab 实例都会 随机生成一套唯一的密钥,所以每个GitLab的gitlab-secrets.json文件内容是不一样的,所以数据恢复的时候,必须使用原实例的 gitlab-secrets.json,否则无法解密数据库中的敏感数据,恢复会失败。

2、通过内置工具一键备份整个GitLab实例的数据

命令 全称 区别说明
gitlab-rake gitlab:backup:create Rake 命令 官方推荐用法,直接调用 Rake 任务(类似 rake 的标准写法)
gitlab-backup create Shell 脚本包装 gitlab-backup 脚本的一个快捷方式,它内部其实就是调用了 gitlab-rake gitlab:backup:create,只是让你打字更快一点

提示:

  • 数据备份期间 GitLab 可以正常使用,不会影响到 GitLab 的数据备份。

GitLab 恢复流程

数据恢复前提新部署的GitLab版本与原GitLab版本需完全一致。

官方文档https://docs.gitlab.com/administration/backup_restore/restore_gitlab/

1、 先还原配置文件,然后重新加载配置

需要将GitLab主配置文件/etc/gitlab/gitlab.rb,以及GitLab密钥文件/etc/gitlab/gitlab-secrets.json 进行还原。

sudo gitlab-ctl reconfigure

2、停止连接到数据库的进程,防止进行数据更改

sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

3、将备份文件拷贝到存放GitLab存放备份文件的路径

恢复 GitLab 数据的时候,默认是去 gitlab_rails['backup_path'] 配置项指定的路径下找配置文件,就算备份文件指定了绝对路径的形式,也不会改变这个行为。

4、执行数据恢复步骤,这个过程会先解压tar包

指定备份文件名称的时候,不带 _gitlab_backup.tar 后缀,因为恢复命令会自动拼接正确的文件名。如果带了这个后缀则会出现问题。

gitlab-rake gitlab:backup:restore BACKUP=1742328467_2025_03_19_14.1.7

提示:假设备份文件大小是300G,则只要要有700G以上的空闲空间才行,因为会先进行解包操作。

5、恢复完成后,重启GitLab服务进行测试

gitlab-ctl restart

提示:300G的备份文件,在机械硬盘上恢复数据大约要十小时左右。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐