さくらのVPS + Cloudflare でMisskeyのサーバーを立てる

昨今流行りの分散型SNS, Misskey の個人用サーバー misskey.ikalga.net の運営を始めました。個人鯖です。

個人でサーバー立てるのも初めてだしドメイン取るのも初めてだったのですが、
どうせ分散型SNSを本格利用するならせっかくだし自分でサーバー管理してみたい、という私のような人のためにも手順を残しておこうと思います。

misskey.ikalga.netの登録画面のスクショ

もっとも、Misskeyは公式のドキュメントが充実しているため、導入自体はおおむねそれに従うだけなのですが……

表題にも書いてありますが、さくらのVPS + Cloudflare で動かしていまして、
維持費がだいたい年に1万円強になる見込みです。

Why Cloudflare??

ドメイン取得、DNS登録、CDN設定を全部Cloudflareでやりました。
ドメイン代金以外は無償プランです。

ドメイン取得、数年前まではお名前.comでするのが定番だったと記憶しているのですが、
いまはドメインもCloudflareで取ってしまったほうが複数年運用することを考えると安く上がるとのことです。

トップレベルドメインを.jpとかにしたいならお名前.comにするのがいいと思います。

ドメイン取得 at Cloudflare

Cloudflare のアカウントを作ったら、左のメニューから「ドメイン登録」→「ドメインの登録」を選びます。
↓のような画面になったら、「ドメイン名を検索する」欄に登録したいドメイン名を入力すると、取得できるドメインの候補と価格が表示されます。
あとは画面の表示に従って必要事項を登録してください。
住所氏名は英語にすること(なので住所は番地→市区町村→都道府県の順ですよ)。

Cloudflareのドメイン登録画面

さくらのVPSを契約する

さくらのVPSはアカウント持っていない場合、アカウント作成前にインスタンスの設定をすることになります。

Ubuntu 22.0.4 の CPU2コア メモリ1GB SSD100GB (50GBからアップデート) プランで契約しました。
SSD50GBのままにして後日容量上げてもよかったかもしれません。
リージョンは安かった石狩にしました。適当でいいと思います。

さくらのVPSの契約画面

DNS設定 at Cloudflare

VPSの契約ができたらDNSの設定を行います。
なお、DNS設定って反映されるのに時間がかかるって聞いていたので自分はVPS契約後すぐにやったんですが、
どうもCloudflareで完結させた場合爆速っぽいので後回しでもいいかもしれません。

Cloudflareに戻ったら左メニューの「Webサイト」に先程登録したドメイン名を入力します。
Webサイトが登録できたら、また左メニューから「DNS」→「レコード」に進みます。
「レコードの追加」を押して、Aレコードを選択、IPv4アドレス欄にさくらのVPSの「基本情報」欄にある「IPv4」の値をコピペします。
「名前」欄は自分はサブドメインにしていますが、ルートであれば@に。

CloudflareのDNS設定画面

Misskey のインストール

Misskeyのインストール方法は公式で

  1. Dockerを使う方法
  2. bashスクリプトを使う方法
  3. 全部自力
  4. Yunohostを使う方法
  5. Kubernetesを使う方法

と各種ドキュメントを用意してくれているのですが、2. bashスクリプトを使う方法 になります。
本当はDockerでやろうとしたんですが、メモリ不足でエラーになってたのを当初原因に気づかず、悩んだ末にbashスクリプトにあやかったという……
今から考えると137エラーが出てたのでメモリ不足なのは自明だったのですが……

VPSssh ログインしたら、
上ドキュメントページに従ってbashファイルをダウンロードし実行、適宜質問に回答すると
あとは自動でMisskey, PostgreSQL, Redis, Nginxのインストールと設定が完了します。
これは本当に便利でした。なんもやることなかったわ……

VPSのパケットフィルター設定

さくらのVPSの管理画面に戻り、「パケットフィルター設定」タブを開きます。
「パケットフィルターを設定」ボタン→「パケットフィルター設定を追加する」ボタン、
「フィルターの設定」選択肢の「Web」を選択。
ポート番号:80/443 が 許可する送信元IPアドレス:すべて許可する になっていることを確認して追加、「設定を保存する」。

AWSでいうところのセキュリティグループ設定ですね。
最初これ抜けててしばらく悩んだのはひみつ。

CDN設定 at Cloudflare

特段設定をしなくてもCloudflareは静的画面をキャッシュしてくれるのですが、
MisskeyのドキュメントにあるとおりAPIアクセスまでキャッシュされると困るので、除外設定をします。

Cloudflareに戻ったらWebサイト管理画面にて左メニューの「Caching」→「Cash rules」に移動。
↓画面のように path /api/ を含む場合「キャッシュをバイパスする」にします。

Cloudflareのキャッシュ設定画面

Misskeyのコントロールパネルに入る

おつかれさまでした。 以上でサーバーの設定はおしまいで、サーバーにアクセスする準備が整っています。
設定したドメインにアクセスしてみましょう。

最上部に掲載した画像のようなMisskeyトップ画面が表示されていれば成功です。
(背景やfaviconはログインした後に設定します。)

Misskeyトップ画面が表示されていたら、さっそくアカウントを作成しましょう。
Misskeyは、サーバー内で最初にアカウントを作成したユーザーが自動で管理ユーザーに設定されます。

ログイン後、Misskeyのメニューに「コントロールパネル」項目が表示されているはずです。 自分の好みに合わせて自由に設定してください。

Misskeyのログイン後メニュー項目

(補足)リレーの設定

他のサーバーのノートを取得するためには、リレーサーバーというのを登録しなければなりません。
「コントロールパネル」→「リレー」から設定できます。

どんなリレーサーバーがあるかは「ActivityPub リレー」とかでググってください。

私は最初 https://relay.fedibird.com/ に登録させてもらいましたが、
知り合いをだいたいフォローしたあとは「連合TL見ることないな……」となってしまい登録解除しています……

参考にさせてもらった記事