Ghostのバックアップ
このブログはGhostを使っていますが特に今までまともにバックアップを取っていなかったので、バックアップを作成することにしました。
Ghostでバックアップすべきなのはこの2点かなと思っています。
/contents
/config.js
環境など
- さくらVPS
- Scientific Linux 6系
- Dropboxのアカウントあり
処理の流れ
- これらをまとめたディレクトリを作る
tar
で圧縮する- dropboxにアップロードする
- 残骸を削除
この流れをcronで毎日4時に行うことにしました。
Dropboxにファイルをアップロードする
DropboxへのファイルアップロードにはDropbox-Uploaderを使うことにしました。Starも多くユーザも多そうだったので。
cloneするとdropbox_uploader.sh
はパーミッションが775だったのでchmod
する必要はありませんでした。
# /usr/local/src 移動
cd /usr/local/src
# /usr/local/src にクローン
git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
# pathに通すためシンボリックリンクを作成
ln -s /usr/local/bin/Dropbox-Uploader/dropbox_uploader.sh /usr/local/bin/
これでdropbox_uploader.sh
を実行できるようになりました。
# $HOMEへ移動
cd ~
# dropbox_uploader.sh を実行する
dropbox_uploader.sh
パスが通っていれば実行に成功します。するとこんなメッセージが表示されました。
This is the first time you run this script, please follow the instructions:
1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
2) Click on "Create App", then select "Dropbox API app"
3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
4) Enter the "App Name" that you prefer (e.g. MyUploader1828286482513)
Now, click on the "Create App" button.
When your new App is successfully created, please click on the Generate button
under the 'Generated access token' section, then copy and paste the new access token here:
# Access token:
というわけなので、https://www.dropbox.com/developers/apps でDropboxアプリを作成してGenerated access token
します。
生成されたアクセストークンをシェルにコピペしてEnterすれば完了でした。
動作を確認します。
touch text.txt # 空のファイルを作成
dropbox_uploader.sh upload text.txt /test_upload/text.txt # ファイルをアップロード
Dropboxアプリで設定したパス配下にファイルのアップロードが確認できました。
/path/to/DropboxApp/text_upload/text.txt
バックアップ作成とアップロードスクリプトを書く
書きました。こんな感じのパスにバックアップファイルがアップロードされます。
/アプリ/DropboxAppDir/ghost/2016/ghost-201611141539.tar.gz
このスクリプトのパスは /home/user_name/bin/backup_ghost.sh
として。
#!/bin/sh
#
DATE=`date +"%Y-%m-%d-%H-%M"`
TARGET_ROOT="/path/to/ghost_parent"
TARGET_DIR="ghost"
BACKUP_ROOT="/tmp"
BACKUP_DIR="${TARGET_DIR}-${DATE}"
UPLOAD_PATH="/ghost/`date +'%Y'`"
#
# echo "-- start"
#
############
# create backup dir
############
# echo "-- backup section"
# echo "backup dir: ${BACKUP_ROOT}/${BACKUP_DIR}"
if [ ! -d "${BACKUP_ROOT}/${BACKUP_DIR}" ]; then
mkdir -p "${BACKUP_ROOT}/${BACKUP_DIR}"
# echo "make backup dir"
fi
#
############
# copy
############
# echo "-- copy file section"
cd "${BACKUP_ROOT}/${BACKUP_DIR}"
CONTENT="${TARGET_ROOT}/${TARGET_DIR}/content"
# echo "copy ${CONTENT}"
cp -r "${CONTENT}" .
CONFIG="${TARGET_ROOT}/${TARGET_DIR}/config.js"
# echo "copy ${CONFIG}"
cp -r "${CONFIG}" .
# echo ""
#
############
# archive
############
# echo "-- archive section"
ARCHIVED="${BACKUP_DIR}.tar.gz"
cd $BACKUP_ROOT
tar czf "${BACKUP_ROOT}/${ARCHIVED}" $BACKUP_DIR
# echo "backup finished"
# echo ""
#
############
# remove cache
############
# echo "-- remove file cache section"
CACHE="${BACKUP_ROOT}/${BACKUP_DIR}"
rm -rf ${CACHE}
#
############
# upload dropbox
############
# echo "-- upload archive section"
dropbox_uploader.sh -q upload "${BACKUP_ROOT}/${ARCHIVED}" "${UPLOAD_PATH}/${ARCHIVED}"
if [ $? == 0 ]; then
# echo "upload success"
rm -rf "${BACKUP_ROOT}/${ARCHIVED}"
# echo "remove archive file. ${BACKUP_ROOT}/${ARCHIVED}"
exit 0
else
# echo "upload failed"
exit 1
fi
#
exit 1
実際にスクリプトを実行して動くか確認
/home/user_name/bin/backup_ghost.sh
cronでまわす
バックアップのアップロードなどができたら後は、そんなに毎日記事を書くわけでもないけど、毎日バックアップすることにしました。時間は毎朝4時です。
/etc/cron.d/blog-ghost-backup
#
# cron-jobs for certbot-renewal
#
MAILTO=user_name
0 4 * * * user_name /home/user_name/bin/backup_ghost.sh
結果は明日確認します。