> [!failure] > aws-cli がVer2・Ubuntu24になったため、動かなくなりました。 > 現在修正中…… MastodonとMisskeyのデータベースをS3に転送して、サーバーの不具合に対応するメモ。 > [!warning] > 前の手順より簡略化されて手間は減っていますが、セキュリティーが緩くなっています。(バックアップフォルダーのパーミッション・rootユーザーで実行など) > > そのため、このブログを参考にする際は、セキュリティー対策をしっかり行ってください。 ## 大まかな流れ 1. S3バケット作成~ユーザー設定 2. pipを使ってAWS CLIをインストール 3. AWS CLIの設定 4. bashスクリプトの作成 5. cronの設定 ## 詳細な手順 ### 1. S3バケット作成~ユーザー設定 [Mastodon の画像などメディアデータをAmazon S3に移行する(非Docker環境) - Takanory Blog](https://takanory.hatenablog.jp/entry/2017/05/10/070000)記事の前半部分を参考にしつつ、S3の設定をします。(記事が古くて若干UIが違いますが、ほとんどの流れは同じでした) - バケット - グループ - ユーザー この3つが設定できればOKです。ちなみにバケットは非公開で使うので、バケットポリシーを設定する必要はありません。 ユーザーを作成したら、アクセスキーとシークレットキーをコピーします。 ### 2.pipを使ってAWS CLIをインストール VPSにログイン、rootユーザーでpipとAWS CLIをインストールします。 [Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール - AWS Command Line Interface](https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/install-linux.html#install-linux-pip)記事にある「pipを使ってのインストール項目」を参照してコマンドを入力。 ### 3.AWS CLIの設定 ホームディレクトリに戻っていることを確認、(root@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 $ nano backup.sh ``` Nanoで`backup.sh`を開いたら、下記の項目を記入して保存をします。 ``` sh #!/bin/bash # 時刻取得 TIME=$(date +"%Y%m%d%H%M") # バックアップ開始 su - postgres << BASH echo "Backup start." # バックアップディレクトリに移動 cd /var/backup # バックアップファイル作成 pg_dumpall | gzip -c > firefish$TIME-backup.gz # パーミッション・権限変更 exit chmod 744 firefish$TIME-backup.gz BASH # rootユーザーに変更 su - root << BASH echo "Send backup file." # S3に転送 ~/.local/bin/aws s3 cp /var/backup/firefish$TIME-backup.gz s3://(バケット名)/backup/ echo "Backup complete." BASH ``` 以前ブログ記事で設定した`var/backup`に保存して転送します。(パーミッションを777にしてあるので注意)バケット名にはAWSで設定したバケット名を記入してください。 スクリプトが書けたら、パーミッションを755にします。 ``` $ chmod 755 backup.sh ``` ここまでできたら、bashスクリプトを実行して動作確認を行います。 ``` $ bash backup.sh ``` 実際に動いてS3にバックアップデーターが保存されたら次のステップに進みます。 ## 4.cronを設定する rootユーザーに切り替え、`/etc/cron.d`に移動して、`backup`ファイルを作成します。 ``` $ exit $ cd /etc/cron.d $ nano backup ``` Nanoでbackupファイルを開いたら、下記の情報を記入します。 ``` cron SHELL=/bin/sh MAILTO="" 00 02 * * * root sh /usr/local/bin/backup.sh 05 02 * * * root find /var/backup -name '*.gz' -mtime +14 -delete ``` `backup.sh`を実行して、14日前のバックアップデーターを削除します。`00 02`もしくは`05 02`の部分はお好きなように変更してください。 これで時間通りに動いたら完成です、お疲れさまでした。 ## 関連記事 - [[Mastodon・Misskeyのデータベースをバックアップする]] - [[Mastodon・MisskeyのデータベースをR2にバックアップする]] - [[Mastodon・Misskeyのデータベースをリストアする]] ## 参考サイト - [Mastodon の画像などメディアデータをAmazon S3に移行する(非Docker環境) - Takanory Blog](https://takanory.hatenablog.jp/entry/2017/05/10/070000) - [MisskeyのデータベースをCloudflare R2に保存しちゃおう](https://zenn.dev/waya0125/articles/6192cc4784d5c4) - [Misskeyのデータベースをバックアップしよう【OCIオブジェクトストレージ編】 | aqz/tamaina](https://hide.ac/articles/E2Ea3cauk) - [S3にMastodonのデータベースをバックアップしてアップロードする | Cutls Code Archives](https://code.cutls.com/s3-backup/) - [Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール - AWS Command Line Interface](https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/install-linux.html#install-linux-pip) - [シェルスクリプトファイルに実行権限を付与する意味は? - Neo's World](https://neos21.net/blog/2020/09/17-02.html)