> [!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)