たくさんの自由帳

Misskey サーバーをお引越したメモ

投稿日 : | 0 日前

文字数(だいたい) : 2782

v10だからあんまり参考にならないかもしれない

環境

  • AWS Lightsail
  • CloudflareSSL化した
    • CloudflareSSL/TLS 暗号化モードフル
      • これでhttpsでアクセスできる
  • オブジェクトストレージはS3
    • VPSのストレージに書き込んでいる場合はそれも引き継ぐ必要があります。

Let's Encrypt + Certbotでも移行後に証明書再発行で良いはず...?(IPアドレスではなくドメインに対して払い出される?)

新しいマシンを用意

Ubuntu 22.04を用意しました。
TeraTermが使えない...取りあえずPowerShellに入ってる?sshを使うことにします。

鍵ファイルのパスとIPアドレスを直して叩けば使えるはず。

ssh -i '鍵ファイルのパス.pem' ubuntu@000.000.000.000

移行先を構築する

メモリを増やして、sudo apt updatesudo apt upgradeして、Misskeyのソースいれてビルドして、nginxして、、
ってん感じで、DNSの設定の前までやっておいてください。

https://takusan.negitoro.dev/posts/misskey_ohitorisama/#dns-の設定

MongoDB が入らない

mongodbを入れてる途中で...

sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

こんな感じに、失敗してしまいます...

The following packages have unmet dependencies:
 mongodb-org-mongos : Depends: libssl1.1 (>= 1.1.0) but it is not installable
 mongodb-org-server : Depends: libssl1.1 (>= 1.1.0) but it is not installable
 mongodb-org-shell : Depends: libssl1.1 (>= 1.1.0) but it is not installable
E: Unable to correct problems, you have held broken packages.

libssl1.1が必要なのですが、どうやらUbuntu 22.04からは同梱されなくなったみたいです。
MongoDBの最新版にすると治るそうですが、、、Misskeyのバックエンドいじるのこわい(というかDBが何もわからない)ので、一旦libsslを入れる方面でいきます。

https://stackoverflow.com/questions/73656873

sudo wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

amd版(IntelAMDCPU)なので、armとかの場合は読み替えてください
これでMongoDB入れられるはず

sudo apt-get install -y mongodb-org

移行先でやること(新規で立てる際との違い)

Misskeyのコンフィグ、nginxのコンフィグを元のサーバーからコピーしてきます。
コピーはVimのペーストモードが便利です(そのまま貼り付けると#でコメントアウトされたり、インデントされてしまう)

MongoDB の引き継ぎ

移行前サーバー

Misskeyを止めます

sudo systemctl stop misskey

次にルートユーザーでログインしたあと、ホームディレクトリ(~)にバックアップします

cd ~
mongodump -o "./dump"

つぎに、手元のWindowsマシンを使い、バックアップデータを一旦Windowsマシンへコピーします。
もしかしたら直接転送できるかも...(お互いのサーバーの鍵ファイルないので一旦経由することにした)

PowerShellを開いて、SCPコマンドを使います

scp -i '鍵ファイルのパス.pem' -r ubuntu@000.000.000.000:Linuxの保存先 Windowsの保存先

以下例

scp -i 'C:\Users\takusan23\.ssh\key.pem' -r ubuntu@000.000.000.000:~/dump C:\Users\takusan23\misskey_backup\

移行後サーバー

フォルダごと移行先のサーバーへアップロードします
またPowerShellを開いて、以下のコマンドを叩きます

scp -i '鍵ファイルのパス' -r Windowsの保存先 ubuntu@000.000.000.000:Linuxの保存先

以下例

scp -i 'C:\Users\takusan23\.ssh\key.pem' -r C:\Users\takusan23\misskey_backup\ ubuntu@18.176.65.230:~/dump

そしたら、リストア用コマンドを叩きます。
移行後サーバーにSSHで入って、以下のコマンドを叩きます。(間違えてパス深くなっちゃった...)

Misskeyが動いていない場合は一行目はいらないはず。

sudo systemctl stop misskey
mongorestore --drop ~/dump/dump/

-dropで既にあるデータを消した後、リストアをしてくれます。構築手順のsystemctlのところでmisskeyを起動してしまったので、おそらくデータベースが作られてしまっていると思います。

データが復元できたか見てみます。まず以下のコマンドを叩いて

mongo
show dbs;

データベース一覧が表示されますが、ここで容量が0GBでなければ成功なはず。

> show dbs;
admin    0.000GB
config   0.000GB
local    0.000GB
misskey  0.011GB

exitを叩くと抜けれます。

起動する

移行後サーバーで叩きます

sudo systemctl start misskey
sudo systemctl start nginx

DNS の設定を直す

移行先のサーバーへDNSのレコードを向けます。

動作確認

どうでしょう、アクセスできましたか???
一応新サーバーで見れているかの確認をするのに、移行後サーバーのnginxのアクセスログを見るという手があります。
まあする必要もないでしょうが。

cat /var/log/nginx/access.log

携帯回線からも見れました

Imgur

移行前の VPS をお片付けする

金ないのでさっさと止めます。

Imgur

以上です!!!!!!!!!

おわりに

今回はギリギリまで(DB引っ越し)まで移行前のサーバーを動かす方法で行きました。
が、多分データベース、画像とかのメディア(S3とかのオブジェクトストレージを使ってないなら)、コンフィグファイル(misskeynginx)を手元の Windows マシンとかにバックアップしておいて、
VPSを消す方法でも良いはずです。(最後まで残す方法だと、移行作業中は二台VPSを動かすことになるので、お一人様にそこまでのお金をかけられるか...)

そのほか

JavaScript heap out of memory

Linuxの場合は、npmコマンドの先頭に以下のコマンドを入れることで、メモリ割り当てを手動で調整できます。
単位はMBっぽい

NODE_OPTIONS="--max-old-space-size=2048"

以下例:

NODE_OPTIONS="--max-old-space-size=2048" NODE_ENV=production npm build