Parallax Image

Cutls Code Archives


SNZ 2016

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 とだけ実行してホームディレクトリに戻って(mastodon@vultr:~$みたいになるはず。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:知りません。