MastodonのDBを外出ししてみたメモ


前提


  • mastodon prodcution guideに従った非docker構成

  • Ubuntu 18.04LTS


構成


  • もともとのmastodonサーバー(mastodonサーバーと呼ぶ)

  • 移行先postgresql DBサーバー(DBサーバーと呼ぶ)


やったことの前提

私は複数のmastodonインスタンスを運営しており、ひとつはほぼ負荷がないテスト用で、もう一つは本番稼働しているものです。これらのpostgresのDBを別のサーバーにまとめてみようと思い今回の作業を行いました。


手順


外出側のpostgresにユーザーとDBを作成

DBサーバーでの作業。

postgres ユーザーで実行する。

CREATE USER mastodon_user; # 複数インスタンスのDBを統合するならその分作る

alter role mastodon_user with password 'password'; # パスワード設定
create database mastodon_db with owner=mastodon_user;


外部接続を可能にするように設定

DBサーバーでの作業。

/etc/postgresql/10/main/pg_pba.conf を編集し、以下の内容を追加する。


/etc/postgresql/10/main/pg_pba.conf

# ↓固定 database     user           ip              ↓固定

host mastodon_db mastodon_user 192.168.10.0/24 md5

設定を反映させるためにリロード(restartでももちろんOK)

sudo systemctl reload postgresql


もとのDBをdumpする

ここから先は mastodon を停止して行う必要がある

Mastodonサーバーでの作業。

postgresユーザーで実行。

sudo su - postgres

pg_dump mastodon_production > dump.sql


ダンプをロード

Mastodonサーバーでの作業。

postgresユーザーで実行(だが、dump.sqlにアクセスできればどのユーザーでもよい)

psql --host=192.168.10.40 --username=mastodon_username < dump.sql

# --no-owner オプションを追加すれば次項のユーザーに関する警告をスキップできる(コメント参照)


注意点

接続が拒否されるのであれば、DBサーバー側のファイアウォールや、pg_hba.confの設定を疑う。

ERROR: role "mastodon" does not exist が表示されるが無視して良い。

alter で所有者を変更しようとしているが、もともとは mastodon ユーザーが所有していたのを、DB移行の際に mastodon_user に変更しているせい。

DB自体の所有者を変更してあるので問題はない。

mastodonユーザーがpostgresqlに存在してしまっている場合は問題になる。この場合は、dump.sqlを編集して(OWNERで検索すると良い)ユーザー名を書き換えるしかないと思われる。


Mastodon の設定ファイル修正

mastodonサーバーでの作業。

DBの準備が終わったので接続先をそちらに変更する。

mastodonユーザーで行う。

/home/mastodon/live/.env.productionの以下の部分を編集


/home/mastodon/live/.env.production

DB_HOST=192.168.10.40

DB_USER=mastodon_user
DB_NAME=mastodon_db
DB_PASS=mastodonpassword
DB_PORT=5432


動作確認

mastodonサーバーでの作業。

以下を実行。

# 適切なユーザーで実行。mastodonサーバーで動作しているPostgreSQLを停止

sudo systemctl stop postgresql
sudo systemctl disable postgresql

# mastodonユーザーで実行。

cd ~/live
~/live$ RAILS_ENV=production bundle exec rake db:collation
en_US.UTF-8 # これが表示されればOK!

以上


追記

2018/09/27 にこの手順でDBの移設が可能なことを確認した。