どんなもんか動かしてみるくらいなら手元のマシンに Docker 立てればいいのだけど、一応マイホーム🏡として使うべく Misskey お一人鯖を立ててみたのでそのメモ。きれいにまとめてはいないです。
意外とインターネット上にはまだ情報が少なくて、細かいノウハウは先に鯖缶(サーバー管理者)をやってる先輩に聞くとか、真面目にソースコードなどを読むとかになる状況。まぁそのくらいが楽しかったりはする。
一部訂正(3/12): インターネット上に Misskey 構築の情報はたくさんある。探し方悪いだけだった(苦笑)ただ、この記事もそうだけど、特定の IaaS に依存してたり Misskey のバージョンが古かったりしている。最近構築してる人が増えてるので知見も増えてると思う。
ちなみに自分がお邪魔している Misskey サーバ「みすてむ」には「Misskey サーバを立ててみよう」なチャンネルもあって、鯖立てしてみたい/しているメンバー同士で情報交換したり、みすてむの鯖缶さんもコメントくれたりで大変助かる。
前置きはこのくらいにして、いまの自分のお一人鯖について記録しておく。
一応、自分は Linux サーバ構築の基礎と apt, systemctl の利用、nginx の利用の基礎知識くらいはある者です。
設定やセキュリティについて甘いところがある可能性は否めないので、もしヤバい設定とかが見え隠れしていたら教えていただけると嬉しいです。
参考記事まとめ
- Misskey構築の手引き | Misskey Hub
- Ubuntu 版 Misskey インストール方法詳説 | Misskey Hub
- Misskey サーバーを建てるならこれを検討しないと。 | ふうせん🎈 FU-SEN
- Misskeyインスタンスで最初に設定するべきインスタンス設定とその他設定の説明 | aqz/tamaina
- Squidプロキシを設定してMisskeyを守る | aqz/tamaina
- 追記(3/12): Misskeyのサーバを設置する(v11系) - noellabo's tech blog
- 拝見しながらオブジェクトストレージを Proxy 通して使うように設定しました
- 加えて SendGrid の無料プランでメール(SMTP)サーバの設定も行いました
- misskey/CHANGELOG.md at develop · misskey-dev/misskey
サーバスペックなど
クラウドホスティングサービスを利用、一番大きな Misskey サーバ "misskey.io" の管理人の村上さんがおすすめの Vultr を選んでみた。
自分としては、理由はそのくらいで、AWS 以外のクラウドホスティングを触ってみたかった感じ。 曰く、日本リージョン(東京・大阪)があって、Managed Database に PostgreSQL v15(2023/03/09 時点)が選べるのが良い。
もし Vultr を試してみたいひとがいたら、$100 のクレジットが付く以下のフレンド紹介コードをどうぞ。私にも $35 のバックがあります。コードの有効期限があるようなので(いつまでかは不明)ご注意ください。
App サーバ
$18.00 / mo ※料金テーブル
Vultr Non-Optimazed Computing Cloud(Shared vCPU)
High Performance (Intel High Performance)
Spec: 2 vCPU / 2 GB RAM / 60 GB NVMe
Region: Tokyo
OS: Ubuntu 22.10 x64
Add Auto Backups: ON (Option, $2.40/mo)
Additional Features: Enable IPv6 のみ
- CPU に(AMD ではなく)Intel を選択したのはとくにこだわりとかではなく、自分が設定したときに Intel じゃないとインスタンスの空き?がなくて欲しい Spec & OS のインスタンスが立てられなかったから
- いまはそんなこと無いっぽいので気の所為だったのかもしれない…
- スペックは最初
1 vCPU / 2 GB RAM / 50 GB NVMe
を選択していたが、立ち上げてからずっと CPU 使用率が 100% に張り付いていたので増やしてみた- Vultr はスペックアップは管理画面からかんたんにできる(不通の時間は数分発生する)
- 2 vCPU に変更したら CPU 使用率ほぼ 0% になったけど、もしかしたら multi core にしたことは関係なく、たんにサービスの再起動をしたら改善した可能性もあって謎
- お一人の場合べつに single core のままでも良かったのかもしれない
- Auto Backup はオプションでサーバスペックによって価格が変わる
- ただこの値段ならとりあえず ON にしておけばいっかって感じで使っている
- Ubuntu は Misskey のサーバ構築手順に則ったもので、こちらもこだわりはない
- ただ、なんとなく指定バージョンよりも新しいバージョンを選んでいる
- 後々アップデートするの面倒だし…という無精の気持ち
- いまのところ問題なく動いているのでヨシ!
- 後述するとおり DB はマネージドデータベースを利用しているが、In-Memory DB(Redis)はインスタンス内に立てるのでメモリはそこそこ必要
- お一人じゃない場合の最低スペックは 4 GB RAM と思われる
- お一人鯖では 2 GB RAM でいまのところ問題なく動作しているが、メモリ使用率は再起動直後を除いて常に 80〜90 %を推移している
- Misskey の In-Memory DB はリモートサーバへの Inbox / Deliver キューの管理に利用されているだけなので、通常はそんなに高いスペックは要求されないらしい(4 GB RAM が要らないとは言ってない)
ちなみに io 鯖は VPS ではなくベアメタルサーバを借りているそうです。つよい。
データベースサーバ
$90.00 / mo ※料金テーブル
Vultr Optimized Cloud Compute (General Purpose)
PostgreSQL v15
Spec: 1 vCPU / 4 GB RAM / 30 GiB
Region: Tokyo
Replica Nodes: 0
- PostgreSQL v15 は Misskey の必須要件
- もしかして "Non-Optimazed" Cloud Compute でよかったんちゃう?って後で思った
- そしたら最低
1 vCPU / 2 GB RAM / 32 GiB
(Replica 0) で $18.00 / mo です。安い!
- そしたら最低
- Misskey は現時点では DB への読み書きがめちゃくちゃ多いし重いらしい
- ユーザの多いサーバでは Read Replica を活用したほうがいいらしい
- お一人鯖ではいまのところ無くてもなんとかなってそう。安全性という意味では追加しておきたいところだけど、お値段が倍になるので…🫠
- いちおう上記のスペックでお一人鯖には充分と感じている
- まだあんまり DB dump とか DB の中身を眺めるとかしてないのであった…
オブジェクトストレージ(S3 互換)
$5.00 / mo ※料金テーブル
Vultr Object Strage
1 TB Storage / 1 TB Bandwidth
Region: Singapore
- Vultr のオブジェクトストレージは日本リージョンが無いので、とりあえず近いところを選択
- CDN を利用するのでまぁいっかって感じ
- 1 TB までは $5.00 / mo 定額なので場合によっては割高
- というかお一人の場合この利用量だと AWS S3 をそのまま使ったほうが安いかも
その他
Domain, DNS: Cloudflare (.life), $23.18 / year
CDN: Cloudflare free
- せっかくなので新しいドメインを取得した
@tmd45@hoge.tmd45.jp
って ID が連続するのが気持ち悪くて…- ドメインの検討でお世話になった記事: Misskey サーバーを建てるならこれを検討しないと。 | ふうせん🎈 FU-SEN
- ドメイン費用以外は無料の Cloudflare プラン
- 無料でこんなに使えていいんですか?!って感じ
- 引っかかった点💥
Misskey の公式構築手順どおり構築した場合、nginx で SSL のリライト設定を行うが、Cloudflare 側で以下の設定が「フレキシブル」になっているとブラウザ側で SSL リダイレクトの無限ループが発生してエラーになる。「フレキシブル」以外を選択すること
セットアップ
基本的に Misskey 公式ドキュメント Misskey Hub の『Ubuntu 版 Misskey インストール方法詳説』のとおりにセットアップしてバッチリ動いている。
コンテナやシェルスクリプトなどは利用せず、手順通りポチ...ポチ…と丹精込めて構築した。 いろいろ確認しながらやってたので、Vultr の管理画面を触っていた時間も含めて 6〜8 時間くらいは作業していたかも。Misskey 自体のビルドやマイグレーションは数分で終わるものなので安心してほしい。
サーバを立てようと思うなら公式ドキュメントくらいは全部読もう(それはそう)。
ちなみに全くどうでもいいが、手順のなかで nano を使うように案内されている箇所はすべて vim で作業しました。いいだろそのくらい!
公式手順以外
実は今回 Misskey サーバを構築するのは2回目。一ヶ月前、最初は Mastodon サーバを立てようと思っていたが、そんなときに Misskey を知って、既存のサーバにアカウントを作る前にサーバを立てるという無謀をした。
環境は AWS の t2.micro に全部乗せ。にも関わらず、無謀に無謀を重ねて勢いで連合リレーに接続した結果、サーバは死にました。南無。
それから一ヶ月、いくつかの Misskey サーバにお邪魔してみて、Misskey というものが(前よりは)わかったところでお一人鯖構築、再チャレンジとした。
で、もともと Mastodon サーバを立てようと思って見ていた記事が結構ありがたかった。いまのところ Misskey よりも Mastodon の "サーバ立ててみた" 記事のほうが多い様子。困ったときはそっちも探してみるといいかもしれない。
- Preparing your machine - Mastodon documentation
- Mastodon の公式手順書だが、サーバを立てたときにやっておいたほうがよい初期設定(セキュリティ関係)が案内されていたので参考にした
- Vultr のインスタンスは、初期状態では root の パスワードログインが有効になっている ので、これを無効化して SSH ログインのみを許可したり fail2ban を入れるのはお勧めしたい
- AWS環境で、Mastodonを構築する - Qiita
- 低スペックサーバで構築する場合は、ビルド時にメモリが足りなくなるので swap 領域を予め確保しておこう
- ちなみにその手順が必要だったのは t2.micro 利用時で、上記の Vultr 構成の場合は自分で swap 領域を増やさなくても大丈夫
- ただ知ってるとビルドエラーのときとかに慌てなくて済む
- ついでに豆?知識
- これも t2.micro くらいの低スペックインスタンスの場合だが、Node.js でのビルド時にメモリ不足によるエラーが出ることがある
- その場合は、コマンドにメモリ確保(ヒープ領域)の指定をしてやるといい
NODE_OPTIONS="--max-old-space-size=2048"
- 詳しくは↑でググってください
- 自分は昔とった杵柄でなんとなく、メモリ不足系のエラーメッセージを見て、ヒープ領域確保したらええかというのが頭の片隅にあったのでググって対応しました
- どんな言語でもあるあるなのでヒープ領域確保は頭の片隅に覚えておくといいと思う
Misskey の設定
起動前に default.yml
について、ハマったところ。
手順記事も リポジトリの .config/example.yml も参考にして、自分の環境に合った設定が必要なのだが、これまで述べた環境と手順で構築した結果、以下のようになった。
# Misskeyを公開するURL url: https://misskey.betaful.life/ port: 3000 # Vultr Managed DB の設定 db: host: {host}.vultrdb.com port: 16751 db: mk1 user: misskey pass: {password} extra: ssl: rejectUnauthorized: false # これが重要 in Vultr # 以降はデフォルトのまま redis: host: localhost port: 6379 id: 'aid' syslog: host: localhost port: 514 proxyBypassHosts: - api.deepl.com - api-free.deepl.com - www.recaptcha.net - hcaptcha.com - challenges.cloudflare.com
Vultr のマネージドデータベースを利用する場合、ssl > rejectUnauthorized
を off にする。
これは Node.js プログラム上からマネージドデータベースへ接続するときのオプションになるが、Vultr のマネージドデータベースは自己証明書が使われており、そのまま接続しようとすると証明書のエラーが発生する。
これで $ pnpm run init
(というかその中の migration)が全く進まず、半日潰れた。
あくまでも Node.js から接続するときの問題なので、App サーバから psql コマンドで接続すれば繋がるし、Vultr マネージドデータベース側に設定できる Trusted Sources も(証明書には)関係ない。 あ、ちなみに Trusted Sources(アクセスを許可する IP アドレス)は設定しておいたほうがいいです。設定していない場合はインターネット上どこからでもデータベースに接続可能になっていますので、App サーバの IP アドレスのみを許可しておきましょう。
ともかく、データベースサーバ側が自己証明書であることでエラーになるので、Vultr マネージドデータベースの管理画面からダウンロードできる署名付き証明書 ca-certificate.crt
を App サーバ側に許可する証明書として登録すれば ssl: true
設定でも繋がるようになるようです。
自分はまだ rejectUnauthorized: false
のまま運用しています…それはヤベーぞ!って話だったら教えてください(゚A゚;)ゴクリ
これ以外は全くハマることなく構築できました。
Misskey 起動後
公式ドキュメントからも誘導されている、以下の記事を参考に設定していきました。感謝。
画像などのアセットはオブジェクトストレージに直接用意してもいいし、Misskey 側の「ドライブ」機能を利用してもいい。
「ドライブ」機能を使う場合は、先にオブジェクトストレージの設定を行います。
大枠の流れはこんな感じかな?
- 管理者アカウントを作る
- オブジェクトストレージを設定する
- 未設定のまま画像のアップロードなどを行うと App サーバのローカルに保存されます
- サーバの全般設定を行う
- 名称や概要、アイコンなどなど
- アイコンは管理者アカウントの「ドライブ」にファイルをアップロードして、URL を取得すると楽ちん
- 「誰でも新規登録できるようにする」もここで設定します。デフォルトは on なので注意
- 「リモートのファイルをキャッシュする」は off 推奨
- 名称や概要、アイコンなどなど
オブジェクトストレージの設定は(正直正しいのか分かってないんですけど)、Vultr Object Strage の場合は以下で動作しています。
以上
これでセットアップ完了して 5 日間ほど快適に稼働を続けている。サーバスペックのところにコメントしたとおり一度スペックアップを行った。お一人鯖なので誰に断わるでもなくメンテしました。
Misskey 本体のアップデート(13.9.1 → 13.9.2)も経験できたが、まだ大きな変更もないので特に問題なく対応できた。
アップデート方法の手順も公式ドキュメントにある。親切。
CHANGELOG.md もちゃんと更新されるので良心的🥰
おまけのサーバメトリクス
おなじみの Mackerel を導入しています。
基本のメトリクス取得と、一応の外形監視(/timeline 対象)だけやってます。メトリクスデータがある程度の期間残って見られるのはいいですね。
余談
自分の Misskey の使い方は Twitter の代替というよりは、コミュニティとゆるく繋がれるミニブログという感じ。
これまでもインターネット上のいろんなコミュニティに属してきた。それは Slack 上にあったり Discord 上にあったりその他のツール上にあったりしたわけだけど、それが全部 ActivityPub によって繋がっているような世界だと感じている。
たとえば IT 系の人々が集まるコミュニティである「みすてむ」ではゆるく IT 系っぽい雑談をしたり、チャンネルで濃い話をしたり、別のゲーマーの集まるコミュニティである「げむすき」では同じくゲームについてゆるく語ったり濃く語ったり。気が向けばそれぞれでふわっと(サーバの趣旨でもない)日常の話をしたりする。
たとえば ruby-jp Slack というコミュニティでもそんな感じで過ごしていたので、コミュニティのツールが変わっただけで、同じような感覚で参加している。
違うのは ActivityPub という仕組みでそれぞれのコミュニティがゆるく繋がっているということと、各サーバは基本的に public な状態だということだと思う。
ActivityPub の繋がりには Misskey だけじゃなくて Mastodon や他のサービスも居るので、より一層世界が広く繋がっている。
またコミュニティと同じ仕組みではあるが、また違った立ち位置としてお一人鯖で「自分の空間」を作れるのもとても面白い。コミュニティと繋がったり、友人と繋がったりとこちらはこちらで活用の夢が(自分のなかで)広がっている。
とくに Misskey の UI や仕組みは本当に秀逸だと思っていて、個人的にはもう Twitter や Mastodon には戻れなくなっている。まだ進化を続けそうな展望もあってわくわくしています。
お一人鯖は自己学習にもいいぞ!(Misskey でも Mastodon でもいいけど)昔みたいに適当な Twitter もどきを作って一人さびしく運用して飽きることもない。何故なら "自分の鯖" に人がいなくても ActivityPub で世界中に繋がっているから。
Misskey が気に入ったらぜひ開発への寄付も検討してほしい。
Misskey の 変に 目立った部分が話題になっていますが、とても面白いツールだと思うのでぜひこの面白さが認知されると嬉しいなぁと思います。
✁---
ここまで勢いで書ききったので誤字脱字間違いなどは追々直します。
それでは、おやすみなさい。