S3にMastodonのデータベースをバックアップしてアップロードする
カテゴリ:未分類 投稿日:2019年7月1日こんにちはCutls Pです。
リビジョン: 2019/07/09 1:36: 圧縮忘れてたやつ
表題の通りのことをします。S3をMastodonのメディアファイル保存先として使用していることが前提です。また、Mastodon以外のものが入ってたりしてS3以外でaws-cli使う可能性があるときはダメです。
aws-cliを入れる
入れます。Python 3とpipがあれば入ります。Cent OS 7なら、http://python.zombie-hunting-club.com/entry/2017/11/03/223832 の通りにやればできました。Ubuntu 19.0.4 Minimalならsudo apt install python3-pipで入りました。
pip3が入れば、mastodonユーザーで公式ドキュメントの通りに入れていきます。
pip3 install awscli --upgrade --user
それが終われば aws --version
してエラーにならないことを確認します。Ubuntuの場合、パス通ってないぞって言われたので、
export PATH=~/.local/bin
:$PATH しました。
mastodon(liveフォルダ)内の.env.productionを確認して、S3のシークレットキーとアクセスキーをメモします。AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYです。
それをメモしたら、 cd
とだけ実行してホームディレクトリに戻って([email protected]:~$みたいになるはず。lsしたらliveとかが大体の場合はある)、 mkdir .aws
と打って、クレデンシャルを編集します。→vim .aws/credentials
以下の通りに入れます。KEY_FROM_AWS_ACCESS_KEY_IDとKEY_FROM_AWS_SECRET_ACCESS_KEYは置き換えてください。
[default] aws_access_key_id=KEY_FROM_AWS_ACCESS_KEY_ID aws_secret_access_key=KEY_FROM_AWS_SECRET_ACCESS_KEY
バックアップスクリプトを書く
できたら保存して、liveフォルダに行って vim backup.sh
としてバックアップスクリプトを書きます。 バケットは非公開のものを作って(新しく作って公開設定をすべて飛ばせば非公開になります。)
バケット名は置き換えてください。 私はmedia.thedesk.topでした。
最初Mastodonのメディアと同じバケットにしてたけど、公開バケットに入れたら、この記事見るだけでデータベース全部吸い上げられるやんって大慌てで消しました。
今回はtar.xzで圧縮していますが、少し時間がかかるので気になるならtar…の行をbzip $FILEに変えて、次のS3のアップロードのところを$FILE.tar.xzから$FILE.bz2にしましょう。
FILE=backup/pgbuckup.`date +%Y%m%d_%H%M%S`.pgbump echo $FILE pg_dump --username=mastodon --no-owner mastodon_production > $FILE tar -Jcvf $FILE.tar.xz $FILE ~/.local/bin/aws s3 cp $FILE.tar.xz s3://バケット名/backup/ rm -f backup/*
sh backup.sh
と実行してうまくバックアップできているかをブラウザのAWSコンソールなどで確認します。
cronを設定する
mastodonユーザー内でcrontab -e
でもして、以下のように打ちましょう
0 8 * * * cd live; sh backup.sh
これだと毎日8時にバックアップされます。多分。サーバーの時刻がUTCなのかどうかなどもチェックして適当に書きましょう。バックアップの頻度は適当に調整してください。
S3内のバックアップを消すことはこのスクリプトではしません。(アップロード後のローカルのバックアップは消します。)大体の場合結構な容量になるので、定期的に消すようにしましょう。
Q:私のオブジェクトストレージはwasabiです。動きますか
A:知りません。