人の記事を読んで真似したらうまくいかなくて改造した話
Wranglerをブラウザログインせずに使う
せっかちな人のために先に結論を書いておく
Misskey の DB のバックアップに興味がある方は一度飛ばしてください
- API Tokens から 「トークンを作成する」(En: Create Token)
- テンプレートは選択せず、下の「カスタムトークン」(Custom Token) を選ぶ
- こんな感じにする。権限はトークン生成後にも変更可 トークン名はなんでもいい。できたら[進む]→[作成]
- token が発行されるのでメモする。また、同時にテスト用のコマンド(curl)が表示されるので試してみる。良い感じだと↓みたいなjsonが帰ってくる
$ curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \ -H "Authorization: Bearer YOUR_TOKEN_HOGE" \ -H "Content-Type:application/json" {"result":{"id":"YOUR_ID_FUGA","status":"active"},"success":true,"errors":[],"messages":[{"code":10000,"message":"This API Token is valid and active","type":null}]}
ここまでできたら、あとはwranglerを使いたいディレクトリで以下をやるだけ。
export CLOUDFLARE_API_TOKEN="YOUR_TOKEN_HOGE"
これでok
必要であれば.envにでも書いて都度 source .env
すれば困らない
ref:
Misskey の自鯖のDBを Cloudflare R2 にバックアップしたい
先日の記事から苦節1日、自鯖はすっかり自立していてよちよち歩きを始めたところだ。
こいつ→ misskey.iorar.net
そろそろDBのバックアップを自動化する年頃だろうと思ったので、↓の記事を参考に構築しはじめた
この記事は完全にこれを下敷きにしている zenn.dev
Wrangler にCLIのみでログインしづらい問題
この記事の途中でこんな内容がある
移動先でnpx wrangler loginでログインします。
※GUIを求められるためCLI環境ではログインできませんでした。なんとかしてGUI環境でログインしてください。もしかしたらドキュメントを読み漁ったら別のやり方でできるかもしれません。
Wrangler は Cloudflare の用意してくれている Workers を構築するための補助ツールである(多分)。
ここらへんは詳しくはググってもらうとして、デプロイ用のソフトがGUI無しでログインできないということはないだろう。
と思ったのだが、確かに素朴にnpx wrangler login
したところ、しっかりブラウザが裏で動くのであった。あらら…
ここは
ssh user@server $ sudo su - secret_user -s /bin/bash
してようやくたどり着けるサーバーの奥地なので、当然GUIなんてないしXポートフォワーディングも効かない。
AuthToken を使って Wrangler の API を叩く
普通にWranglerの公式にAuthTokenを使った使い方が書いてあったので実施してみた
冒頭のタームを参照して操作すれば wrangler login
をせずにAPIを叩くことができる
MisskeyのDBのバックアップに使う場合、AuthTokenに以下の権限を登録しておく
Misskey DB の鯖をDBでバックアップする
さっき紹介した記事のシェルスクリプトはそのままでは動かないので、以下のように改造した。
#!/bin/bash # ref: https://zenn.dev/waya0125/articles/6192cc4784d5c4 # Get the date of when it was executed. Include date if necessary. # original→ $(date +\%Y\%m\%d_\%H-\%M-\%S) TIME=$(date +\%Y\%m\%d) # PLEASE PUT .env FILE in /home/misskey/misskey-auto-backup ########## .env example ########## # CF_MISSKEY_BU_BUCKET=BUCKET_NAME # CLOUDFLARE_API_TOKEN=TOKEN ################################## # Set your wrangler dir path MISSKEY_WRANGLER_PATH=/home/misskey/misskey-auto-backup # Run as postgres user su - postgres << BASH echo "Backup start." # Make backup to tmp directory cd /tmp # Require install to p7zip-full or 7-zip.org pg_dumpall | 7z a -si db.7z # Transfer permissions to allow misskey users to read and write chmod 744 db.7z chgrp misskey-db-backup db.7z echo "Backup create." BASH # Run as misskey user su - misskey -s /bin/bash << BASH echo "Send backup file." # Powered by CloudflareR2 and Cloudflare wrangler. cd $MISSKEY_WRANGLER_PATH pwd source .env # Date of transmission is added to the file name at the time of transmission # db.7z -> db_YYYYmmDD.7z npx wrangler r2 object put "\${CF_MISSKEY_BU_BUCKET}/db_$TIME.7z" --file=/tmp/db.7z echo "Backup complete." BASH # Delete send db if you want to reduce capacity # Normaly, this file is overwrittten with newer one # su - postgres << BASH # rm /tmp/db.7z # BASH
さらに、スクリプト実行前に以下をの準備をする。
sudo useradd -G misskey-db-backup misskey sudo useradd -G misskey-db-backup postgres
通常、misskey ユーザーはrootグループにいないので、postgresとファイルを共有するために共有のグループを作っておく。
面倒ならchmod 777
で解決できるが、元記事の方はそれを嫌っていたので尊重
sudo su - misskey -s /bin/bash cd /home/misskey/misskey-auto-backup echo \ CF_MISSKEY_BU_BUCKET=BUCKET_NAME \ CLOUDFLARE_API_TOKEN=TOKEN > .env
BUCKET_NAME は作ったR2のバケットの名前(例:misskey-db-backup
)
TOKEN にはCloudflareで作ったトークンを入れる
cronで自動化する
このスクリプトはルート権限が必要なのでcrontabも同様に設定してやる必要がある。
sudo crontab -e
でエディタが開くので、nanoを選択して
0 0 * * * /bin/bash /path/to/db-backup.sh
と追記してやればok。詳しくはググってほしいが、上記だと毎日9:00AMにバックアップが実行される
追記
翌朝、cronが動かぬ姿となって発見された
なんと、cronがJSTに従って動いていたのである。ちなみに $CRON_TZ は未定義だった。環境によってはそういうこともあるのか..
不安な場合は1分後に仕掛けて、コマンド部分を
/bin/bash /path/to/db-backup.sh >> /var/log/misskey-db-backup.log
として実験しよう
/path/to/db-backup.sh
は上記のシェルスクリプトを置いたパスにすること