Dockerで建てたGrowiの自動バックアップをDropboxでとるようにした話

前回

環境

さくらVPS
CentOS7
Docker version 1.13.1
docker-compose version 1.18.0

参考サイト様

おしゃれなMarkdown対応wiki : Growiを構築運用する - Qiita
Growiのバックアップとリカバリの手順 - Qiita
第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 | Device Plus - デバプラ
【Dropbox】scriptを使用してのファイル転送処理 - Qiita

バックアップファイルの作成

以下のコマンドでアップロードファイルをバックアップする。

tar -C {Growiセットアップパス} -czf uploads.tar.gz public/uploads

以下のコマンドでデータベースをバックアップする。

# mongodump -d {Growiデータベース名} --gzip --archive=dbdump.gz

バックアップファイルを自動で生成するためのスクリプトを書く

毎日AM7:00にバックアップを取得するスクリプト。バックアップデータは全て1つのアーカイブにまとめる。 このままだとバックアップが溜まる一方になってしまうため、7日前のバックアップを削除するコマンドも実行する。

# cd /usr/local/bin
# vi backup.sh
INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`

# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz

# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete

上をbackup.shに書き込む

# chmod u+x backup.sh

でbackup.shに権限を与えて

# crontab -e
0 7 * * * /home/tpp/wiki/backup.sh

cronに以上の設定を追加

Dropboxへファイル転送

アップロードしたいディレクトリに移動してスクリプトファイルをDL

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

ダウンロードできたら、実行権限を与えて、スクリプトを実行。

chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

めんどくさいから 第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 | Device Plus - デバプラ を見て

ファイル転送も自動化

色々書くのめんどくさ、 できたものがこちら!

INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`

# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz

# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete

cd /home/tpp
./dropbox_uploader.sh delete backup
./dropbox_uploader.sh upload backup backup

追記

INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`
TODAY2=`date +"%Y%m%d"+"g"`

# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz

cd /home/tpp
docker run -it --rm --link growidockercompose_mongo_1 --network growidockercompose_default --volume $(pwd):/backup mongo bash -c "mongodump -v --host growidockercompose_mongo_1 --db growi --out /backup"
tar -cvf ${TODAY2}.tar growi
gzip ${TODAY2}.tar
mv /home/tpp/${TODAY2}.tar.gz ${BACKUP_PATH}

# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete


cd /home/tpp
./dropbox_uploader.sh delete backup
./dropbox_uploader.sh upload backup backup

記事データのバックアップができてなかったので色々追加しました。
本当は一気にtarでまとめてしまいたかったのですがコマンドオプションがうまく扱えないため死亡。 そもそもまとめる必要ない これに割いてる時間もないので、結果やっつけになりましたがちゃんと取れてはいるのでまあ良しとしましょう。

追記2

そもそもこれじゃバックアップできてないらしい(自分は出来てると思うんだけど試すのがめんどくさい) mongodbのリストア機能を使って別のバックアップ用コンテナ作ってごちゃごちゃやらんといけんらしいです が、めんどくさいのであとは後輩に任せることにします