ななめも

メモ書き的なブログ的なメモ的なブログ

Mastodonの~/liveを飛ばした時の復旧

Mastodonに強い人に会って話題に出したので復旧した時の手順を書いておく。
記憶を元に書いてるので合ってるかわからないけどそもそもこんな状態が稀だと思う。
Non Docker前提

飛ばすとどうなるのか

動かない。だって本体がないんだもの。

慌てない

ここで絶望して「もうだめだ...DBを飛ばして0からやりなおそう...」とか考えてはいけない。
まだDBは生きてるし設定ファイルもある。

とりあえずソースを戻す

MastodonLGPLなので、カスタムしてる場合は自分のリポジトリにソースがあるし、そうじゃないなら普通に公式にソースがあります。
(まさか自分のサーバーにzipで置いてるわけないよね?)

とりあえずそれをgit clone URLするなりなんなりして持ってくる。
私の場合はlive/でrm -rf *したのでgit checkout .で戻ってきた。

アップデートの要領で動作するようにする

cd ~/live
# 任意のバージョン
git checkout v1.4.7 
# ライブラリを復元
bundle install --deployment --without development test
yarn install --pure-lockfile
# どっかから.env.productionを持ってくる
cp ~/backup/2018/07/30/.env.production .
# 一応migrateしてprecompile
env RAILS_ENV=production bundle exec rails db:migrate
env RAILS_ENV=production bundle exec rails assets:precompile
# 再起。
systemctl restart mastodon-web
systemctl restart mastodon-sidekiq
systemctl restart mastodon-streaming

これでとりあえず動く(はず)。

画像をできるだけ復元

動いてもそこは画像がない虚無の世界です。
なので画像を復元します。

アイコン

まずローカルのアイコンはどうしようもないので、ローカルの人達に謝罪してアイコンを再設定してもらいましょう。
ユーザーが上げた画像はもう戻ってきません。これも同時に謝罪しましょう。

そしてリモートはリモートの鯖に画像があるのでとりあえず
env RAILS_ENV=production bundle exec rails mastodon:media:redownload_avatars
を叩きましょう。(そもそも本来の用途じゃないらしいのであまり効果は期待できない。)

それでも取得できない場合は、モデレーションのアカウントからアバターの更新を叩くと完全に再取得されます。(といっても全部叩くことになるとDBを飛ばしたくなる。)

カスタム絵文字

これはローカルのものも比較的安易に復元できます。

  1. まず自分の鯖のカスタム絵文字の一覧をどこかにメモしておく。この時自分の鯖の絵文字がコピーされている鯖もメモする。 f:id:Non0920:20180807210318p:plain

  2. カスタム絵文字をローカル、リモート見境なく全部消す。

  3. 自分の鯖のカスタム絵文字をコピーした鯖に行き、自分の鯖の自分のアカウント宛てにカスタム絵文字をDMで送る。
    f:id:Non0920:20180807210706p:plain

  4. 自鯖でそれをコピーする。コピーされてなかったものはがんばって復旧する。

他鯖の絵文字は時が復旧してくれます。(全部削除したので勝手に取得される。)

その後

私の鯖は、その後は普通に動作しています。
飛ばした場合に楽に復旧できないかMastodonに強い人に聞いたら「できる限り全部バックアップして」だそうです。

なのでバックアップを大事にして鯖運営しようね。