misskey v13への道
自分が運用しているmisskeyをv12からv13にアップデートするまで大変だったので、その時のメモ。
経緯
v13からnodeの必須バージョンが18になった。
しかし、自分が動かしている鯖のOSはCentOS7で、EOLの関係でnode-v18はCentOS7では動かせない。
困った。
ちなみにPostgreSQLのバージョンも15以上を指定しているが12でも問題なく動いています。(v13.11.1現在)
15にしたいがCloudSQLだとまだ14までしかない……
アップデートの前にDBの容量を軽くしたい
v13に上げる前にリレーからPostされている投稿のデータが2年半分くらい溜まっていたので、いろいろ容量を減らしたい。
ってか過去のリレーの投稿とかいらない。
misskeyはmastodonと違って画像をキャッシュしない設定があるが、少し前まで普通にクラウドストレージ(GCS)にアップロードしていたので300GiBぐらい溜まってた。
![]() |
画像を消すAPIはあるがコンソールから叩いても反応しない(多分画像が多すぎる)ので、とりあえず、あまり考えずにGCS上のファイルは絵文字とサムネを除いてgsutil rmで消し飛ばした。
あと、drive_fileテーブルも100万レコードほどあったので自分とフォロイー以外のレコードを削除。
グローバルで流れてくるアカウントのアイコンがいっぱい死んだけど、それ以外は特に影響なし。
次に、noteテーブルのレコード数をみると1100万レコードほどあったので負荷対策のためにも消したい。
DBの鯖スペックが弱いのとNOT INを使ったせいか数十万レコード消すのにも数時間かかる。
最初は一ヶ月分ずつちょびちょび消してたが、一旦misskeyを止めて瞬間的に鯖スペックを増強してクエリを流したら10倍ぐらい速くなったので、そこで一気に消しきってついでにvacuum fullもきめる。
最終的に数十万レコードまで減らした。
この作業の時はDBにつないで直接クエリを流してたけど、これから先消す時用にscriptを書いたのでよかったら自己責任でどうぞ。(mastodonにおけるtootctl status removeみたいなことがしたかった)
CentOS Stream9へアップグレードチャレンジ
node-v18を入れるために、まずはCentOSの最新バージョンであるCentOS Stream9へアップグレードしようとした。
CentOS7→CentOS8→CentOS Stream8→CentOS Stream9の順にアップグレードしていけばいいらしい。
しかし、CentOS8にアップグレードすることまでには成功したものの、GCE特有のモジュールが消失しており、そもそも接続できなくなった。
シリアルコンソールも有効にしていなかったので完全に詰み。
まぁ、ディスクのスナップショットから別の鯖として起ち上げて検証してたので無問題なんですが。
なんかもっと頑張ればできそうな気もしなくはなかったけど、とてもめんどくさそうなので別のディストリビューションで鯖を一から立てることに。
Ubuntu 22.04.2で新規鯖を立てる
yumがaptになったのとhttpdがapache2(apacheはこのブログを動かすために使っている)になったこと以外はあまり変わらない。
misskeyに必要なモジュールをインストールしていく。
nodeは普通にapt installしようとするとv12が入ってしまうので
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
でv18のリポジトリを指定してからインストールする。
あと、yarn(pnpm)がcorepackなるものに紐付いていることを知る。
Let’s Encryptの移管
HTTPS・WSS通信に使用する証明書を旧鯖(CentOS7)から新鯖(Ubuntu22.04.2)へ引っ越し。
結論を書くと/etc/letsencryptをパーミッションごと圧縮保存して新鯖の同じ場所に展開すればOK。
certbotの挙動も同じ。
もしnginxやapacheのディレクトリの設定が変わったのなら/etc/letsencrypt/renewal/*.confの中の情報を書き換えるぐらい。
misskey v13へ
まずは旧鯖で動いているバージョン(12.x.x)で新鯖のmisskeyをビルドする。
新鯖のmisskeyを動かしたらCloudDNSのAレコードのIPアドレスを旧鯖から新鯖に更新。
すぐに新しい方に切り替わる。
切り替え後、挙動に問題がないことを確認しv13へアップデート。
完。
ちなみに、このブログもCentOSからUbuntuに引っ越ししています。