【鯖缶入門】Misskeyインスタンスを建てたらやっておきたい事

# はじめに
最近では、各社VPSサービスがスタートアップスクリプトを提供し始め、構築や運用に関する技術記事も増加したことによって、Misskeyインスタンスの構築ハードルは大幅に下がったように思えます。
しかし、構築後の運用や設定のような、構築それそのもの以外の情報があまりなかったので、私がMisskeyインスタンスを建ててから今までに起こった経験をもとに、いくつかの知見を共有します。

# Misskeyで設定しておきたい設定
Misskeyのフロント上でできる設定にかんして。
## 全般
### サーバー情報に関連する設定
サーバー名、サーバーの紹介、管理者関連のものは必ず設定しておきましょう。
フォークされたMisskeyを利用している場合は、AGPLライセンスに準拠するため、そのレポジトリのURLを指定しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/beefc71f-d8ef-d1ae-9900-0dd10638ea7b.png)

名称が長いインスタンスであれば略称を設定しておくとしあわせになれるかもしれません。


### ファイルの設定
リモートファイルのキャッシュに関する設定です。ストレージに余裕があれば有効化するのもいいですが、オブジェクトストレージを利用する場合、PUT数が増加するため、無効化しておくことをおすすめします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/d153fdfe-a346-16cf-1b35-1fd29acae9c1.png)


### ServiceWorker
通知等の機能をユーザーが利用できるようにするため、ServiceWorkerの設定を行います。

以下のコマンドを、任意の環境で実行し、Public KeyとPrivate Keyを生成し、設定を行います。
```bash
sudo npm install web-push -g
web-push generate-vapid-keys
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/93b3a785-ad2b-4a1b-2eb7-7272bac6e7d3.png)


## ブランディング
名の通り、ブランディングに関する設定です。
ここで設定したアイコンやテーマカラーは、連合先のインスタンスでも表示されます。

こちらにもレポジトリのURL、フィードバックのURLを設定する欄がありますので、フォークされたMisskeyを利用している場合は、AGPLライセンスに準拠するため、そのレポジトリのURLを指定しておきましょう。


## モデレーション
サーバーモデレーションに関する設定をここでは行います。
お一人様鯖の方は、「誰でも新規登録できるようにする」を切っておきましょう。

公開インスタンスであれば、「アカウント登録にメールアドレスを必須にする」を有効にし、必ず利用規約とプライバシーポリシー、お問い合わせ先URLを設定しておくことをおすすめします。
規約等の作成には手間や時間がかかりますが、問題が起きた際に自分の助けになるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/98df71a1-8bb4-fac7-eb26-f78d09b81d77.png)


## メールサーバー
メールの配信を行うサーバーの設定を行います。公開鯖を運営するつもりであれば、必ず設定しておきましょう。

私は、鯖設立当初、SESを利用していましたが現在はGmailを利用しています。送信数上限はありますが、小規模インスタンス程度であれば充分実用に耐えるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/3ae3cbf5-a3ee-f113-bc7b-84284a7e83ed.png)

Gmailを利用した独自ドメインでのメール配信設定は「[MisskeyのメールサーバーとしてGmailのSMTPサーバーを利用する](https://qiita.com/mai_llj/items/1002932eb46ce39d4045)」が参考になるかと思います。


## オブジェクトストレージ
ドライブの格納先としてAWS S3または互換のオブジェクトストレージを使う設定ができます。
これを有効化しておかないと、files/ディレクトリ配下にファイルが蓄積されるのですが、運用上あまり好ましくないので、可能であればオブジェクトストレージの利用をしましょう。

おすすめはCloudflare R2、自前管理で費用を節約したい場合はMinIO等でもいいかもしれません。

また、エンドポイントはカスタムURLを設定しておくべきだと思いますが、私は設定し損ねてしまいました😫

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/b1979fe9-a9d2-02de-3085-9697e4e8c7cf.png)

詳しい設定方法については、[こちら](https://qiita.com/hihumikan/items/1f692f3bd5516820e0ec)が参考になるかと思います。


## セキュリティ
セキュリティに関する設定を行います。
定期的にスパムbotや海外のよくわからない広告垢が出現するので極力設定しておきましょう。

### Botプロテクション
俗に言うCapture関連の設定です。拘りがなければreCAPTUREで問題ない気がします。
[ここ](https://www.google.com/recaptcha/admin/)からサイトを開設し、サイトキーとシークレットキーを入手し、設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/54799d76-caa8-507d-4a07-b3318f9d9511.png)

### センシティブなメディアの検出
機械学習を用いてセンシティブなメディアを検出することができるようです。
計算資源に余裕があれば有効にしておくといいでしょう。


### Active Email Validation
登録時にメールアドレスのバリデーションを行ってくれます。
気休め程度ですが、有効化しておきましょう。

Verifymail.ioやTrueMailを利用することも可能ですが、個人規模であれば費用的にも現実的にはないでしょう。


### Banned Email Domains
登録を拒否するメールドメインを設定します。

モデレーション上、捨てアドで登録されると厄介ですので、[disposable-email-domains](https://github.com/disposable-email-domains/disposable-email-domains)等からリストを持ってきて設定しておきましょう。

これを設定しておくだけでかなり変わります。いい感じです👊🏻

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/dd5982d1-f28f-a65f-00ac-de116bd62d11.png)


### Log IP address
アカウントの新規登録・ログイン・利用時にIPアドレスを記録する機能です。有効化しておきましょう。


## リレー
Misskeyにはリレーによって投稿を中継し配信する機能があります。
建てたての小規模インスタンスや、お一人様鯖であれば、TLをかさ増しするために設定することをおすすめします。
しかし、リレーに参加することでリレーからの流入ノート数分が増加しますので、DBサーバーの容量などを考慮した上で設定を行ってください。

リレーサーバーはいくつかありますが、有名なものであれば。[このあたり](https://hisubway.online/blog/fediverse_relay/)が参考になりそうです。


## プロキシアカウント
プロキシアカウントとは、インスタンス内のユーザー内がリモートユーザーをリストにアサインした際など、特定の条件を満たした際にリモートフォローを行うアカウントです。

公開サーバーであれば、専用のアカウントを生成し、設定しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/01b7c809-1414-6881-73db-593a122e1946.png)

:::note warn
アカウントを生成しただけでは、選択画面に表示されないことがあります。
生成したアカウントをにて1つでも投稿を行うと表示されるようですので、表示されない場合は試してみてください。
:::

## 外部サービス
### DeepL Translation
外来語で投稿されたノートを翻訳するためにDeepl APIキーを設定できます。
DeepL APIは[こちら](https://www.deepl.com/pro#developer)から登録・取得が可能です。

無料版は月間50万文字までの制限があります。
Proを使う場合は、Pro accountを有効化してください。


# Misskey以外で設定しておきたい設定
ここからはMisskey外での設定です。

## meilisearch
厳密に言えばMisskeyの機能の一部となるものですが、フロント上での設定ではないので、Misskey以外の設定としておきます。

:::note warn
この設定を適用するためには、Misskeyを再起動する必要があります。既に公開しているサーバーの場合、極力アクティブユーザーの少ない時間帯に行うといいでしょう。
:::


meilisearchを立ち上げ、`.config/default.yml`を編集してMisskeyを再起動します。
Dockerで立ち上げる方法もありますが、取り敢えずは[こちら](https://nanasi-apps.xyz/misskey-meilisearch)を参考にするといいかもです。

## WAF
`Cloudflare > (User) > (Domain) > Security > WAF`より設定します。

海外からのリクエストにすべてChallengeを課してもいいですが、連合先に海外のインスタンスもあるので取り敢えずはTorだけにChallengeを課す設定で問題ないでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/41752a09-c21e-f4bc-d2d6-2aacd6879b42.png)

### HTTP DDoS attack protection
`Cloudflare > (User) > (Domain) > Security > DDoS`より設定します。
言わずと知れたDDoSの防護緩和機能です。

スコープを`All incoming requests to (Domain)`として有効化しておきましょう。
AWSのEC2インスタンスなど、通信量で従量課金される子を利用している場合、お財布へのダメージを減らせるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/4e449f74-7e0a-50f2-30b3-fae8d45c7a5f.png)

ちなみに、UDPリフレクション攻撃やSSLベースのDDoSについては、Freeプランで設定できないようです。


## Cache Rules
`Cloudflare > (User) > (Domain) > Caching > Cache Rules`より設定します。

APIを除くすべてをキャッシュしておくといいでしょう。多分。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/f1cf6897-a016-f035-6218-31a7f4dde6b0.png)


# さいごに
最近では、Misskeyの構築ハードルが下がってきていることもあり、インスタンス数も増え、Fedi全体としても賑やかになってきているように思います。
その一方で、きちんと設定されていないインスタンスがあるなど、幾つかの問題が顕在化しているようにも思えます。

この記事が誰かのお役に立てれば幸いです。