diff --git a/content/post/かゆいところに手が届くインスタンス運用の初級テクニック集.md b/content/post/かゆいところに手が届くインスタンス運用の初級テクニック集.md index 8e8c6b4..d0ff81c 100644 --- a/content/post/かゆいところに手が届くインスタンス運用の初級テクニック集.md +++ b/content/post/かゆいところに手が届くインスタンス運用の初級テクニック集.md @@ -46,110 +46,84 @@ ssl_certificate_key /etc/ssl/private/あんたのドメイン名.key; 編集後、念のために`nginx -t`でエラーを確認して問題がなければ`systemctl restart nginx`でnginxを再起動する。Web UIに接続して証明書の有効性が確認できたら作業は完了だ。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +## データベースのバックアップをCloudflareに丸投げする +>**前提** +>・Docker環境でインスタンスを動かしている。 + +**■2023年11月28日改訂 +以前はバックアップツールにwranglerを採用していたが、転送容量に制限があることからrcloneを利用する形に改めた。** + + +誉れ高き丸投げシリーズその2。どんどん丸投げしていこう。我々はすでに巨人の肩に乗っているし、どうせ今さら降りることなどできない。Cloudflareのページで**R2 → 概要**と進んでバケットを作成する。バケットの名前はなんでも構わない。ついでに設定から自動削除をスケジュールすると容量の節約になる。 + +![](/img/201.png) + +次にrcloneを導入する。rcloneは各種オンラインストレージにファイルを転送するツールだ。Amazon S3に対応しているため、S3互換を持つCloudflare R2にも使用できる。 + +```zsh +$ apt install rclone +``` + +導入後、通常は`rclone config`で対話形式のセットアップウィザードを起動する方法が一般的だが、本稿では`root/.config/rclone/rclone.conf`に前もって設定ファイルをぶち込んでおく。このファイルは自動化の都合上、root以下に保存する必要がある。 + +```ini +[r2] +type = s3 +provider = Cloudflare +access_key_id = あんたのアクセスキー +secret_access_key = あんたのシークレットキー +endpoint = https://あんたのS3API.r2.cloudflarestorage.com +acl = private +``` + +アクセスキーおよびシークレットキーはR2のトップ画面右側の「R2 API トークンを管理」から発行する。発行直後の一度きりしか表示されないので紛失に注意すること。準備が整い次第、バックアップスクリプトの作成に移る。 + +```zsh +#!/bin/env bash +set -euo pipefail + +# Configurable variables +INSTANCE_DIR="/home/あんたのユーザ名" +BACKUP_DIR="/home/あんたのユーザ名/バックアップファイルの保存場所" +BACKUP_LIFETIME_DAYS=ローカルにファイルを保存したい日数 +DATE_FORMAT="%Y%m%d_%H-%M-%S" +DB_CONTAINER="mastodon-db-1" +DB_USER="mastodon_user" +DB_NAME="mastodon_db" +RCLONE_DESTINATION="r2:R2のバケット名" + +# Error handling +trap 'echo "😢 An error occurred. Exiting." && exit 1' ERR + +# Start backup +echo "🚀 Backup ready..." +cd "$INSTANCE_DIR" + +# Database backup +BACKUP_FILE="$BACKUP_DIR/$(date +$DATE_FORMAT).gz" +docker exec $DB_CONTAINER pg_dump -Fc -U $DB_USER $DB_NAME | gzip -c >"$BACKUP_FILE" +echo "✅ Success!" + +# Sync backup +echo "🔄 Syncing..." +find "$BACKUP_DIR" -mtime +$BACKUP_LIFETIME_DAYS -name "*.gz" -exec rm -f {} \; +rclone copy "$BACKUP_DIR" $RCLONE_DESTINATION + +echo "👍 Mastodone." +``` + +Mastodon以外のAP実装を運用している人は各自、気の利いたジョークで末尾の内容を置き換えなければならない。(義務) 上記のスクリプトをcronに登録するとバックアップ作業の自動化が達成できる。 + +```zsh +# rootで実行する。 +sudo crontab -u root -e + +# 毎日午前5時に指定された場所のスクリプトを実行する。別に好きな時間でいい。 +0 5 * * * sh /home/ユーザ/ファイル.sh +``` + +最高だね。面倒なことは全部機械にやらせよう。ただし、cronのやつは油断すると裏切るのでたまにCloudflareのバケットを見に行った方がいいかもしれない。 ## Mastodonのリモートメディアを確認して削除する >**前提**