Gitlab---代码库备份的迁移与数据恢复


Gitlab 代码库迁移恢复

前言

承接之前写过的公司gitlab代码库备份文档,此文档为对进行备份的gitlab代码库备份包进行数据迁移恢复测试。

首先,执行备份的脚本如下:

#!/usr/bin/bash
## gitlab backup
## by shanhai

gitlab_docker_id=`docker ps | grep gitlab-ce | awk '{print $1}'`
gitlab_image_id=`docker images | grep gitlab-ce | awk '{print $3}'`

gitlab_backup(){
	docker exec -it $gitlab_docker_id gitlab-rake gitlab:backup:create
	find /home/gbase/app/gitlab/data/backups/ -name "*_13.2.6_gitlab_backup.tar"
	if [ $? -eq 0 ];then
		cp /home/gbase/app/gitlab/data/backups/*_13.2.6_gitlab_backup.tar /data/gitlab_backup
		cp /home/gbase/app/gitlab/config/gitlab.rb /data/gitlab_backup
		cp /home/gbase/app/gitlab/config/gitlab-secrets.json /data/gitlab_backup
	else
		echo "gitlab backup faild, Please check it"
		exit
	fi
}

images_backup(){
	cd /data/gitlab_backup
	docker save -o "gitlab_image_backup_`date +%F`.tar.gz" $gitlab_image_id
	find /data/gitlab_backup/ -name "gitlab_image_backup_`date +%F`.tar.gz" && find /data/gitlab_backup/ -name "*_13.2.6_gitlab_backup.tar"
	if [ $? -eq 0 ];then
		/usr/bin/python3 /home/gbase/app/gitlab_backup.py  #邮件发送脚本
	else
		echo "gitlab image backup faild, Please check it"
		exit
	fi
}

gitlab_backup
images_backup

邮件发送脚本如下:

#!/usr/bin/env python3
## send email
## by shanhai
import time
import sys
from datetime import datetime
import subprocess

time_start=time.time()
datetime.now()
current_tm=datetime.now().strftime('%Y%m%d%H%M')
today=datetime.now().strftime('%Y-%m-%d')

import smtplib
from socket import gaierror

port = 25
smtp_server = "10.0.0.99"
login = "**@**.com"
password = "****"

sender - "**@**,cin"
receiver_1 = "shanhai@**.com"
receiver_2 = "**@**.com"

message - f"""\
Subject: Gitlab Backup Norification E-Mail {today}
To: {receiver_1},{receiver_2}
From: {sender}
------------------------------------------------------------
The gitalb_package backup is successful

The path is \\10.0.0.1\data\gitlab_backup
------------------------------------------------------------
This is a message by scm_backup with Pythn."""

try:
	with smtplib.SMTP(smtp_server, port) as server:
		server.login(login, password)
		server.sendmail(sender, receiver_1, message)
		server.sendmail(sencer, receiver_2, message)
	
	print('Sent')
except (gaierror, ConnectionRefusecdError):
	print('Failed to connect to the server. Bad connection settings?')
except smtplib.SMTPServerDisconnected:
	print('Failed to connect to the server. Wrong user/password?')
except smtplib.SMTPException as e:
	print('SMTP error occurred: ' + str(e))

执行完脚本,备份包存于/data/gitlab_backup目录下,scp此目录下的所有文件到备份恢复测试机

scp /data/gitlab_backup/* root@10.*.*.*:/home/backup

1. docker容器恢复

首先,启动docker

systemctl start docker
systemctl enable docker

然后,将gitlab的docker镜像的备份tar包加载成镜像

docker load -i  gitlab_image_backup_2021-09-03.tar.gz

#查看镜像
docker images

#启动容器,并设置端口映射
docker run -itd -p 9180:9180 -p 9443:443 -p 9022:9022 5ff8172ebbfd  #docker 镜像ID

#查看容器状态
docker ps -a

效果如下
在这里插入图片描述
至此,gitlab的docker容器已恢复成功,下面开始进行gitlab代码库的恢复。

2. gitlab代码库恢复

拷贝本地的gitlab代码库备份文件到容器内,并赋予权限

docker cp /home/backup/1630657992_2021.09.03_13.2.6_gitlab_backup.tar 8ff130655419:/var/opt/gitlab/backups

#进入容器内
docker exec -it 8ff130655419 /bin/bash
#赋予备份包权限
chmod -R 777 /var/opt/gitlab/backups

将压缩包拷进之后,对gitlab.rb文件和nginx下的gitlab-http.conf文件进行编辑,将gitlab.rb文件中的external_url 修改为本地ip+端口号

external_url 'http://10.*.*.*:9180'

wq保存退出,进行nginx配置文件的修改

修改地方如下:

listen *:9180;
server_name 10.*.*.*;

set $http_host_with_default "10.*.*.*:9180";

wq保存退出,执行gitlab-ctl reconfigure,使配置生效。

然后进行代码库恢复

gitlab-rake gitlab:backup:restore BACKUP=1630657992_2021.09.03_13.2.6 #注意,此处为备份包编号,不是整个备份包的名称

#出现交互界面,输入yes,直至恢复完成。

代码库恢复结束后,重启gitlab服务gitlab-ctl restart,并查看服务状态gitlab-ctl status
在这里插入图片描述
浏览器访问本地ip+端口号,输入原来的管理员账号密码,登陆成功,代码库数据无丢失,至此gitlab服务恢复成功。
在这里插入图片描述

3. gitlab项目SSH克隆恢复

进入恢复后的gitlab容器中,ps -ef | grep sshd,找到sshd_config的配置文件位置,通过vim进行修改配置文件的端口。修改后配置文件内容如下:
在这里插入图片描述
在这里插入图片描述
修改配置文件后,gitlab-ctl reconfigure,gitlab-ctl restart,使配置文件生效。

进入任意目录新建测试目录,进入测试目录执行git init,初始化为git仓库,执行ssh-keygen -t rsa生成秘钥,cat /root/.ssh/id_rsa.pub查看公钥,并复制公钥粘贴到gitlab的SSH免密设置中,如下图所示:
在这里插入图片描述
生成秘钥后,选择任意一个项目,复制SSH克隆地址,回到测试仓库,执行git clone +SSH克隆地址
在这里插入图片描述
在这里插入图片描述
如项目成功克隆,则SSH已恢复成功。如克隆失败,可查看SSH日志,cat /gitlab/logs/sshd/current,如显示有.ssh权限报错问题,则是/root/.ssh/下的文件权限太高,需降低权限chmod -R 700 /root/.ssh。如报错显示为listening on 0.0.0.0 port 22. 则说明sshd_config配置文件修改错误,gitlab容器内ssh默认22端口没有进行更改。

以下为docker-compose.yaml文件内容,可进行参考,如端口映射与目录挂载等。此迁移方式是将之前的挂载目录gitlab迁移到新机器后,直接docker-compose up -d 通过docker-compose直接进行恢复。

version: '3'
services:
	gitlab:
		images: 'gitlab/gitlab-ce'
		restart: unless-stopped
		ports:
			- '9180:9180'
			- '9443:443'
			- '9022:9022'
		volumes:
			- ./config:/etc/gitlab
			- ./data:/var/opt/gitlab
			- ./logs:/var/log/gitlab
			- ./ssh/sshd_config:/assets/sshd_config

networks:
	defaults:
		external:
			name: app_bus


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值