OpenShift Daily Backup and Push to Github or Bitbucket

我是廢話


嘛~!(滾來滾去~!

正題開始


OpenShift 上雖然有提供備份功能,但是僅只要備份 SQL 資料還是牛刀一把,當然 OpenShift 尚有提供 Cron 等工具,反而直接 dump sql 資料出來反而是一個比較直覺的方法。我也看過不少的做法,例如這篇利用 rsync ,但是固定一段時間就要去下一次指令。所以我就想說有沒有直接可以 psuh 上 git private repo 的方法,這樣就不用固定都還要從 app 上拉下來。

但是因為 OpenShift 上權限的關系,要 ssh 真是一件大工程,裡面唯一個可以寫入又不會被清掉的資料夾大概就只有一個 $OPENSHIFT_DATA_DIR ,可以用的指令也算不錯多 ssh-keygenssh-agent...等,繞個路應該還是可以達到想要的效果。

當然 ssh-keygen 等相關技術文件請參閱 github Generating SSH Keys 文章,但是其中在 ssh-keygen 要產生 key 時會問 key 要存放在哪裡,請將其指定到 $OPENSHIFT_DATA_DIR 中,接著就可以把 pubkey 加入到 github 或其他類似網站的信任清單中後,就可以測試了。

1
2
3
4
eval "$(ssh-agent -s)"
ssh-add $OPENSHIFT_DATA_DIR'your/id_rsa/key/path'
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -T git@github.com
killall ssh-agent

如果看到

1
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

表示成功了,但在這裡算是完成步驟的三分之二而已,當然要讓 git 的 ssh 作用還要建立一個假的 ssh 在 $OPENSHIFT_DATA_DIR

1
2
3
cd $OPENSHIFT_DATA_DIR
echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
chmod +x ssh

當然就可以將相關的 git 資料夾建立 init add remote 相關資訊建立好後就可以寫入到 cron 中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
##copy or generate backup file into the folder. and cd into it.
...
##start git commend
git add .
git commit -a -m "git commit message"

eval "$(ssh-agent -s)"
ssh-add $OPENSHIFT_DATA_DIR'your/id_rsa/key/path'
GIT_TRACE=1 GIT_SSH=$OPENSHIFT_DATA_DIR"ssh" git push
killall ssh-agent

這樣時間一到就如果有任何變動的話就會 commit 並且 push 到相關的 git repo 中了。

Sun Jul. 13 2014
Comments

Comments