GitLab 远程 定时备份

原文地址:http://www.cnblogs.com/straycats/p/7672692.html



部署:https://www.cnblogs.com/nethrd/p/9408254.html

升级:https://www.cnblogs.com/nethrd/p/9408290.html

 本地备份:https://www.cnblogs.com/nethrd/p/9408330.html

 迁移/恢复:https://www.cnblogs.com/nethrd/p/9408388.html

上一篇随笔(http://www.cnblogs.com/straycats/p/7671204.html)已经记录了给gitlab本地做自动备份的解决方案,但是源码安全关乎研发部门的生命,还是需要进一步提高容灾能力。首先研发部门暂时没有老法师能够在服务器挂了之后通过硬盘将服务器完全恢复,虽然服务器做了raid5,谨慎起见还是得实现远程自动备份的解决方案,当源码服务器出现灾难性故障时可以保证恢复源码的功能。

查找资料后发现,http://blog.csdn.net/ouyang_peng/article/details/77334215的教程可行,为了能够符合我的部署步骤,我将其中部分内容重新整理并修改,也增补了一点细节说明。



一、环境准备

1.gitlab所在的服务器A(centos7,192.168.1.1)

2.备份服务器B(centos7,192.168.1.2)

3.gitlab本地备份目录设置为/var/opt/gitlab/backups/log,本篇也是以此展开

gitlab已经配置了本地备份。如果没有配置,可以参考http://www.cnblogs.com/straycats/p/7671204.html



二、通过密钥配对取消scp传输密码的限制

手动备份数据费时费力。最好的方法就是通过脚本实现远程自动备份。但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码。

为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用 rsync,scp,rexec等命令来做的远程备份了。

2.1 生成密钥对

假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码。那我们可按照下面的步骤来做:

 1)在gitlab服务器A上生成rsa证书 

ssh-keygen -t rsa

(这里需要增加截图,我第一次部署时忘记截了之后补)

1、生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。 
2、因为之前已经有/root/.ssh/id_rsa 文件存在,因此提示你是否覆盖,输入y表示覆盖 
3、接着会提示输入一个密码,直接回车,让它空着。当然,也可以输入一个密码。 
4、接着输入确认密码,输入完之后,回车密钥对就生成完了。

这样,在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。

 2)在gitlab服务器A上cp生成rsa公钥证书 

在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到远程服务器B。

cd /root/.ssh
cp id_rsa.pub id_rsa.pub.A

2.2 生成rsa公钥证书上传到备份服务器B

先在服务器B上创建目录/root/.ssh。

mkdir -p /root/.ssh

使用scp命令进行远程复制,将服务器A生成的id_rsa.pub.A拷贝到服务器B的/root/.ssh目录下。

scp /root/.ssh/id_rsa.pub.A [email protected]:/root/.ssh/

此时使用scp命令需要输入密码,当把下面的“2.3 密钥配对”执行后,以后gitlab服务器A使用scp命令复制文件到备份服务器B的话,就不需要输入密码了。

2.3 密钥配对

1)创建authorized_keys文件

在备份服务器B的/root/.ssh下创建authorized_keys文件。

touch /root/.ssh/authorized keys

2)将id_rsa.pub.A文件内容追加到authorized_keys 文件中

通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中。

cd /root/.ssh/
cat id_rsa.pub.A >> authorized_keys

3)修改authorized_keys文件的权限

authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。

chmod 400 authorized_keys

4)测试上传文件是否还要输入密码

不放心的话,立刻测试下gitlab服务器A使用scp命令复制文件到备份服务器B是否还要输入密码。

scp /root/.ssh/id_rsa.pub.A [email protected]:/root/.ssh/

发现在2.3之前,由于没有设置ssh证书授权认证时,上传需要输入密码;2.3操作完后,由于授权认证,已经不需要输入密码了。



三、定时将备份文件传到备份服务器

3.1 创建远程备份脚本

在gitlab服务器A上,在/root目录下创建定期备份脚本auto_backup_to_remote.sh。

vim /root/auto_backup_to_remote.sh

添加下面的内容,并wq保存。

#!/bin/bash

# gitlab 服务器备份路径
LocalBackDir=/var/opt/gitlab/backups

# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/root/gitlab_backup

# 远程备份服务器 登录账户
RemoteUser=root

# 远程备份服务器 IP地址
RemoteIP=(备份服务器B的地址,请你自行修改)

#当前系统日期
DATE=`date +"%Y-%m-%d"`

#Log存放路径
LogFile=$LocalBackDir/log/$DATE.log

# 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60  -name ‘*.tar*‘)

#新建日志文件
touch $LogFile

#追加日志到日志文件
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile

# 输出日志,打印出每次scp的文件名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile

#备份到远程服务器
scp $BACKUPFILE_SEND_TO_REMOTE [email protected]$RemoteIP:$RemoteBackDir

#追加日志到日志文件
echo "---------------------------------------------------------------------------" >> $LogFile

3.2 修改远程备份脚本auto_backup_to_remote.sh的权限

要能让系统执行auto_backup_to_remote.sh,必须修改该脚本的权限。

chmod 777 auto_backup_to_remote.sh

3.3 创建日志存放目录

mkdir -p /var/opt/gitlab/backups/log

3.4 测试远程备份脚本的功能是否可用

现在为了验证脚本是否可以正常运行,我们需要手动执行脚本。

在gitlab服务器A上执行find命令,看是否能够正常查找出我们要scp到远程服务器的Gitlab备份文件。

find /var/opt/gitlab/backups/log -type f -mmin -60  -name ‘*.tar*‘

手动执行脚本auto_backup_to_remote.sh,看是否能够正常上传

cd

./auto_backup_to_remote.sh

等待1-2分钟左右,查看备份服务器B的目录/root/gitlab_backup下是否有服务器A传过来的备份文件。

在备份服务器B上能找到服务器A传过来的备份文件,说明远程备份脚本的功能OK。

如果每次上传都通过人工运行脚本的方式,人工的消耗太大,接着配置定时执行该脚本。

3.5 添加定时计划

定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。

一般添加定时计划可以有2种方式:

1.使用命令crontab -e,将定时任务添加后保存。

2.将定时任务添加到/etc/crontab文件中。

我这里采取第一种,使用crontab -e。

crontab -e

结合我之前对公司gitlab本地备份的设计,故设计在备份完10分钟后上传,故分别在每天12:10、19:10进行备份,故添加下面的内容,wq保存。

10 12 * * * /root/auto_backup_to_remote.sh -D 1
10 19 * * * /root/auto_backup_to_remote.sh -D 1

重启crontab

systemctl restart crond


四、定时删除备份服务器上的备份文件

每个Gitlab备份文件都很大。因此每天备份两次,过不了多久的话,备份服务器B上的磁盘空间可能就会被Gitlab备份文件占用完。

故需要定期清理备份文件,参考备份服务器的空间,暂定保留14天的备份文件。

4.1 创建删除过期备份文件的脚本

设计备份服务器B的/root/gitlab_backup作为接收远程上传备份文件的目录,故在备份服务器B上,先创建该目录。

mkdir -p /root/gitlab_backup

创建删除过期备份文件的脚本auto_remove_old_backup.sh。

vim /root/auto_remove_old_backup.sh

添加下面的内容,并wq保存。

#!/bin/bash

# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/root/gitlab_backup

# 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
find $GitlabBackDir -type f -mtime +14 -name ‘*.tar*‘ -exec rm {} \;

4.2 修改auto_remove_old_backup.sh脚本的权限

chmod 777 auto_remove_old_backup.sh

4.3 添加定时计划

定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。

一般添加定时计划可以有2种方式:

1.使用命令crontab -e,将定时任务添加后保存。

2.将定时任务添加到/etc/crontab文件中。

我这里采取第一种,使用crontab -e。

crontab -e

设计凌晨0点执行删除过期备份文件的脚本,故添加下面的内容,wq保存。

0 0 * * *  /root/auto_remove_old_backup.sh

重启crontab

systemctl restart crond

参考资料:

1. http://blog.csdn.net/ouyang_peng/article/details/77334215

原文地址:https://www.cnblogs.com/nethrd/p/9408362.html

时间: 2024-10-18 01:33:01

GitLab 远程 定时备份的相关文章

Gitlab备份,Crontab定时备份

1:Gitlab备份非常简单,只需要一条命令就可以创建完整的备份 gitlab-rake gitlab:backup:create 使用以上命令,就相当于在/var/opt/gitlab/backups/文件夹下创建了一个类似于1542596619_2018_11_19_9.2.1_gitlab_backup.tar的压缩文件,这个压缩包就是Gitlab所有的完整文件,1542596619_2018_11_19是备份的日期9.2.1是Gitlab的版本,如果你要从Gitlab迁移至Gitlab,

Linux Shell脚本之Gitlab远程备份

注:Gitlab是一个git服务程序,有web图形界面和一系列管理工具,具体详细介绍可以Google it. 这一篇可以说是上一篇<Linux Shell脚本之Atlassian confluence远程备份方法>的姊妹篇.其说明和原理是和上一篇是一样的,其核心原理都是core dump.scp.ssh和find+rm,但也有不同. 1.Gitlab本身提供了较好的备份方法,只是一个命令那么简单,并且它也支持远程备份(远程存储和云存储),例如它可以存储到aws的s3上. 2.本脚本运行在Git

关于工作,学习中定时备份的几个方法(cron,git,mail)

首先介绍一下cron这个定时备份的工具: crontab -e : 运行文字编辑器来设定时程表,内定的文字编辑器是 VI.假设你想用别的文字编辑器.则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比方说 setenv VISUAL joe) crontab -r : 删除眼下的时程表 crontab -l : 列出眼下的时程表 crontab file [-u user]-用指定的文件替代眼下的crontab. 时程表的格式例如以下 : f1 f2 f3 f4 f5 program

Linux命令之文件同步、定时备份 -rsync,cron,crontab

一.rsync介绍(可忽略) Rsync(remote synchronize)是一个远程文件同步工具; Rsync使用"Rsync算法"来同步文件,该算法只传送两个文件的不同部分,因此速度相当快; Rsync是替代rcp的一个工具,目前由rsync.samba.org维护,因而rsync.conf文件的格式类似于samba的主配置文件; Rsync可通过rsh或ssh使用,也能以daemon模式运行,以daemon方式运行时,Rsync Server会打开一个873端口等待客户端连接

linux定时备份mysql并同步到其它服务器

1.mysql的定期备份:2.同步到其它服务器 mysql 备份 备份还原某个数据库 备份还原 # 导出数据库 /usr/bin/mysqldump -u root -ppwd database > database20160929.sql # 导入数据库 mysql -u root -p database < database20160929.sql 备份到压缩文件从压缩文件导入 #备份到压缩文件 /usr/bin/mysqldump -u root -ppwd database  | gz

[转帖]tar高级教程:增量备份、定时备份、网络备份

tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ?浏览 27,065 次 61条评论 一.概述 备份与恢复对于系统维护而言是至关重要的事情.不合理的备份与还原会让你的数据面临丢失的风险.许多用户都在丢失重要数据后才意识到这种风险.而要从这种情况恢复数据将是非常耗时并且困难的.所以我们应该从别人的错误中吸取教训,并确保你的系统处于保护中.先考虑一些问题: 何时进行备份? 如果你可以接受一个星

GitLab项目批量备份,迁移

一. 创建备份文件 gitlab-rake gitlab:backup:create 使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1547087542_2019_01_10_11.0.3_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1547087542_2019_01_10_11.0.3是备份创建的日期 scp /var/opt/gitlab/backups/1547087542_2019_01_1

gitlab 安装、备份与还原及常见设置

gitlab 安装.备份与还原及常见设置 安装 安装过程比较简单,跑在 docker 上,执行命令即可 -v参数后面的值为卷的名称,自动创建数据卷(如果数据卷不存在) https://docs.gitlab.com/omnibus/docker/ docker run --hostname gitlab.example.com --restart always --name 'gitlab' -d -p 443:443 -p 80:80 -p 22:22 -v gitlab_config:/et

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA