【Firefish/Misskey】バックアップしたデータベースをS3に転送する

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

データベースバックアップについての話は以前書いた記事があるので、そちらを先に読むことを推奨します。

目次

追記

2023/12/22

いくつかミスがあったので追加・修正しています。前の手順より簡略化されて手間は減っていますが、セキュリティーが緩くなっています。(バックアップフォルダーのパーミッション・rootユーザーで実行など)

そのため、このブログを参考にする際は、セキュリティー対策をしっかり行ってください。

2023/12/29

Cloudflare R2でできる方法がわかったので追記します。R2の方が安いのでそっちでやった方がよさげ。

大まかな流れ

  1. S3バケット作成~ユーザー設定
  2. pipを使ってAWS CLIをインストール
  3. AWS CLIの設定
  4. bashスクリプトの作成
  5. cronの設定

詳細な手順

1. S3バケット作成~ユーザー設定

Mastodon の画像などメディアデータをAmazon S3に移行する(非Docker環境) – Takanory Blog記事の前半部分を参考にしつつ、S3の設定をします。

(記事が古くて若干UIが違いますが、ほとんどの流れは同じでした)

  • バケット
  • グループ
  • ユーザー

この3つが設定できればOKです。

ちなみにバケットは非公開で使うので、バケットポリシーを設定する必要はありません。

ユーザーを作成したら、アクセスキーとシークレットキーをコピーします。

2.pipを使ってAWS CLIをインストール

VPSにログインし、rootユーザーでインストールします。

Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール – AWS Command Line Interface記事にある「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_IDEY_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 /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
$ vi backup

Vimでbackupファイルを開いたら、下記の情報を記入します。

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の部分はお好きなように変更してください。

これで時間通りに動いたら完成です、お疲れさまでした。

参考サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次