つい先日、FirefishのバックアップデータをS3に転送することができたので、備忘録として記事に残しておこうと思います。
(名目上はFirefishになってますが、Misskeyもユーザー名を変えればいけるはず)
データベースバックアップについての話は以前書いた記事があるので、そちらを先に読むことを推奨します。

大まかな流れ
- S3バケット作成~ユーザー設定
- pipを使ってAWS CLIをインストール
- AWS CLIの設定
- bashスクリプトの作成
- cronの設定
詳細な手順
1. S3バケット作成~ユーザー設定
Mastodon の画像などメディアデータをAmazon S3に移行する(非Docker環境) – Takanory Blog記事の前半部分を参考にしつつ、S3の設定をします。
(記事が古くて若干UIが違いますが、ほとんどの流れは同じでした)
- バケット
- グループ
- ユーザー
この3つが設定できればOKです。
ちなみにバケットは非公開で使うので、バケットポリシーを設定する必要はありません。
ユーザーを作成したら、アクセスキーとシークレットキーをコピーします。
2.pipを使ってAWS CLIをインストール
VPSにログインし、calckey(もしくはmisskey・firefish)ユーザーに切り替えます。
Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール – AWS Command Line Interface記事にある「pipを使ってのインストール項目」を参照してコマンドを入力。
3.AWS CLIの設定
firefishユーザーのホームディレクトリに戻ります。
(firefish@aaa:~$)の~
の部分が~
だけになってればOKです。
ディレクトリー.aws
を作成、してVimで.aws/credentials
を編集します。
$ mkdir .aws
$ vi .aws/credentials
.aws/credentials
ファイルの編集画面になったら、下記の項目をペーストをします。
[default]
aws_access_key_id=KEY_FROM_AWS_ACCESS_KEY_ID
aws_secret_access_key=KEY_FROM_AWS_SECRET_ACCESS_KEY
この時、KEY_FROM_AWS_ACCESS_KEY_ID
とEY_FROM_AWS_SECRET_ACCESS_KEY
に手順1でコピーしたアクセスキーとシークレットキーを入力して保存します。
4.bashスクリプトの作成
次に、バックアップスクリプトを作成します。
私は/usr/local/bin
に保存・vi backup.sh
でファイルを作成しました。
cd /usr/local/bin
してからvi backup.sh
すればいけるはずです。
$ cd /usr/local/bin
$ vi backup.sh
Vimでbackup.shを開いたら、下記の項目を記入して保存をします。
#!/bin/bash
# 時刻取得
TIME=$(date +"%Y%m%d%H%M")
# バックアップ開始
su - postgres << BASH
echo "Backup start."
# バックアップディレクトリに移動
cd /tmp/backup
# バックアップファイル作成
pg_dumpall | gzip -c > firefish$TIME-backup.gz
# パーミッション・権限変更
exit
chmod 744 firefish$TIME-backup.gz
chown calckey:root firefish$TIME-backup.gz
BASH
# calckey or firefish or misskeyユーザーに変更
su - calckey << BASH
echo "Send backup file."
# S3に転送
~/.local/bin/aws s3 cp /tmp/backup/firefish$TIME-backup.gz s3://(バケット名)/backup/
echo "Backup complete."
BASH
tmp/backup
(前回のデータベースバックアップ記事とディレクトリーが違うので注意)に保存して転送します。
バケット名にはAWSで設定したバケット名を記入してください。
スクリプトが書けたら、パーミッションを755にします。
$ chmod 755 backup.sh
ここまでできたら、bashスクリプトを実行して動作確認を行います。
$ bash backup.sh
実際に動いてS3にバックアップデータが保存されたら次のステップに進みます。
4.cronを設定する
rootユーザーに切り替え、/etc/cron.d
に移動して、backup
ファイルを作成します。
$ exit
$ cd /etc/cron.d
$ vi backup
Vimでbackupファイルを開いたら、下記の情報を記入します。
SHELL=/bin/sh
MAILTO=""
00 11 * * * root sh /usr/local/bin/backup.sh
05 11 * * * root find /tmp/backup -name '*.gz' -mtime +14 -delete
backup.sh
を実行して、14日前のバックアップデータを削除します。
00 11
もしくは05 11
の部分はお好きなように変更してください(これはNY時間で夜中0時になるように設定)
これで時間通りに動いたら完成です、お疲れさまでした。
参考サイト
- Mastodon の画像などメディアデータをAmazon S3に移行する(非Docker環境) – Takanory Blog
- MisskeyのデータベースをCloudflare R2に保存しちゃおう
- Misskeyのデータベースをバックアップしよう【OCIオブジェクトストレージ編】 | aqz/tamaina
- S3にMastodonのデータベースをバックアップしてアップロードする | Cutls Code Archives
- Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール – AWS Command Line Interface
- シェルスクリプトファイルに実行権限を付与する意味は? – Neo’s World