GitLab 部署说明
介绍gitlab的部署和使用
GitLab 基础介绍
GitLab 是一个建立在 Git (分布式版本控制系统)上的平台,提供了 Git 的核心功能,还提供了web界面来对项目进行管理、权限控制等。
GitLab 常规版本:
- GitLab-CE(Community Edition):社区版,开源且免费。提供了 GitLab 的核心功能
- GitLab-EE(Enterprise Edition):企业版,需要付费。在社区版的基础上增加了高级功能
- GitLab-JH:极狐版,针对中国市场进行本地化定制的版本,优化了网络访问和用户体验
GitLab 官网地址:
- GitLab 官网:https://about.gitlab.com
- GitLab 极狐版官网:https://gitlab.cn/
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 格式。
- 官方下载地址:https://packages.gitlab.com/gitlab/gitlab-ce
- 国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
Omnibus GitLab 安装后的常见路径:
| 目录路径 | 用途说明 |
|---|---|
/etc/gitlab/ |
配置文件目录(如 gitlab.rb、gitlab-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的备份文件,在机械硬盘上恢复数据大约要十小时左右。
更多推荐


所有评论(0)