Xserver VPSでMisskeyの自サバをたてる

# はじめに
X（旧Twitter）からMisskeyに移住してきていくつかサーバーに登録してみて、
自分でもサーバー建ててみたいなと思っていたところ、Xserverのサービスでわりかし簡単に建てられるらしいときいておためしで建ててみた

たしかにめちゃくちゃ簡単に建てられました（2-3時間くらい）

# 作業環境
Windows11

# 準備するもの
・サーバー
おひとりさまサーバーなのでXserver VPSの最低スペックを契約しました（2GBメモリ、仮想3コア、NVMe 50GB）
支払いプランがいくつかあるのですが、わたしはいったん数か月で畳む可能性あるなということで1か月サブスクとしました。料金は10/3-10/31の契約で1036円です

・独自ドメイン
もともとHPを持っているので独自ドメインはあったけど今回はなんとかキーというサーバーを建てたかったので、Xserverのメニューから独自ドメインを取得しました（salmonjerky.net）
今回ドメインの取得費用は1円、更新費用は1500円程度の予定です

・オブジェクトストレージ
 ~~misskeyにアップロードする画像の保管庫 Xserverに多少ストレージはあるらしいが、圧迫するのが嫌なのと、前述のとおりHPの構築に使っているAWSアカウントがあるのでs3を使用します
現状のs3使用料で月100円もかかってないので、まあそう変動することはないでしょう~~

:::note info
→量は大したことないっぽいものの、データの出し入れにお金がかかるみたいなのでR2の無料枠に変更済/241217
:::

・Cloudflareアカウント
CDNを使うためにとりました
CDNならAWSのcloudfrontでできるかなと思ったが、調べきれずおとなしく定石どおりとした。とりあえず無料枠です

# 作業内容
最初に気を付けること：一度使用を始めたサーバーのドメイン・ホスト名では、データベースを作り直さないでください！とのことです

## Xserver VPSに登録する
以下のサイトを参考にしてXserver VPSに登録し、Misskeyのアプリイメージを選択します

https://makuring.jp/game/misskey-server/#rentalserver
サーバー名などはデフォルトのままで大丈夫です
プランを選択するあたりまで終わったら戻ってきてください

SSHkeyは上記のサイトでもいったん設定しないで進めていますが、わたしもいったん設定しないですすめています

## サーバーを設定していく

支払い完了後、XserverのトップページのVPSメニューにサーバーが出ていると思うのでVPS管理をクリック
以下のVPSパネルが出てくると思うので

![スクリーンショット 2024-10-06 182640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/4e34cc76-d78d-a01b-a6d8-c46023f140e1.png)

### 【やらなくてもいい個人的おすすめ】セキュリティ設定しておく
まず左上の「二段階認証設定」を押して二段階認証をしておきます
Google Authenticaterを使いました

### コンソールにログイン

VPS情報の下の方にあるIPアドレスを確認してメモしておきます

管理画面右上部にある「コンソール」を押すと黒い小窓が出てくるので
login:のうしろにrootをいれてエンター
```
login: root
```
Passwardが出てきたら申込時に設定したrootパスワードをいれます
コンソールあるあるですがコピペが効かないかもしれないので、画面上には何も出てきませんが手打ちすることをおすすめします 入力しおわったらエンター
```
Passward: 
```

ログイン成功するとミスキーサーバーの情報がぶわっと出てくるのでURLがVPS情報に記載されているIPアドレスと一致している（末尾に:3000とつく）ことを確認します

でこのURLにアクセスするともうMisskeyが建ってるはずです

### URLにアクセス

ブラウザにIPアドレス打ち込む前に、いったんVPSパネルに戻って
右のメニューのサーバーから「パケットフィルター設定」にいきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/23c3c355-61f1-ec5e-39fd-3ce50f46114c.png)

パケットフィルター設定をONにしたあと
下部のフィルタールール設定一覧からSSHとWebを接続許可します
これやらないとchromeからIPアドレス叩いても遷移しなかった

設定おわったらchromeのアドレスバーにIPアドレスをうちこみます
```
http://xxx.xxx.xx.xxx:3000
```
### 管理者アカウント作成

この時点ではだれでも登録できてしまうのでまず管理者アカウントを作成し、
サーバー設定を招待制に変更して人が入れないようにします

ブラウザからMisskeyにアクセスできてると思うので普通にアカウントを作成してください
ユーザー名はadminとかがのぞましいかと思います

また、この時つくった管理者アカウントは他のサーバーに引っ越すことができない（厳密にはできるようだがひと手間かかるっぽいのでやめたほうがいい）ので
自分のアカウントはあとで作ることにしてここでは管理者アカウントをつくってください

その後、左のバーに出てくる「コントロールパネル」から最初にやっておくべき設定をします

・モデレーション
誰でも新規登録できるようにするをオフ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/1959b929-ae5b-c4d6-736a-869e2ed2e76d.png)
※管理者アカウントを作った後、自分のアカウントを作成しておくか、自分のアカウントを作るときだけ一時的にオンにしてください


・全般
情報から「サーバー名」を入力し、サーバーの紹介など必要があれば記入
管理者名をいれる
管理者連絡先・問い合わせ先をいちおういれておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/c90e71f5-8df8-a0ed-9694-9319456f8031.png)

### ドメインをとる
ここまででとりあえず自分のmisskeyはできましたので、そのあとこれを独自ドメインでアクセスできるように変更していきます。

Xserverのトップページからドメインを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/1df530f9-d454-7afa-1d6b-f7f1e1a11365.png)

以下のサイトを参考にしてSSL設定までしました。
Windowsの方はTera Termというアプリをインストールしていますが、
公式からだとBadGatewayになるので窓の社からインストールするのがおすすめです。
https://tomato-code.com/6713/#index_id12

ここでやっているのは、要は取ったドメインとさっきのIPアドレスを紐づけ、
httpのアドレスをhttpsのアドレスでアクセスするようにするということです。

### CDN設定する
CDNというのは、ググってくれればわかりますが、サイトのキャッシュをいろんなところに置いておいて、表示を早くしたり、サイバー攻撃を受けたときにその間にはいってくれてる場所でいったんせき止めるみたいなイメージです。ググってください。やっといたほうがいいだろうなというかんじなのでやっておきます。

cloudflareにアカウントをとります。
画面に従ってまずホーム画面から自分の取った独自ドメインを入力します。
基本は画面に沿って入力していきます。
もしサブドメインを使いたい場合はいったん普通にドメインをいれてからcloudflareの設定でバイパスするらしいです。
フリープランで十分なのでフリーにします。
DNSを追加でAレコードにIPアドレスを指定してプロキシ設定をオンにします。

そのあと右のメニューからSSL設定をフルにします（これをやらないとリダイレクトします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/76b246a2-ab29-b6f5-f457-76728986cdeb.png)

Auto minifyはMisskey公式でも非推奨ですが、cloudflareでも現在非推奨らしいのでデフォルトでオフになっています。（右のメニューのspeed>コンテンツ最適化から設定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/ae0d0e92-49e7-bf6b-2f2f-c9d69aaac6fc.png)


https://note.com/naoki_wjm/n/nde90fef9b78e
上記のサイトを参考にしてください。

### Misskeyをアプデしておく
再びVPSパネルに戻ってコンソールを開きます。
https://vps.xserver.ne.jp/support/manual/man_server_app_use_misskey.php
上記のサイトの最後のセクションを参考にしてmisskeyをアップデートしておきます。

### オブジェクトストレージを設定する
misskeyにあげたファイルをXserverのストレージを使うこともできますが、
サーバの容量を圧迫するのが嫌なので外部ストレージにためることにします。

https://note.com/naoki_wjm/n/n07c179c2cb94#311fc6d3-f725-4ada-880e-383c1b8a603a
cloudflare R2、AWS S3、WASABIあたりがメジャーらしいです。

~~わたしはs3使ってるのでs3で設定します。~~

:::note info
S3使ってたんですが、数か月使ってみただけでかなり費用がかさむのでいったんR2に変更しました。241217
やり方はこちらの通りにしました。一番わかりやすかったです
https://blog.adglobe.co.jp/entry/2023/11/15/100000#Cloudflare-R2-%E3%81%A7%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E8%A8%AD%E5%AE%9A
S3での設定も備忘録として以下残しておきます。
:::


~~まずAWSからオブジェクトストレージ用のs3にアクセスするためのIAMを作成します。
s3FullAccessの権限だけつけて、アクセスキーとシークレットキーを発行してメモしたあと
実際のオブジェクトストレージ用のs3バケットを作ります。
s3バケットのアクセス管理タブからパブリックアクセスを許可します（なんか警告されますが無視します）
バケットポリシーを書き換えます。
くわしくは以下のサイトを参考にしました。~~
https://seritude.com/misskey-alone-server/#7

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/c19b0626-0e8a-d6d5-35d1-4cf35ac48fd1.png)
コントロールパネル側を上記のように設定後、画像をアップロードしてみてうまく表示されていればOKです

## セキュリティ設定をしていく

・SSHをプレーンなパスワードではなく、公開鍵方式にする
・SSHのポートを別番号にして、22番ポートは塞ぐ
・ルートユーザー以外でのルートユーザーを作成して、ルートユーザーでのSSH接続は塞ぐ
はやっといたほうがいいんですが、ちょっと設定がむずかしすぎてぼちぼちやります。
とりあえず固定IPからのSSH接続のみ許可にしているのでいったんこれで最低限…
公開鍵設定はググれば出てくるが、Xserverからも生成ページがあります。おこのみで
・Fail2banを設定しておく

以下参考にしてください
https://seritude.com/server-securty-noob/

## いったんこれでつかえるはず！
自分のメインアカウントからノートしてみよう！
もっと！＞照会から他のサーバーの人をフォローすることで、徐々に他サーバーのノートが流れるようになります。

# 鯖設定について
コントロールパネル＞ブランディングから画像を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/a826ecdb-d4ca-6e9f-c5c0-6b032f81f535.png)

↑ここに記載するURLは、自分のドライブにアップロードした画像の以下の部分になります。赤矢印をクリックしてURLをコピーしてｋ（ドライブにアップロードした画像のURLを参照します）
![スクリーンショット 2025-02-03 120612_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/335f1edb-9dc7-1e1d-30f9-946ac1fdbe2d.png)

192×192と512×512を用意してね。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/22494f23-2f5e-38f0-e5bb-474577d983d2.png)
こんなかんじ


# カスタム絵文字設定について
カスタム絵文字は、meta.jsonを含む特殊な構造のzipファイルをコントロールパネルからインポートすることで一括アップロードができますが、現在公式の案内が消えているっぽいのと、一括でアップロードする方がむしろ面倒くさいということがありますので、現状方法は2つかと思います。

## 他サバからインポートする
もっと！＞照会から、インポートしたい絵文字を配布しているサーバーユーザーをいったん照会した後、コントロールパネルのカスタム絵文字＞リモートから対象の絵文字をクリックしてインポートする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/9632071d-ea67-5cea-3b10-38922b962909.png)
↑これは例であって実際にインポートはしていません

自サバから配布している方の絵文字をインポートする場合これが一番手っ取り早いですが、
著作権などをよく確認してからインポートしてください。

## ファイルを登録する
コントロールパネルのカスタム絵文字＞ローカルから右上の＋ボタンを押して、ファイルを一つずつ開いて名前やタグ、分類など入力して登録します。
おそらく世のさばかんのみなさんはこの方法で登録していると思います、タグ付けとかライセンス記載とかのため…

一般的なblobちゃんは以下のサイトで配布されています
https://blobs.gg/
All blobs that are uploaded to official Blob Emoji servers are licensed under the Apache License 2.0, the same license that Noto Emoji by Google are licensed under.
の文の下にダウンロードリンクがあります
ちょっとその他はdiscordに参加しないと？？らしく？？よくわかりませんでした

自分でカスタム絵文字を作る時つかえるサイト
https://emoji-gen.ninja/
https://zk-phi.github.io/MEGAMOJI/

## リレーに参加する？
ロールの設定からGTL無効にするかどうか選べました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3903492/d16afc9a-34a8-376f-ee06-ad2fdfa98125.png)

リレーに参加したい場合は以下参考にしてください
https://sns.xserver.ne.jp/support/manual/man_sns_app_use_misskey.php
（リレーに参加しなくてもフォローしている人のサーバーとはつながります）
ひっそりやるのもよし、GTLで濁流にのまれるもよし

## ドライブ容量変更など
コントロールパネル>ロールから
ドライブ容量の変更、レートリミットの変更、ピン止め数の変更、クリップ数の変更、クリップできるノートの数、ピン止めできる数など変更できますのでやっておくとヨシ
わたしはおひとりさまサーバーでほかに登録する人いないので、ベースロールをそのまま変更しました

# 以上
ここまできたらもうmisskey稼働しているのでは？
インターネットという荒野にテントを建てた感じがありますね。不安もあり、期待もあり……
所属しているサーバールールになじめないなと思ったり、自分の帰る場所がほしかったり、ひとりだちしてみたいなとおもったら自サバもありかもしれません。

# 参考サイト
公式
Misskeyサーバーの作成 https://misskey-hub.net/ja/docs/for-admin/install/guides/

Xserver VPSでの建て方が画像付きで解説されているのでXserver支払いまではこの2つを見る
https://yululiblog.com/misskey-server/
https://makuring.jp/game/misskey-server/#rentalserver

たぶん一番わかりやすい技術記事
https://seritude.com/misskey-alone-server/

Xserver SNSでmisskeyについてふれているのでこれも参考になる、連合の話とか
https://sns.xserver.ne.jp/support/manual/man_sns_app_use_misskey.php