MastodonのDBを外出ししてみたメモ
前提
- Mastodon prodcution guide に従った非 docker 構成
- Ubuntu 18.04LTS
構成
- もともとの Mastodon サーバー(Mastodon サーバーと呼ぶ)
- 移行先 PostgreSQL DB サーバー(DB サーバーと呼ぶ)
やったことの前提
私は複数の Mastodon インスタンスを運営しており、ひとつはほぼ負荷がないテスト用で、もう一つは本番稼働しているものです。これらの PostgreSQL の DB を別のサーバー(2 つのインスタンスで共有)にまとめてみようと思い今回の作業を行いました。
手順
本作業は、Mastodon のインスタンスを停止して行う必要がある。
外出側の PostgreSQL にユーザーと DB を作成
DB サーバーでの作業。
postgres ユーザーで実行する。
1 | CREATE USER mastodon_user; # 複数インスタンスのDBを統合するならその分作る |
外部接続を可能にするように設定
DB サーバーでの作業。
/etc/postgresql/10/main/pg_pba.conf を編集し、以下の内容を追加する。
1 | # ↓固定 database user ip ↓固定 |
設定を反映させるためにリロード(restart でも OK)
1 | sudo systemctl reload postgresql |
もとの DB を dump する
ここから先は mastodon を停止して行う必要があります
Mastodon サーバーでの作業。
postgres ユーザーで実行。
1 | sudo su - postgres |
ダンプをロード
Mastodon サーバーでの作業。
postgres ユーザーで実行(だが、dump.sql にアクセスできればどのユーザーでもよい)
1 | psql --host=192.168.10.40 --username=mastodon_username < dump.sql |
注意点
接続が拒否されるのであれば、DB サーバー側のファイアウォール(ポート 5432)や、pg_hba.confの設定を疑う。
ERROR: role "mastodon" does not exist が表示されるが無視して良い。
alter で所有者を変更しようとしているが、もともとは mastodon ユーザーが所有していたのを、DB 移行の際に mastodon_user に変更しているせい。
DB 自体の所有者を変更してあるので動作上問題はない(owner ならその DB とその中身に対して全権限がある)
しかし、mastodonユーザーが、移行先の postgresql に存在してしまっている場合は問題になる。
この場合は、dump.sqlを編集して(OWNER で検索して置換すると良い)ユーザー名を書き換えるしかないと思われる。
※ 私はこれに該当したのでdump.sqlを書き換えました。それなりに大きなサイズになるはずなので可能ならsedを使うなりした方がいいかもしれません。VSCode で頑張って置換しましたが動作がもっさりして辛かったです。
Mastodon の設定ファイル修正
mastodon サーバーでの作業。
DB の準備が終わったので接続先をそちらに変更する。
mastodon ユーザーで行う。
/home/mastodon/live/.env.production の以下の部分を編集
1 | DB_HOST=192.168.10.40 |
動作確認
ここで、mastodon を立ち上げて、Web からアクセスできることを確認する。
一度テストでトゥートしたり、お気に入りをつけたり軽く動かしてみるとよい。
mastodon サーバー上で動作している postgresql を停止
ここまでで、DB サーバーの移行は完了したので、mastodon サーバーで動作している postgresql が
不要になったので停止する。
mastodon サーバーでの作業。
以下を実行。
1 | <code class="language-bash"># sudo可能なユーザーで実行。mastodonサーバーで動作しているPostgreSQLを停止 |
1 | # mastodonユーザーで実行。 |
ここには記述しないが、この時点で PostgreSQL のデータファイルも削除することもできる。
以上
変更履歴
2018/09/27 この手順で DB の移設が可能なことを確認した。
2019/08/15 誤記修正、体裁修正