misskeyサーバを物理的に引っ越す手順
注意
本記事はあくまで個人の備忘録です。実際のmisskeyサーバの引っ越しは慎重に準備の上、ご自身の責任で行って下さい。
はじめに
クローズドmisskeyサーバ「こづか山荘」の管理人、小束弓月と申します。
misskeyサーバを他社VPSに乗り換えるとか、自宅サーバに引っ越しさせたりする時の手順です。
タイトルの書き方がふさわしいか不安ですが、misskeyはユーザ向けにアカウント移行(自分のアカウントを現在のインスタンスから別のインスタンスへ丸ごと引っ越す機能)が存在するので、それとは違うサーバ管理者向けの記事ということで、このように書きました。
とあるように、運用中のドメイン・ホスト名を使い回して新たにmisskeyサーバを立てるのは(ActivityPubの仕組み上)御法度です。
なので引っ越しの際はデータベースをバックアップして復元します。
やること
旧サーバから以下をコピーする
・データベースの中身
・ドライブの中身(オブジェクトストレージに保存している場合は不要)
・設定ファイル(misskey.yml・nginxのmisskey.conf)旧サーバを停止
運用中ドメイン/ホストのIPアドレスを変更
データをリストア・新サーバをビルド
新サーバをスタート
となります。以下に書くのは上記手順の具体的ステップです。
当然ですが旧サーバを停止して新サーバを動かすまでの間あなたのmisskeyサーバはインターネットから消失し、連合中の他のサーバにジョブキューがたまったりします。
事前にきちんとスケジュールを立てて準備し、必要に応じて周知しておきましょう。
前提
Ubuntu server 22.04.4
postgresql15.6
詳細設定は公式ドキュメント「Ubuntu版Misskeyインストール方法詳説」(https://misskey-hub.net/ja/docs/for-admin/install/guides/ubuntu-manual/)に準ずる
新サーバのOSをセットアップ
パッケージを最新にしておく。
タイムゾーン・ntpサーバなど旧サーバと合わせておく。
旧サーバでの手順
準備
全てのパッケージを最新にする(新サーバと合わせる)
misskeyのバージョンを新サーバと同じにする(面倒なら両方とも最新バージョンにアップデート)
移行前のmk1データベースの大きさを確認
$ sudo -u postgres psql
postgres=# SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
datname | pg_size_pretty
-----------+----------------
mk1 | xx GB
misskey・postgresqlサービスの停止
misskey・postgresqlの各サービスを停止する。
$ sudo systemctl stop misskey.service postgresql
データベースのフルコピー
データベースの破損を防ぐため、手順に入る前にpostgresqlサービスが停止していることを必ず確認する
postgresqlのデータベースはデフォルトで「/var/lib/postgresql/15/main」以下なので、tarで圧縮して単一ファイルにする。
$ sudo su - postgres
$ cd 15/
$ tar cvzf backup_postgresql.tar.gz main/
※misskeyのデータベースだけコピーしたい時はpg_dumpコマンドを使う。
ドライブの中身のコピー
オブジェクトストレージに保存している場合は不要
misskeyのドライブの中身はデフォルトで「/home/misskey/misskey/files」以下なので、tarで圧縮して単一ファイルにする
$ sudo su - misskey
$ cd misskey/
$ tar cvzf backup_mediafiles.tar.gz files/
設定ファイルのコピー
misskey設定ファイル(/home/misskey/misskey/.config/default.yml)
nginx設定ファイル(/etc/nginx/conf.d/misskey.conf)
新サーバへ転送
上記の圧縮ファイル2つと設定ファイル2つを、SCP転送(作業中のPCへ/新サーバへ直接)など、何らかの手段で新サーバへコピー。
DNS設定を変更する
ドメインのDNSに設定したサーバIPアドレスを、新サーバへ変更する。
新サーバでの手順
必要パッケージのセットアップ
公式ドキュメントの「Ubuntu版Misskeyインストール方法詳説」の「ユーザの作成」から「追加の設定とインストール」までを完了する。
※postgresのユーザ名・パスワード・データベース名は新旧合わせておく
postgresqlのリストア
サービス停止
$ sudo systemctl stop postgresql
データベースをリストア
「backup_postgresql.tar.gz」を「/var/lib/postgresql/15」ディレクトリにコピーする
作業ユーザで「backup_postgresql.tar.gz」の所有者をpostgresに変更しておく。
元あったmainディレクトリは削除しておく
解凍してパーミッションを設定する
$ sudo su - postgres
$ cd 15/
$ rm -rf main
$ tar xvzf backup_postgresql.tar.gz
$ chown postgres: main
$ chmod 700 main
$ exit
postgresqlをスタート
& sudo systemctl start postgresql
mk1データベースのサイズを確認する
$ sudo -u postgres psql
postgres=# SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
datname | pg_size_pretty
-----------+----------------
mk1 | xx GB
旧サーバで確認したサイズと合致するのを確認して、圧縮ファイルを削除する。
$ sudo su - postgres
$ cd 15/
$ rm backup_postgresql.tar.gz
$ exit
※pg_dumpでmisskeyのデータベースのみコピーしてきた場合は、上記と手順が異なる。
misskeyのインストール
公式ドキュメント「misskeyをインストール」を実行し、misskeyをインストール
misskeyを設定
公式ドキュメント「misskeyを設定する」で、旧サーバの設定ファイル(default.yml)をコピペ
nginxを設定
公式ドキュメント「nginxを設定」で、旧サーバの設定ファイル(misskey.conf)をコピペし、テスト・再起動する。
※新旧サーバとも、Let's Encryipt証明書を公式ドキュメントと同じ場所に保存したとする
意図しないトラブルを避けるため、新旧マシンで同じ設定ファイルを使い、バージョンも合わせる(または最新バージョンに統一する)
misskeyをビルド
公式ドキュメント「misskeyをビルド」を実行する
ドライブ(filesディレクトリ)をリストア
misskeyを起動する前、filesディレクトリは存在しない
「backup_mediafiles.tar.gz」をmisskeyディレクトリにコピーし解凍する
パーミッションを、旧サーバのパーミッションと同一に設定
(下記はあくまで例)バックアップファイルを削除する
$ sudo su - misskey
$ cd misskey/
$ tar xvzf backup_mediafiles.tar.gz
$ chown misskey:misskey files
$ chmod 755 files
$ chmod 600 files/*
$ chmod 644 files/thumbnail-*
$ chmod 644 files/webpublic-*
$ rm backup_mediafiles.tar.gz
misskeyを起動する
作業用ユーザに戻り、公式ドキュメント「misskeyを起動する」を実行。
$ pnpm run init
$ NODE_ENV=production pnpm run start
ブラウザでアクセスして、misskeyサーバが元通りに動いていたら成功。
あとはデーモンを設定したり、GUI設定項目を確認したり、旧サーバの店じまいをしたり
なお「引っ越し作業ついでに○○も設定変更しておこう」と新旧マシンで相違点を生んだ結果、そこにつまづいて痛い目を何度か見ました。
引っ越しで問題が発生した場合、相違点が一つでも少なければそれだけ切り分けが容易になります。misskeyのバージョンを合わせてパッケージを最新にしておくのを記事内でオススメするのも、そのためです。
設定変更は引っ越しを無事完了させてからにしましょう。
参考
ありがとうございました