Gitlab remote backup

因為samba裝起來怪怪的,然後又多開了一個洞,不如就不要用。另外 gcloud compute copy-files 試了一下有遇到一些 permission 問題,再加上要 remote backup 有的不見得會是在 google cloud 上,所以下面這個算是個 general solution (?)

首先要先backup gitlab, 用 crontab

15 02 * * 2-6 umask 0022; tar -zcf /tmp/gitlab_backup/$(date "+gitlab-\%Y\%m\%d.tar.gz") -C / var/opt/gitlab --exclude=var/opt/gitlab/backups

umask 可以查wikipedia這邊。關於備份gitlab可以參考官方文件

備份之後就是要傳送到remote機器上去,我是從remote machine來抓,首先先寫好script,假設放在/tmp/gitlab_backup/copyGitLabBackup.sh (在這之前先裝好 expect,看是在 centos下yum install expect, 或者是在 ubuntu下 apt-get install expect)。

#!/bin/bash
d=$(date +gitlab-%Y%m%d.tar.gz)
echo $d
expect -c "
spawn scp -i /home/username/.ssh/id_rsa username@IP_ADDRESS:/tmp/gitlab_backup/$(date +gitlab-%Y%m%d.tar.gz) /tmp/gitlab_backup
expect \"Enter passphrase for key '/home/username/.ssh/id_rsa': \"
send \"password\r\"
expect \"100%\"
sleep 1
expect ]#
"

如果帳號是用ssh key登入的,記得要設定一下password,另外有出現過不會跳訊息要求輸入password 的。

然後就是在來加個 crontab

55 02 * * 2-6 /bin/bash -c "/tmp/gitlab_backup/copyGitLabBackup.sh"