GitLab定时备份及恢复

背景

公司使用windows上的centos虚拟机作为Gitlab存储服务器,需要每天自动定时备份(数据备份到windows上),防止虚拟机文件损坏造成代码数据丢失。

操作步骤

配置linux访问windows免密登录

  1. 安装OpenSSH服务 下载地址
  2. 解压至C:Program FilesOpenSSH,打开cmd(管理员),进入此安装目录),执行命令:powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
  3. 设置服务自动启动:sc config sshd start= auto
  4. 启动服务:net start sshd
  5. 在客户端(git服务器)上创建密钥对:ssh-keygen -t rsa直接按三次回车,不要设置密码
  6. 拷贝公钥文件到需要备份文件的服务器,将git服务器中~/.ssh/id_rsa.pub公钥文件拷贝到windows的C:user/{{ username }}/.ssh文件夹下并重命名为authorized_keys,注意如果没有.ssh文件夹,最好使用上一步的命令创建密钥对让其自动生成,否则会识别不到此公钥
  7. 在git服务器上验证下是否免密:ssh user@192.168.124.12

创建备份脚本

vim /opt/gitlabBackAndScp.sh

#!/bin/sh

scp_linux_path='/var/opt/gitlab/backups/'
# 如果需要备份多台,这里可以多配置一行scp_windows_uri2,并把最后一行也复制修改下
scp_windows_uri='user@192.168.124.12:D:GIT_BACKUP'
scp_log_path='/opt/gitlabBackAndScp.log'

time=$(date +%Y-%m-%d %H:%M:%S)
gitlab-rake gitlab:backup:create
filename=`ls $scp_linux_path -t |head -n1|awk '{print $0}'`
echo [$time] $scp_linux_path$filename >> $scp_log_path
scp $scp_linux_path$filename $scp_windows_uri

创建计划

配置每天凌晨一点备份,执行之后会默认在/var/opt/gitlab/backups文件夹下产生备份文件,并推送到上面配置的免密登录的服务器上
crontab -e输入0 1 * * * /opt/gitlabBackAndScp.sh

.gitlab恢复

  1. 停止相关服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
  1. 修改备份文件权限
    chmod 777 /var/opt/gitlab/backups/1629016668_2021_08_15_12.1.3_gitlab_backup.tar

  2. 执行恢复
    gitlab-rake gitlab:backup:restore BACKUP=1629016668_2021_08_15_12.1.3

  3. gitlab启动
    gitlab-ctl start

原文地址:https://www.cnblogs.com/MrZhou5/p/15141294.html