Skip to content

TearDownInstanceOnHeroku

Daigo 3 Dango edited this page May 9, 2017 · 8 revisions

何らかの事情でMastodonインスタンスの運用をやめる場合には、インスタンスに蓄積されたトゥートやアカウントの情報を取り出して保管することもできます。

この記事は書きかけです

準備

インスタンスは別のホストに移動させて、同じドメインで運用を続ける場合には、DNSのレコードのTTLを小さくしておき、移動後にDNSレコードの更新内容が早く伝わるようにしておくとよいかもしれません。

移動先のインスタンスも仮のデータベースで動作確認しておくと良いかもしれません。

リクエストの受付の停止

下記のコマンドでリクエストがインスタンスに届かないようにします。

heroku maintenance:on -a $APP_NAME

DNSの更新

  • 別のホストに移す場合、この段階で新しいインスタンスにDNSレコードを向けられるだろうか

メディアファイルの削除

メディアファイルを保管しておく場合には、下記のコマンドでトゥートに関連付けられていないファイルを削除することによって容量を節約できるかもしれません。

heroku run rake mastodon:media:clear

リモートへの購読停止依頼

バックグラウンドのタスクの停止を待つ

下記の様なコマンドを実行してアプリケーションログを観察します。

heroku logs -t -a $APP_NAME

下記のようなSidekiqからのログが追加されなくなるまで待ちます。

2017-04-29T22:02:35.388915+00:00 app[web.1]: 17 TID-ovde969jk ProcessingWorker JID-f40380cbd9556aebbbfcd29e INFO: start
2017-04-29T22:02:35.395322+00:00 app[web.1]: 17 TID-ovdegppuw RemoteProfileUpdateWorker JID-e25247348cb93ce5921843a0 INFO: start
2017-04-29T22:02:35.396745+00:00 app[web.1]: 17 TID-ovde969jk ProcessingWorker JID-f40380cbd9556aebbbfcd29e INFO: done: 0.008 sec
2017-04-29T22:02:35.413290+00:00 app[web.1]: 17 TID-ovdegppuw RemoteProfileUpdateWorker JID-e25247348cb93ce5921843a0 INFO: done: 0.018 sec
  • heroku redis:cli -a $APP_NAMEで残りのキューの数がわかるかな?

データベースのバックアップ

これでデータベースの内容に矛盾がなくなったはずです。必要なら、データベースの内容を手元に取得しておきます。

heroku pg:backups:capture -a $APP_NAME
heroku pg:backups:download -a $APP_NAME

こうして取得したダンプファイルは下記の様なコマンドでPostgreSQLにインポートできます。

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

後片付け

今後Mastdonインスタンスとして運用する可能性がまったくなければ、アプリケーションを廃棄してしまうのが手軽です。下記のコマンドでadd-onもまとめて廃棄できます。

heroku apps:destroy -a $APP_NAME

将来復活させる可能性がある場合には、費用がかからないようにして保管しておくのが良さそうです。Dynoは0にスケールダウンすることで費用がかからなくなります。この作業をした月の分は、dynoが稼働していた時間に比例して費用がかかります。

heroku ps:scale web=0 worker=0 -a $APP_NAME

Dynoが稼働していなくても有料のadd-onの費用は発生します。とりあえずは廃棄して、復活させる時に再度生成する必要があります。Dynoと同様、add-onを廃棄した月には、廃棄するまでの時間に比例して費用がかかります。

heroku add-ons:destroy heroku-postgres:hobby-basic -a $APP_NAME

など。下記のコマンドで、有料のadd-onが残っていないか、Price欄を確認してみてください。

heroku add-ons -a $APP_NAME

必要ならS3等に保管してあるメディアファイルのバックアップや削除をします。