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

つい先日、FirefishのバックアップデータをS3に転送することができたので、備忘録として記事に残しておこうと思います。

(名目上はFirefishになってますが、Misskeyもユーザー名を変えればいけるはず)

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

目次

大まかな流れ

  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にログインし、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_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 /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時になるように設定)

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

参考サイト

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