Gitlab是由GitLab Inc开发的基于Web的DevOps生命周期管理工具。 与Github一样,Gitlab是另一种流行的Git版本管理系统,被大量用户使用。 Gitlab还提供了出色的功能,例如应用程序问题跟踪,任务列表,持续集成和部署(CI / CD)管道。 Gitlab还支持与各种服务的集成。
官网: https://about.gitlab.com/
官方文档: https://docs.gitlab.com/omnibus/index.html#installation-and-configuration-using-omnibus-package
v14.6.0-ee版本的Tags: https://gitlab.com/gitlab-org/gitlab/-/tags/v14.6.0-ee
Debian安装教程: https://about.gitlab.com/install/#debian
这次下载的版本: GitLab Enterprise Edition 14.6.0-ee
gitlab-ee的deb版本: 14.6.0-ee.0
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates perl //安装所需的软件包
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
//上面的命令在您的系统上创建一个apt配置文件(/etc/apt/sources.list.d/gitlab_gitlab-ce.list)。接下来,使用Apt命令在您的Debian系统上安装Gitlab。
sudo EXTERNAL_URL="https://gitlab.tecadmin.net" apt install gitlab-ce
//将EXTERNAL_URL更改为访问Gitlab的域名(若没有搭云服务, 就设置自己的主机ip地址, 例如:http://192.168.1.101 )
安装程序将安装和配置所有必需的服务,例如Nginx,Redis和Gitlab
sudo gitlab-rake gitlab:env:info //查看GitLab各个组件的信息
System information
System: Debian 11
Proxy: no
Current User: git
Using RVM: no
Ruby Version: 2.7.5p203
Gem Version: 3.1.4
Bundler Version:2.1.4
Rake Version: 13.0.6
Redis Version: 6.0.16
Git Version: 2.33.1.
Sidekiq Version:6.3.1
Go Version: unknown
GitLab information
Version: 14.6.0-ee
Revision: 518f728f72b
Directory: /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 12.7
URL: http://192.168.1.101
HTTP Clone URL: http://192.168.1.101/some-group/some-project.git
SSH Clone URL: [email protected]:some-group/some-project.git
Elasticsearch: no
Geo: no
Using LDAP: no
Using Omniauth: yes
Omniauth Providers:
GitLab Shell
Version: 13.22.1
Repository storage paths:
- default: /var/opt/gitlab/git-data/repositories
GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell
Git: /opt/gitlab/embedded/bin/git
安装后, 在游览器中访问gitlab, 例如 http://192.168.1.101
安装过程中随机生成一个密码在/etc/gitlab/initial_root_password, 使用此密码和用户名root登录, 登录后及时更改密码
维护命令
sudo gitlab-ctl status //获取服务状态
sduo gitlab-ctl start/stop/restart //启动/停止/重启
sudo gitlab-ctl reconfigure //使gitlab配置文件生效
编辑Gitlab配置文件 /etc/gitlab/gitlab.rb, 将external_url更新为用于访问Gitlab的有效域名或子域名
external_url "https://gitlab.tecadmin.net"
vi /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.101:9527'
nginx['listen_port'] = 9527
vi /var/opt/gitlab/nginx/conf/gitlab-http.conf
listen *:9527;
要求
无论是CE版本还是EE版本,GitLab恢复数据的时候都需要满足版本一致的前提,即进行恢复的GitLab的版本和备份数据时的GitLab的版本一致
备份分为配置文件备份和应用程序备份
不要将 GitLab 应用程序备份(Git 存储库、SQL 数据)与配置备份 ( /etc/gitlab)存储在同一位置. gitlab-secrets.json文件(也可能是该gitlab.rb 文件)包含数据库加密密钥以保护 SQL 数据库中的敏感数据. 如果将配置备份与应用程序数据备份分开,则可以减少加密的应用程序数据与解密所需的密钥一起丢失/泄露/被盗的可能性
请确保您的系统上安装了 rsync, 若没有sudo apt-get install rsync
配置文件在/etc/gitlab目录下, 可以手动备份该目录,也可以使用命令, 重要的两个文件gitlab-secrets.json和gitlab.rb
使用sudo gitlab-ctl backup-etc 命令, 会在/etc/gitlab/config_backup/中创建一个tar存档文件
运行sudo gitlab-ctl backup-etc --backup-path
root@debian:/etc/gitlab/config_backup# ls
gitlab_config_1640933144_2021_12_31.tar
root@debian:~/gitlab# tar tvf gitlab_config_1640933144_2021_12_31.tar
tar: 从成员名中删除开头的“/”
drwxrwxr-x root/root 0 2021-12-31 14:43 /etc/gitlab/
-rw------- root/root 128292 2021-12-31 14:33 /etc/gitlab/gitlab.rb
drwxr-xr-x root/root 0 2021-12-29 17:21 /etc/gitlab/trusted-certs/
-rw------- root/root 19107 2021-12-31 14:35 /etc/gitlab/gitlab-secrets.json
应用程序备份
备份时间戳: 文件名是[TIMESTAMP]_gitlab_backup.tar,其中TIMESTAMP标识每个备份的创建时间,以及 GitLab 版本。
如果您需要恢复 GitLab 并且有多个备份可用,则需要时间戳.
例如,如果备份名称为1493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar,则时间戳为1493107454_2018_04_25_10.6.4-ce
GitLab提供了一个命令行接口来备份您的整个实例,包括:
Database
Attachments
Git repositories data
CI/CD job output logs
CI/CD job artifacts
LFS objects
Terraform states (introduced in GitLab 14.7)
Container Registry images
GitLab Pages content
Snippets
Group wikis
不包括:
Package registry files
Mattermost data
任何配置文件 ( /etc/gitlab)、TLS 密钥和证书或系统文件
备份命令是 sudo gitlab-backup create
备份路径默认在 /var/opt/gitlab/backups下, 备份文件如: 1640917491_2021_12_31_14.6.0-ee_gitlab_backup.tar
如果要将 GitLab 备份存储在不同的目录中,请将以下设置添加到/etc/gitlab/gitlab.rb并运行sudo gitlab-ctl reconfigure
gitlab_rails['backup_path'] = '/mnt/backups'
备份策略选项
默认备份策略是使用 Linux 命令tar和gzip. 这在大多数情况下工作正常,但在数据快速变化时可能会导致问题。
tar读取过程中数据发生变化时,file changed as we read it可能会发生错误,并导致备份过程失败。
为了解决这个问题,8.17 引入了一种名为copy. 该策略在调用tar和之前将数据文件复制到一个临时位置gzip,以避免错误.
一个副作用是备份过程需要额外占用 1 倍的磁盘空间。该过程会尽最大努力在每个阶段清理临时文件,这样问题就不会复杂化,
但对于大型安装来说,这可能是一个相当大的变化。这就是为什么该copy策略在 8.17 中不是默认设置的原因。
要使用该copy策略而不是默认的流策略,请STRATEGY=copy在 Rake 任务命令中指定 。例如:
sudo gitlab-backup create STRATEGY=copy
如果您使用自定义备份文件名,则无法限制备份的生命周期。
默认情况下,备份文件是根据上一个备份时间戳部分中的规范创建的。但是,您可以[TIMESTAMP]通过设置BACKUP 环境变量来覆盖文件名的一部分。例如:
sudo gitlab-backup create BACKUP=dump
生成的文件名为dump_gitlab_backup.tar. 这对于使用 rsync 和增量备份的系统非常有用,并且可以显着提高传输速度。
确认档案可以转移
为确保生成的存档可通过 rsync 传输,您可以设置该GZIP_RSYNCABLE=yes 选项。这会将--rsyncable选项设置为gzip,这仅在与设置备份文件名选项结合使用时才有用。
请注意,不能保证--rsyncablein 选项在gzip所有发行版上都可用。要验证它在您的发行版中是否可用,请运行 gzip --help或查阅手册页。
sudo gitlab-backup create BACKUP=dump GZIP_RSYNCABLE=yes
还原前提:
1. 安装了与创建备份完全相同的 GitLab Omnibus版本和类型
2. sudo gitlab-ctl reconfigure至少跑过一次
3. GitLab 正在运行。如果没有,请使用sudo gitlab-ctl start
sudo apt update
sudo apt install -y curl openssh-server ca-certificates perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://192.168.1.123" apt install gitlab-ee=14.6.0-ee.0
sudo gitlab-ctl reconfigure
注意: 如果下载不了指定版本, 可以去官网下载deb包手动安装
https://packages.gitlab.com/gitlab/
1. 还原配置文件
root@debian:/# pwd
/
root@debian:/# ls gitlab_config_1640933144_2021_12_31.tar
gitlab_config_1640933144_2021_12_31.tar
root@debian:/# sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
root@debian:/# sudo tar -xf gitlab_config_1640933144_2021_12_31.tar -C /
tar: 从成员名中删除开头的“/”
2. 还原应用程序
a. 移动备份tar文件,并归git用户所有
root@debian:/# sudo cp 1640933200_2021_12_31_14.6.0-ee_gitlab_backup.tar /var/opt/gitlab/backups/
root@debian:/# sudo chown git.git /var/opt/gitlab/backups/1640933200_2021_12_31_14.6.0-ee_gitlab_backup.tar
b. 停止连接到数据库的进程。让 GitLab 的其余部分保持运行:
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# Verify
sudo gitlab-ctl status
c. 接下来,恢复备份,指定要恢复的备份的时间戳:
root@debian:/# sudo gitlab-backup restore BACKUP=1640933200_2021_12_31_14.6.0-ee //这个命令将覆盖GitLab数据库的内容
3. 重新配置、重启并检查 GitLab
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true
若在还原中出现log: Restoring PostgreSQL database gitlabhq_production ... ERROR: must be owner of extension pg_trgm
不用担心, 虽然出现这些警告消息,但备份已成功恢复
若想解决在要备份的gitlab环境下做下改动: https://www.jianshu.com/p/09a2b0c25ecd
为root用户编辑 crontab
sudo su -
crontab -e
添加以下行以安排每隔三天凌晨3点备份
0 3 */3 * * gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /work/gitlab_config
0 3 */3 * * gitlab-backup create CRON=1 && cd /var/opt/gitlab/backups && cp $(ls -t | head -n1) /work/gitlab_backupdata
//CRON=1如果没有任何错误,环境设置会指示备份脚本隐藏所有进度输出。建议这样做以减少 cron 垃圾邮件。
sudo gitlab-ctl stop
sudo apt-get --purge remove gitlab-ce
sudo rm -r /var/opt/gitlab
sudo rm -r /opt/gitlab
sudo rm -r /etc/gitlab