GitLab搭建、备份、迁移

项目实例 / 2019-12-27

知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

2020-01-04 V1.2.0 更新日志
1.更改默认端口的配置步骤
2.数据库迁移与恢复及其注意事项

实例基于CentOS 7系统完成

1.Gitlab搭建

1.1、安装依赖环境

sudo yum install -y curl policycoreutils-python openssh-server

1.2、安装邮件服务

sudo yum install -y postfix 

1.3、设置postfix开机启动

sudo systemctl enable postfix

1.4、启动postfix服务

sudo systemctl start postfix

1.5、添加gitlab仓库

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

1.6、安装gitlab

sudo yum install -y gitlab-ce

1.7、重新配置gitlab

sudo gitlab-ctl reconfigure

1.8、更改默认端口

sudo vim /etc/gitlab/gitlab.rb
nginx['redirect_http_to_https_port'] =88 #找到这一行,默认是80,改为你要的端口即可

sudo vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
server {

listen *:88; #找到这一行默认是80,改为你要的端口即可

1.9、重启gitlab服务

sudo gitlab-ctl restart

1.10、配置firewall,开放对应服务

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=88/tcp 
sudo firewall-cmd --reload #重载防火墙以生效配置

如若是云服务器,外网防火墙也开放相应端口即可

2.Gitlab备份

2.1、简单的脚本,

我这边是叫gitlab-backup

#!/bin/bash
#
cd /var/opt/gitlab/backups  #进入gitlab备份目录
echo "cd /var/opt/gitlab/backups"

echo "create a gitlab-backup file"
gitlab-rake gitlab:backup:create #创建一个git完整备份文件
echo "complete"

2.2、查看crond是否启动

[root@localhost ~]# systemctl status crond
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2019-08-21 12:59:10 CST; 2 months 22 days ago
     Main PID: 3154 (crond)
       CGroup: /system.slice/crond.service
               └─3154 /usr/sbin/crond -n
Aug 21 12:59:10 localhost.localdomain systemd[1]: Started Command Scheduler.
Aug 21 12:59:10 localhost.localdomain crond[3154]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 57% if used.)
Aug 21 12:59:10 localhost.localdomain crond[3154]: (CRON) INFO (running with inotify support)

2.3、定时执行脚本备份

[root@localhost ~]# crontab 
0 22 * * 6 bash /var/spool/cron/gitlab-backup.sh > /dev/null                       
[root@localhost ~]# crontab -l
0 22 * * 6 bash /var/spool/cron/gitlab-backup.sh > /dev/null

3.Gitlab迁移

迁移如同备份与恢复的步骤一样,
只需要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups即可(如果你没修改过默认备份目录的话)
但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同.
比如新服务器安装的是10.2.2版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab
升级为10.2.2在进行备份

迁移较简单的方法就是scp,可以理解为ssh管道下的cp命令。把当前一个文件copy到远程服务器上。
比如下面示例,-r是递归,将本地a目录及其下属所有子文件或目录复制到远程主机的root目录下

旧机器操作如下:

如果需要备份当前数据库而不是此前写的脚本定期备份,需要执行以下命令来停止gitlab服务保证没有新数据写入

sudo gitlab-ctl stop

再次手动备份当前数据库数据

gitlab-rake gitlab:backup:create

Screenshot_8.png

迁移脚本到新服务器

sudo scp /var/spool/cron/gitlab-backup.sh root@Newserver-IP:/var/spool/cron/

迁移数据库备份文件到新服务器

sudo scp 1578025391_2020_01_03_11.3.3_gitlab_backup.tar root@Newserver-IP:/var/opt/gitlab/backups/

新服务器恢复操作

千万!千万!千万!不要带上后缀名_gitlab_backup.tar_gitlab_backup.tar,否则报错does notexist!只需要输前面的文件名然后gitlab会自动到backups目录找文件
gitlab-rake gitlab:backup:restore BACKUP=1578025391_2020_01_03_11.3.3

本人教训,旧服务器版本与新服务器版本不符合,因此备份迁移作废;需要将新服务器重装旧版本gitlab;或者将旧服务器gitlab版本升级为新服务器版本一致,再重新备份迁移;但是gitlab有个特点,升级不能跨版本升级,只能11级往上升;比如我旧服务器是11.3.3,新服务器装的是最新的12.6.2,只能升11.4.0这样1小级,大家可以想象要升多少次才能升到12.6.2了,所以我放弃了升级,直接将新服务器重装系统然后安装与旧服务器一致的11.3.3版本后再进行迁移恢复操作.

另外,迁移也可以用rsync

查看gitlab当前版本可以用下面这条命令

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
世间微尘里 独爱茶酒中