ねこでもわかるMisskeyサーバーの建て方

この記事は、Misskey Advent Calendar 2023 23日目の記事です。

前書き

Misskeyのサーバー建てたくない?そうだよね建てたいよね!

ということで、超簡単にサーバーを建てれて、かつ将来的なトラブルも起こりにくい構成をご紹介します。

背景として、TL上に「Misskeyの自分用サーバー建てたいけどよくわからないからできないよ…」というFFさんが結構いて悲しかったというのがあります。
他の人のMisskeyサーバーで楽しむのもよいですが、自分で建ててみることでMisskey自体への理解もより深まります。
ぜひ、楽しみながら挑戦してみてください。

それではちらかった物置の一角を、今日ばかりは整理してお送りいたします。

ConoHa VPS契約してCloudflare&Docker Composeでお手軽運用するだけの記事です。
大した内容ではありません。

必要なものコミコミのinstant-misskeyというものを制作しましたので、そいつだけでも見てやってくれると嬉しいです。

0. 前提条件

以下のものが必要です。

  • Misskeyの基礎知識(他のサーバーでの体験などなど)
  • パソコン(今回はWindows11の動いているPCを前提に話を進めます。)
  • 1,000円~10,000円くらいのお金
  • なんとか英語を読もうとする力
  • やる気とググって自己解決する力

この記事ではわかりやすさを優先し、一部正確ではない表現や盛大な省略が含まれます。
サーバーは建てたらほったらかしというわけにもいきません。
最低限のメンテナンスに関する情報はこの記事にもありますが、常に最新の情報をチェックすること、Linuxサーバー運用やセキュリティについて勉強することを忘れないで下さい。

この記事では大規模サーバーの運営を想定していません。
もし何らかの理由で大規模なサーバーとなってしまった場合、信頼できる技術者へ助けを求めてください。

この記事の内容により直接的・間接的を問わず発生した被害に関して、一切責任は取りません。
ご自身の責任によりお試しください。

以降この記事では「Misskeyサーバー」のことを「Misskeyインスタンス」という旧名称で呼び、サーバーのことを単に「サーバー」と呼びます。

この記事では最初にVPSについて説明しています。VPSを使ったことがある方は2. Misskeyが動くようにしようまで飛ばしてください。

1. ホストを建てよう

ホストって何?

まずはMisskeyの動くホストを作る必要があります。

まず、インターネット上で見ることのできるWebページはどのようにしてあなたの手元で見れるようになっているかご存じですか?
実はあなたの今見ているこのブログも、普段使用しているMisskeyインスタンスも、裏で24時間駆動し続けるサーバーコンピュータ(≒ホスト)が配信・処理することで見れるようになっています。

「サーバーコンピュータ」と聞くとなんだか物々しく特別なもののように聞こえますが、じつはあなたの手元にあるパソコンと大して変わらないコンピュータなんです。実際に、mi.chikage.netはこの写真のコンピュータで動いています。

サーバーとして使用される家庭用小型PCの写真

このように自宅でコンピューターを動かす方法を「自宅サーバー」と言います。このコンピュータも元々はビジネス用途で使われていた省電力ミニPCですので、あなたの手元のパソコンとそう変わらない使い方をされていました。

VPSって何?

と言っても、自宅サーバーは今回使用しません。「VPS」というものを使用します

実は自宅サーバーには問題が多く、サーバー用途のネット回線の用意が難しかったり、セキュリティ上考えることが多かったり、最悪の場合寝ている間に電源が発火して家が火事に…なんてこともあります。
そして何よりコスパが悪いです。ネット回線と電気代だけでVPSの値段を優に超えます。
なので今回はVPSを使用しましょう、というわけなんですね。

このVPSをめちゃくちゃ簡単に説明すると、ネットにつながったパソコンを月額で貸してくれるサービスです。
VPSを使用することで、家のネットワークがウイルスに侵されたり、家が火事になったりといった最悪の状況だけは防げますし、何より考えることが減ってらくちんです。

よく似たサービスに「レンタルサーバー」がありますが、これはさらにPHPなどのソフトウェアもセットアップしたうえで貸してくれるサービスです。
こちらはWordPressなどの対応しているソフトウェアしか動かない代わりに料金が安く、ソフトウェアのインストールなど考えなくても使えるというメリットがあります。しかしMisskeyは動かせませんので、今回は間違って契約しないようにしましょう。

ホストを建ててみよう

それでは実際にホストを建ててみましょう。

と言っても難しいことはありません。
パソコンから接続する準備と、サービスを契約するだけでOKです。

VPSはなんでもいいです。基本的にどのVPSでも構築可能です。
余談ですが、XserverはMisskeyの開発に協力しています。贔屓してもいいかも…?

…とか言いながら今回はConoHa VPSを使用します。理由は簡単、なんだかんだキャンペーンで最安なうえに大学生だと学割まであるからです。僕の普段使いも結局ConoHaです。
その代わりコントロールパネルがめちゃ重でストレスがたまります。イライラしやすい人には向かないかも…

あとこのはちゃんかわいいしね

I. アカウント作成

まずは以下のページを参考にアカウントを作成してください。

お申し込み方法|ConoHaサポート
ConoHaのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHaは便利なご利用ガイドと専任スタッフのサポートで安心してご利用いただけます。

II. サーバーの管理に必要な機能の用意

次に、あなたのパソコンからVPSを操作するための下準備をします。

この後作成するVPSを操作するには、あなたのパソコンからリモートで接続する必要があります。
しかし標準の機能だけで接続することはできませんので、必要な機能をあなたのパソコンに追加する必要があります。

今回はWindows 11向けの説明のみ行います。
Macの場合は標準の機能だけでリモート操作が可能なはずですが、手元にMacがないので検証できていません。もし接続できない場合には「macos openssh」などで検索してみてください。

  1. 画面下のタスクバーにある「スタート」ボタン(一番左のボタン)を押します
  2. 出てきたスタートメニューの右下にある「設定」を押します
  3. 「アプリ」→「オプション機能」を選択します
  4. 「オプション機能を追加する」というメニューの右にある「機能を表示」というボタンを押します
  5. 出てきたリストから「OpenSSH クライアント」を探し、右側のチェックボックスにチェックを入れます
  6. 「次へ」を押し、指示に従ってパソコンを再起動してください

III. 公開鍵の登録

次に、サーバーの管理に使用する鍵を発行します。
サーバーへのログインにはパスワードも使用できますが、現在パスワードは安全ではない認証方法とされています。
そこで今回は、「公開鍵認証」という認証方法を使用します。
これは「まず予想できないパスワードと、そもそもパスワードを送信しない仕組みで安全に認証しようぜ!(意訳)」という認証方法で、現在SSHにおいて主流となっている認証方法でもあります。

まず、「ターミナル」というアプリを開いてください。
Windows11の場合は「スタート」ボタンを右クリックすると「ターミナル」という項目があります。(「ターミナル(管理者)」ではないのでご注意を。)
するとこんな感じの画面が開くと思います。

これは、コマンドでしか指示をできないアプリとお話するためのアプリです。
これからはすべてコマンドで操作をしていきます。慣れるまで少し大変ですが、頑張ってください!

まずは以下のコマンドを入力してください。

ssh-keygen -t ed25519

これは、「ssh-keygenくん、sshに使う鍵を『ed25519』っていう方法で作って!」という指示のコマンドです。
するとssh-keygenが以下の順番でどんなカギを作ればいいか聞いてきます。順番に答えてあげてください。

Generating public/private ed25519 key pair.
わかった、ed25519で公開鍵と秘密鍵のキーペアを作るよ!

Enter file in which to save the key (C:\Users\chikage/.ssh/id_ed25519):
どこにキーペアを保存すればいい?(空欄だとここに保存するよ!)

Enter passphrase (empty for no passphrase):
鍵を守るためのパスワードを教えてね(空欄だとパスワード無しで作るよ!)

Enter same passphrase again:
確認のためにもう一回パスワードを教えてね

Your identification has been saved in C:\Users\chikage/.ssh/id_ed25519
君の秘密鍵はこのパスに保存したよ!

Your public key has been saved in C:\Users\chikage/.ssh/id_ed25519.pub
君の公開鍵はこのパスに保存したよ!

The key fingerprint is:
君の鍵のフィンガープリントはこれ:
SHA256:ypY4IjmujVoC/44w8lPFkKZz+4fPnzt33K9q+Vhg+cU chikage@Chikage-PC

The key's randomart image is:
君の鍵のランダムアートはこれ:
+--[ED25519 256]--+
|     .           |
|    +            |
|   o o           |
|  o . o      . . |
|.  o o  S   +   E|
|.o  oo o   . o . |
|O +.o.=.     oo. |
|o@.+ oo.. ..+oo .|
|*.+oo  oo.+=o+o.o|
+----[SHA256]-----+

一つ一つ答えてあげればOKです。
入力が終わったらEnterキーを押すことで次に進みます。

最初のどこにキーペアを作るかという質問は空欄でOKです。
デフォルトでユーザーフォルダの.sshフォルダ下に作られます。

次のパスワードは設定することを強く推奨します。
なお入力しても画面表示は変わりませんが、ちゃんと入力されているので安心してください。

すべて回答するとフィンガープリントやらランダムアートやらを教えてくれますが、今回は関係ないので気にしなくてOKです。

次に、以下のコマンドを実行します。

cat "さっき作った公開鍵のパス"

このコマンドは「さっき作った公開鍵の内容を表示して!」という指示です。
するとこんな感じで公開鍵が表示されます。

PS C:\sandbox> cat C:\Users\chikage\.ssh\id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICdXrOCVZRpmj1pXnSdwI1pM8YM/tsPQ96UUg7Usaq93 chikage@Chikage-PC

この「ssh-ed25519 ~」という部分が公開鍵です。選択して右クリックするとコピーできます。

これをConoHaに登録しましょう。

ConoHaのコントロールパネルにて、画像を参考に公開鍵を登録してください。

これで公開鍵の登録は完了です。
ここで設定した秘密鍵のパスとパスワードは後々使用します。

また、秘密鍵のファイルは厳重に管理してください。
万が一漏洩すると、この後建てるサーバーへ誰でもログインできるようになり危険です。

IV. サーバーを作る

さて、次はサーバーを建てていきます。

次の画像を参考に選択していってください。

料金タイプは割引切符でも時間課金でもどちらでも構いません。
SSLセットは必要ないので選ばないでください。

サーバーのスペックは、とりあえず2GBでOKです。
同時接続20人くらいまでならこれで十分です。もしユーザーさんをもっと呼ぶ場合、同時接続100人くらいまでは4GBで足ります。

OSはUbuntu 22.04を選択してください。(これ以外のOSでもMisskeyのホスト自体は可能ですが、手順が大きく変わります。)

rootパスワードはこの後削除しますのでなんでもOKです。適当に入力してください。

ネームタグはわかりやすい名前にしてください。今回は「misskey-server」にしています。

さらにオプションを設定しますので、「オプションを見る」を押してオプションを表示します。

自動バックアップ・追加ディスクは追加料金がかかるので今回は使用しません。
バックアップは別の方法で取るのでここでは必要ないです。

接続許可ポートは画像のように設定してください。
こうすることで何かミスをしてもサーバーが危険な状況になる可能性が低くなります。

SSH Keyは先ほど登録した公開鍵を選択してください。

スタートアップスクリプトには、以下の内容をコピペしてください。
その際、PASSWORDの欄は変更することをおすすめします。
このパスワードはあとでもう一度変えるので適当なもので構いません。
USERNAMEHOSTNAMEは必要であれば変えてください。

#!/bin/sh

USERNAME='misskey' #ユーザー名
PASSWORD='mechatsuyopasuwa-do' #パスワード
HOSTNAME='misskey-server' #ホストの名前

adduser --disabled-password --gecos "" "${USERNAME}"
echo "${USERNAME}:${PASSWORD}" | chpasswd

sed -e "s/PermitRootLogin yes/PermitRootLogin no/g" -i /etc/ssh/sshd_config
sed -e "s/#PermitRootLogin yes/PermitRootLogin no/g" -i /etc/ssh/sshd_config
sed -e "s/#PermitRootLogin no/PermitRootLogin no/g" -i /etc/ssh/sshd_config

sed -e "s/PasswordAuthentication yes/PasswordAuthentication no/g" -i /etc/ssh/sshd_config
sed -e "s/#PasswordAuthentication yes/PasswordAuthentication no/g" -i /etc/ssh/sshd_config
sed -e "s/#PasswordAuthentication no/PasswordAuthentication no/g" -i /etc/ssh/sshd_config

gpasswd -a "${USERNAME}" sudo

install -d -m 0700 -o "${USERNAME}" -g "${USERNAME}" /home/"${USERNAME}"/.ssh
mv /root/.ssh/authorized_keys /home/"${USERNAME}"/.ssh/authorized_keys
chown "${USERNAME}":"${USERNAME}" /home/"${USERNAME}"/.ssh/authorized_keys

passwd -d root
passwd -l root

hostnamectl set-hostname "${HOSTNAME}"

reboot

ちなみに、このスクリプトでは以下のことを行っています。

  • 新しいユーザーの作成
  • rootユーザー(マジでヤバイ権限を持ってるデフォルトユーザー)でログインできないようにする
  • 新しいユーザーでSSHログインできるようにする
  • ホスト名の変更

つまりセキュリティ上望ましいセットアップを自動で行い、ついでに管理もやりやすくするためのスクリプトです。

OSはUbuntu 22.04を選択してください。(これ以外のOSでもMisskeyのホスト自体は可能ですが、手順が大きく変わります。)

料金タイプはまとめトクでも時間課金でもどちらでも構いません。
6カ月以上まとめて購入するとかなりお得なのでおすすめです。

サーバーのスペックはとりあえず2GBでOKです。

rootパスワードはこの後削除しますのでなんでもOKです。適当に入力してください。

ネームタグはわかりやすい名前にしてください。今回は「misskey-server」にしています。

さらにオプションを設定しますので、「オプションを見る」を押してオプションを表示します。

自動バックアップ・追加ディスクは追加料金がかかるので今回は使用しません。
バックアップは別の方法で取るのでここでは必要ないです。

セキュリティグループは画像のように設定してください。
こうすることで何かミスをしてもサーバーが危険な状況になる可能性が低くなります。

SSH Keyは先ほど登録した公開鍵を選択してください。

スタートアップスクリプトには、以下の内容をコピペしてください。
その際、PASSWORDの欄は変更することをおすすめします。
このパスワードはあとでもう一度変えるので適当なもので構いません。
USERNAMEHOSTNAMEは必要であれば変えてください。

#!/bin/sh

USERNAME='misskey' #ユーザー名
PASSWORD='mechatsuyopasuwa-do' #パスワード
HOSTNAME='misskey-server' #ホストの名前

adduser --disabled-password --gecos "" "${USERNAME}"
echo "${USERNAME}:${PASSWORD}" | chpasswd

sed -e "s/PermitRootLogin yes/PermitRootLogin no/g" -i /etc/ssh/sshd_config
sed -e "s/#PermitRootLogin yes/PermitRootLogin no/g" -i /etc/ssh/sshd_config
sed -e "s/#PermitRootLogin no/PermitRootLogin no/g" -i /etc/ssh/sshd_config

sed -e "s/PasswordAuthentication yes/PasswordAuthentication no/g" -i /etc/ssh/sshd_config
sed -e "s/#PasswordAuthentication yes/PasswordAuthentication no/g" -i /etc/ssh/sshd_config
sed -e "s/#PasswordAuthentication no/PasswordAuthentication no/g" -i /etc/ssh/sshd_config

gpasswd -a "${USERNAME}" sudo

install -d -m 0700 -o "${USERNAME}" -g "${USERNAME}" /home/"${USERNAME}"/.ssh
mv /root/.ssh/authorized_keys /home/"${USERNAME}"/.ssh/authorized_keys
chown "${USERNAME}":"${USERNAME}" /home/"${USERNAME}"/.ssh/authorized_keys

passwd -d root
passwd -l root

hostnamectl set-hostname "${HOSTNAME}"

reboot

ちなみに、このスクリプトでは以下のことを行っています。

  • 新しいユーザーの作成
  • rootユーザー(マジでヤバイ権限を持ってるデフォルトユーザー)でログインできないようにする
  • 新しいユーザーでSSHログインできるようにする
  • ホスト名の変更

つまりセキュリティ上望ましいセットアップを自動で行い、ついでに管理もやりやすくするためのスクリプトです。

ここまでできたら「次へ」を押して支払い方法などを選択し、VPSの契約を終了してください。

V. ログインして操作してみよう

それでは前の章で契約したVPSに実際にログインしてみましょう。

まずはサーバーのIPアドレス(=インターネット上での住所)を調べます。
ConoHaのコントロールパネルより「サーバー」に移動すると、契約しているサーバーの一覧が表示されます。
先ほど契約したサーバーのネームタグをクリックすると、「ネットワーク情報」の欄に「IPアドレス」という項目があります。(198.51.100.1のような4つの数字が連なったアドレスです。)

このIPアドレスは今後も必要なのでメモしておきましょう。

さて、それではパソコンのターミナルに、以下のコマンドを入力してください。

ssh サーバーのユーザー名@サーバーのIPアドレス -i 秘密鍵のパス

私の場合は以下のようなコマンドになりました。

ssh misskey@198.51.100.1 -i C:\Users\chikage\.ssh\id_ed25519

このコマンドの意味は、「sshくん、”198.51.100.1″っていう住所のコンピュータに、”misskey”というユーザーでログインしてね!あ、あと”C:\Users\chikage\.ssh\id_rsa”にある秘密鍵を使わないとログインできないから注意してね!」です。

SSHとは

これまでに何度か出てきた「SSH」について少し説明しておきます。
SSHは超簡単に言うと、「インターネット越しで安全に遠隔操作をする仕組み」です。
今回はサーバーが手元にあるわけではないので、SSHを使った遠隔操作をするんですね。

このコマンドを実行するとパスワードを入力するよう促されます。
ここで入力するのは、「III. 公開鍵の登録」で作成した秘密鍵のパスワードです。

パスワードを入力すると、ずらっとサーバーの情報が表示されます。これで接続は完了です。
今後メンテナンスをする際にも、同じ方法で接続してください。

接続が完了すると、インターネット越しにサーバーにコマンドを送ることができるようになります。
実際に簡単な操作をサーバー上で行ってみましょう。

それではまず最初に、パスワードを変更してみます。
現在のパスワードはセットアップスクリプトで設定したパスワードになっていますが、セットアップスクリプトが外部に漏れればパスワードも漏れてしまいます。必ず変更しましょう。

パスワードを変更するには以下のコマンドをサーバーで実行します。

passwd

このコマンドの意味は、「パスワードを変更して!」です。

余談ですが、このコマンドがとてもシンプルなのには理由があります。
実はコマンドは実行した履歴がすべて残っているため、コマンドの中にパスワードなどをべた書きしてしまうと履歴にパスワードがそのまま残ってしまうんですね。
なのでコマンドを実行した後に、そのコマンドがパスワードを別途聞いてくれる、手の込んだ仕組みになっています。

“passwd”を実行すると、現在のパスワードと新しいパスワードを聞かれます。
順番に答えていってください。

misskey@misskey-server:~$ passwd

Changing password for misskey.
misskeyのパスワードを変えるね。

Current password:
今のパスワードは?:

New password:
新しいパスワードは?:

Retype new password:
確認のためにもう一回パスワードを入れてね:

passwd: password updated successfully
おっけー!パスワードを変更できたよ!

次に、アップデートをするコマンドを実行してみましょう。

sudo apt update
sudo apt upgrade

これらのコマンドについて少し説明します。

まずすべてのコマンドの頭についているsudoは、「root(管理者)アカウントで実行して」という意味のコマンドです。
これをつけるとパスワードを聞かれる代わりに、一般ユーザーではできない危険な操作ができるようになります。

次のaptは、「パッケージマネージャー」というソフトウェアの名前です。
これはコマンドひとつでソフトウェアのインストール、アップデートなどを行ってくれる優れものです。

それより後ろに書かれているのが、aptに何をしてもらうかの情報です。

  • apt updateは、aptで管理できるソフトウェアの情報(何がインストールできるか、最新バージョンは何か等)を更新するコマンドです。
  • apt upgradeは、apt updateで得た情報をもとに更新できるソフトウェアを自動で更新するコマンドです。
    これを実行すると、更新予定のソフトウェア一覧を表示したうえで、本当に更新するか聞かれますので、y(はい)かn(いいえ)で答えてください。
  • (今回は使用していませんが)apt installは、apt updateで得た情報をもとにソフトウェアをインストールするコマンドです。
    これを実行すると、インストール予定のソフトウェア一覧を表示したうえで、本当にインストールするか聞かれますので、y(はい)かn(いいえ)で答えてください。

これらのコマンドは、システムのメンテナンスに使用します。覚えておきましょう。

なお、最初のアップデートでは「設定ファイル新しくなってるけど変える?」と聞かれますが、セットアップスクリプトでファイルを書き換えているせいなので、変更しないようにして進めてください。

2. Misskeyが動くようにしよう

これでホストが立ちました。

次はMisskeyを実際に動かしてみます!

I. ドメインを用意する

下準備として、外部からmisskeyにアクセスするためのドメインを購入します。

ドメインとは

misskey.ioとか、chikage.netとか、ブラウザのアドレスバーの最初の方に表示されているのがドメインです。

ドメインとは、超簡単に説明すると「インターネット上の住所をわかりやすくするための名前」です。
インターネット上のコンテンツには、先ほど確認したIPアドレスがわかればアクセスすることが可能です。
しかしIPアドレスは規則性のない数字の組であるため、人間が覚えて使うには不便ですよね。
そこで、それぞれのIPアドレスに名前を振ってわかりやすくしよう!という目的でできたのがドメインです。

ドメインを取得できるサービスはいろいろありますが、今回はCloudflareで取得します。
(すでにドメインを持っている場合は、そのサブドメインでの運用でもOKです。その場合の手順はこの章の一番下に手順を書いてあります。)
Cloudflareはドメインを原価で提供しているため、どのサービスよりも安く購入・維持が可能です。
また、後述するCDNの機能も無料で提供してくれているため、個人でWebサービスを運営する場合はとてもありがたいサービスです。

まずはCloudflareのアカウントを作成しましょう。

Just a moment...

こちらからアカウントを作成してください。
表示が英語の場合は、右上の言語選択より日本語が選択可能です。

アカウントが作成できたら、サイドバーの「ドメイン登録」→「ドメインの登録」からドメインを購入します。
使用したいドメインを検索して、空いていたら購入を押して先に進みます。
トップレベルドメイン(.comなど、ドメインの最後につく部分)に迷った場合「サポートされている拡張機能」より使用できるトップレベルドメインが確認できますので、気になるものを探してみてください。
それでも迷う場合には、.comか.netをお勧めします。
これらは安価でレジストリ(ドメインを管理する組織)がちゃんとしている、知名度のあるドメインです。

購入画面にて個人情報を入力する必要がありますが、これらはすべて英語で、必ず正確な情報を入れてください。
(ここに書いた情報は国と県以外Cloudflareが間に入って隠してくれます)

Cloudflareのアカウントを作成するところまでは同じです。

アカウントが作成できたら、サイドバーの「Webサイト」→「サイトを追加する」よりすでに持っているドメインを追加してください。

プラン選択画面になりますが、フリープランで十分なので「Free」を選択して「続行」。

その時点で追加するドメインに登録されているDNSレコード(そのドメインの示すIPアドレスなど)が表示されるので、確認して「続行」してください。

次の画面に、レジストラ(ドメインを買った業者)で設定する必要のある情報が表示されます。
各レジストラによって設定方法は違うため、ご利用のサービスのヘルプなどを参考に設定を行ってください。

II. Cloudflareの設定をする

CloudflareはCDNという機能を提供しています。
この機能は簡単に言うと、「私たちのサーバーをユーザーさんとの間にはさんで、あなたのサーバーを守るよ!」という機能です。

CDNは通常有料ですが、なぜかCloudflareは無料で提供してくれているため、ありがたく使わせていただきましょう。

一見するとすべて無料のサービスなんて怪しいですよね。
でも実は、ITの世界においてはままある話だったりします。

Cloudflareが無料で提供する理由に関しては、以下の節に書かれています。

無料プランの概要
無料プランでは、無料でのSSL証明書、CDN、DDoS攻撃対策、サイト保護など、必要な基本機能がすべて提供され、ウェブサイトを高速化します。今すぐチェック。

Misskeyもそうです。AGPL-3.0にさえ従えば、我々は自由にMisskeyを使用できます。

https://github.com/misskey-dev/misskey/blob/develop/LICENSE

考え方の根本には、この業界にある「自由」という考え、風潮があります。
私も言葉にできるほど理解はしていませんが、近年のAIと著作権の問題の理解の手助けにもなると思いますので、お時間ある場合にはぜひ以下の記事を見ていただければと思います。

自由ソフトウェアとは? - GNUプロジェクト - フリーソフトウェアファウンデーション
自由ソフトウェア
利用者の"自由"を最大限尊重するソフトウェアの呼称として、リチャード・ストールマンによって提唱された概念。
フリーカルチャー運動 - Wikipedia
プロプライエタリなDRM - GNUプロジェクト - フリーソフトウェアファウンデーション

私ですか?私は……自由なんて嫌いです。自由を求めた人間ほど醜くなれるものを知らないので……なんてね。冗談です。

DNSレコードを挿入する

まずはMisskeyで使用するドメインを登録します。

MisskeyをはじめとするActivityPubのサーバーは、一度運用を開始するとサーバーの立て直しができなくなります。(厳密にはデータベースを初期化できなくなります。)
万が一サーバーを消し飛ばしてしまった場合、最悪そのドメインは二度と使えなくなるということなんですね。
そのため、学習で建てる場合には適当なサブドメインを使用することをおすすめします。

今回はmi.chikage.netを使用すると仮定して説明します。

サブドメインとは

mi.chikage.netや、blog.chikage.netといった、本体のドメイン(chikage.net)の前に階層(mi.やblog.等)の増えたドメインのことです。

サイトごとにドメインを取得してしまうとドメインの管理料が膨れ上がったり、欲しいドメインが取れなかったりで大変ですよね。
そこで、一つドメインを持っていれば同じ働きをするサブドメインを発行できるようになっています。

Cloudflareのトップより、(取得したドメイン)→「DNS」→「レコード」に進むとDNSレコードの編集が行えます。
レコードの追加ボタンを押すと上の画像のような画面になりますので、画像の通りに入力・確認して「保存」を押してください。

Cachingの設定

Cloudflareのトップより、(取得したドメイン)→「Cashing」→「Cache Rules」→「ルールを作成」に進み、キャッシュ方法に関するルールの設定をします。

一つ目のルールは以下のようにしてください。

二つ目のルールは以下のようにしてください。

以下の順番になるように、必要に応じて並べ替えてください。

SSL/TLSの設定

暗号化・通信関連の設定をします。

Cloudflareのトップより、(取得したドメイン)→「SSL/TLS」→「概要」と進み、「フル(厳密)」にチェックを入れてください。

同じく(取得したドメイン)→「SSL/TLS」→「オリジン サーバー」と進み、「認証済み Origin Pull」を有効にしてください。

これらはサーバーを保護するために必要な操作となります。

III. Dockerをインストールする

ここからはサーバーでの操作に戻ります。

今回、Misskeyを簡単に動かすために「Docker」というソフトウェアを使います。

このDockerは超簡単に説明すると、「環境とか難しいことまるごと全部ひっくるめてパッケージングできるソフト」です。
その特性を生かして、他の人が作った環境(これをイメージと言います)をそのまま手元で動かせます。
今回は難しいことを極力考えない方針で行くので、Misskeyの開発陣やその他のソフトウェアの制作チームの作ったイメージをそのまま使わせていただきます。

さて、それではすべての基礎となるDockerをインストールしてみましょう!

サーバーで以下のコマンドを実行してください。

curl https://get.docker.com | sh

このコマンドの意味は、「curlくん、”https://get.docker.com”の内容を持ってきてshくんに渡してあげて。shくんはもらったコマンドをそのまま実行してね。」という意味です。

https://get.docker.comにあるのは、Dockerの開発チームが提供してくれているめっちゃ簡単にDockerをインストールできるスクリプトです。
実行するだけですべて自動でインストールしてくれます。

IV. Misskeyを動かす

さて、ついにMisskeyを動かすときが来ました!

と言っても、Misskeyはそれ単体では動かず、PostgreSQLやRedis、Nginxなどいろいろなソフトウェアを必要とします。

そこで、今回は私の作った全部入りパックを使って何も考えずにセットアップしてしまいましょう!

サーバーで以下のコマンドを実行してください。

git clone https://github.com/chikage8640/instant-misskey.git

このコマンドの意味は「『https://github.com/chikage8640/instant-misskey.git』というプロジェクトをgit(ソース管理システム)でサーバーにコピー(clone)してね。」です。

すると、サーバーに「instant-misskey」というディレクトリ(Windowsで言うフォルダ)ができます。どんなファイルやディレクトリがあるか確認する、lsコマンドで確認してみましょう。

misskey@misskey-server:~$ ls
instant-misskey

青文字がディレクトリ、白文字がファイル、緑文字が実行可能なファイルです。
ここでは青い文字で「instant-misskey」と表示されれば成功です。

cd instant-misskey
bash config.sh

それでは確認ができたら、作業を簡単にするために「instant-misskey」ディレクトリの中へ移動します。cdというコマンドで移動が可能です。

初期セットアップは、私の作ったスクリプトで行います。
bash config.shというコマンドを実行してください。
bashはコマンドを実行するためのコマンドです。ちょっとわかりにくいですが、ここでは「config.sh」というファイルに書いてあるコマンドを実行する、と理解してください。

対話式で進んでいきますので、順番に必要な情報を入れていってください。

Misskeyを運用するドメインを入力してください。(例: mi.example.com)
IIで決定したMisskeyを動かすドメインを入力します。

PostgreSQLのパスワードを入力してください。
なんでもいいです。内部的に使用されるパスワードです。
覚えている必要もそこまでないので、適当なものを設定してください。

Meilisearchを有効化しますか?(y/N)
Meilisearchを有効化するスクリプトを実行するかどうかです。
よほどの大規模サーバーでなければ必要ありません。nと入力して続行してください。

SSL証明書を編集しますか?(Y/n)
yと入力して続行してください

サーバー証明書を開きます。(キーを押して続行)
プライベートキーを開きます。(キーを押して続行)
それぞれ、何かキーを押すと「nano」というテキストエディタが開きます。
後述する手順に沿って、証明書をコピペしてください。

CloudflareのオリジンプルにmTLSを使用しますか?(Y/n)
yと入力して続行してください。

SSL証明書の編集について

SSL証明書とは、インターネット上の通信を改ざんされてしまうことを防いだり、暗号化して中身を覗き見られないようにするのに必要な証明書です。

Cloudflareのトップより、(取得したドメイン)→「SSL/TLS」→「オリジンサーバー」→「証明書を作成」で作成できます。作成する証明書は、以下の画像のように設定してください。

「作成」を押すと証明書が表示されます。

「サーバー証明書」には「オリジン証明書」を、「プライベートキー」には「プライベートキー」をコピペしてください。

Nanoの使い方

Nanoは、Ubuntuに搭載されている標準的なテキストエディタです。
Windowsで言う「メモ帳」みたいなものですね。

すべてコマンドラインで実現するため、少しクセのある操作方法ですが、比較的直観的な操作が可能です。

Nanoにペーストする際、Ctl+Vは使えません。マウスで右クリックするとペーストできます。

ペーストしたらCtl+Xで終了できます。
終了時、保存するか聞かれますのでyキーを押して保存画面へ行き、Enterで保存してください。

これで準備はすべて整いました。
Misskeyを起動してみましょう!

以下のコマンドを実行してください。これが起動コマンドです!

sudo docker compose up -d

しばらく待つと起動が完了します。設定したドメインをブラウザで表示した際、以下の画面が表示されれば成功です!

3. Misskeyを設定しよう

I. 管理者アカウントを作る

Misskeyをインストールしたらすぐに、管理者アカウントを作成しましょう。

管理者アカウントは慣習的に「admin」というユーザー名が使用されますが、これにこだわる必要はありません。
むしろ管理者アカウントのIDは外部からわからないほうがいいため、適当な名前にすることをお勧めします。

ここで作成するアカウントは基本的に使用しません。
万が一第三者にログインされると問題なため、非常に強固なパスワードを設定してください。
これに限ってはどこかにメモして忘れてしまっても構いません。

アカウントを作成すると初期設定のポップアップが表示されますが、右上の×ボタンで閉じてスキップしてしまってOKです。

II. Misskeyの設定を行う

Misskeyのサイドバーに「コントロールパネル」という項目が増えています。
ここからMisskeyの運営にかかわるログや情報の照会、設定の変更ができます。

今回は各種設定に関して、表示されている順番に必要な設定のみ説明していきます。

全般

サーバー名など、見た目の設定を行います。

サーバー名、管理者の名前、管理者のメールアドレスは設定しておきましょう。
これらはすべて公開されるため、普段使いのメールアドレスではない、専用のアドレスを用意することをお勧めします。(後述の「メールサーバー」で作るメルアドでもいいでしょう。というかそれが一番丸いと思います。)

サーバーの紹介は、公開サーバーの場合書いておくと人が集まりやすくなります。
HTMLが使用できるので、うまいこと魅力的な文を書いてください。

それ以外はデフォルトのままでOKです。

ブランディング

アイコンやバナー、エラー画像などを設定できます。

とくにいじる必要はありませんが、必要なら設定してください。見た目がリッチになります。
なお、特に理由が無ければ後述のオブジェクトストレージの設定を行ってから作業を行ってください。

  1. adminアカウントでドライブを開く
  2. 使いたい画像をアップロード
  3. 右クリックして「URLをコピー」
  4. 画像を設定したい項目に張り付けて「保存」

テーマカラーは、他のサーバーから見たときのこれの色です。設定しておいた方が外からの見栄えはよくなります。

モデレーション

ここは完全にお好みです。
おひとりさまサーバーなら「誰でも新規登録できるようにする」をオフにするくらいです。

外部に開放するサーバーの場合には、サーバールールや利用規約、プライバシーポリシーなどをちゃんと設定しておきましょう。
また、スパム防止のためアカウント登録にメールアドレスを必須にすることを強くお勧めします。

メールサーバー

これはいろいろなことに必要になるので設定しておきましょう。

もしメールサーバーつきのレンタルサーバーを借りている場合は、それを使用してください。

メールサーバーを持っていない場合、Cloudflare Email RoutingとGmailで簡易的にメールサーバーとして運用ができます。おひとり様くらいならこれで十分です。

以下のページを参考に設定してください。

Misskeyのメール鯖にGmailを使う方法 + 自分のドメインを使う方法
MisskeyのメールサーバーにGmailを使う方法です
CloudflareとGmailでmisskeyのメールサーバーを設定 - Qiita
やることCloudflare Email Routingを使って自分で立てたMisskeyインスタンスにメールサーバーを設定.必要なもの独自ドメインCloudflareにドメインを登録しておく…

オブジェクトストレージ

これも必須です。
なしでも運用できなくはないですが、バックアップ(後述)がぶくぶく膨れ上がるのでやめておいた方がいいでしょう。

今回はCloudflare R2を使用します。なんやかんやR2が一番安いです。

Cloudflareのダッシュボードトップより「R2のアクティベート」を押し、決済情報を入力します。

その後「バケットを作成する」よりバケット(オブジェクトストレージの容器)を作ります。
バケット名は半角英数字で分かりやすい名前にしてください。
今回は「mi-objstg」として話を進めます。

作成後、作ったバケットの名前をクリックし、詳細へ進みます。
「設定」→「パブリックアクセス」→「カスタムドメイン」→「ドメインに接続」と進み、ユーザーさんがアクセスするときに使うサブドメインを設定します。
今回は「mi-objstg.chikage.net」として話を進めます。

一旦R2のトップに戻り、「R2 APIトークンの管理」→「APIトークンを作成する」よりAPIトークンを発行します。
権限は「オブジェクト読み取りと書き込み」に、バケットの指定は「特定のバケットにのみ適用」とし、先ほど作成したバケットを指定してください。

ここまでに設定した項目を、以下の画像を参考にMisskeyに設定していきます。
Prefixは何でもいいです。今回はuserにしています。(ユーザーのアップロードした画像が入る場所のため)

セキュリティ

必要な部分だけ説明します。書いてないところはいじらなくてOKです。

Botプロテクション

Turnstileを使います。

Cloudflareのダッシュボードトップより「Turnstile」→「サイトを追加」と進んでください。
サイト名にはわかりやすい名前、ドメインにはMisskeyを運用するドメインを選択し、「作成」を押します。

表示されたサイトキーとシークレットキーをMisskey内の設定にコピペして保存すれば完了です。

Log IP address

理由が無ければ有効化しておきましょう。

これは外部に開放しているサーバーの場合、自サーバーにて犯罪予告などをされた際に警察から提出を求められることがあります。
また、不正アクセスに遭ったアカウントの調査などにも必要です。

リレー~その他

触らなくてもヨシ!(気になる場合は見てみましょう)

III. 個人用のアカウントを作る

先ほど作成したアカウントは普段使いに向かないため、個人で使うアカウントを作ります。

正しく設定ができているかの確認も含めて、通常のユーザーと同じ方法でアカウントを作成します。
その後適当にチュートリアルを済ませ、何かノートを投稿してください。(ここで投稿しないと次の手順でコケます。)

その後 I. で作った管理者アカウントに戻り、「コントロールパネル」→「ロール」→「ロールの作成」からロールを作成します。
このロールの名前は「管理者」などの名前にし、ロールの権限を「管理者」にしてください。

作成後、「アサイン」から作った個人アカウントを追加して終了です。

同じ手順でモデレーターなども追加できます。

4. 保守

サーバーは建てたら建てっぱなしっというわけにもいきません。

サーバーを維持するために必要なことを確認していきましょう。

I. バックアップ

Misskeyは仕様上、データベースを吹き飛ばすと復旧が不可能になります。
そのドメインではもうAPのサーバーは建てられなくなりますので、何があってもデータベースを吹き飛ばしてはいけません。

逆にデータベースさえ飛ばさなければ復旧は可能ではありますが、データベースのみでの復旧には専門的な知識と膨大な労力を要し、それでも完全復旧は不可能です。

そこでinstant-misskeyには、サーバーを完全に停止してフルバックアップを取るスクリプトが含まれています。今回はその方法をお伝えします。

rcloneのセットアップ

バックアップ先の柔軟性を確保するため、このスクリプトではrcloneでバックアップをしています。

rcloneは、CLI上から数々のクラウドストレージを操作できるソフトウェアです。
実は僕のサーバーはバックアップ先がGoogle Driveになっていたりしますが、これもrcloneでバックアップしているのでこのスクリプトがそのまま使えます。

今回は先ほど使用したのと同じCloudflare R2にバックアップしてみます。その他のクラウドストレージの場合は以下のドキュメントを参考にするか、適当にググって読み替えてください。

Documentation
Rclone Usage

まずはrcloneのインストールです。以下のコマンドを実行してください。

sudo -v ; curl https://rclone.org/install.sh | sudo bash

これで自動でインストールされるはずです。

次は保存先のストレージの作成です。

Cloudflare R2の「バケットを作成する」よりバケットを作ります。
バケット名は半角英数字で分かりやすい名前にしてください。
今回は「misskey-backup」として話を進めます。

一旦R2のトップに戻り、「R2 APIトークンの管理」→「APIトークンを作成する」よりAPIトークンを発行します。
権限は「オブジェクト読み取りと書き込み」に、バケットの指定は「特定のバケットにのみ適用」とし、先ほど作成したバケットを指定してください。

ここで表示された情報をもとに設定ファイルを作成します。
以下の内容で/root/.config/rclone/rclone.confを作成してください。(コマンドだとsudo nano /root/.config/rclone/rclone.conf

[r2]
type = s3
provider = Cloudflare
access_key_id = # アクセス キー ID
secret_access_key = # シークレット アクセス キー
endpoint = # エンドポイント
acl = private

これでrcloneの設定は完了です。

バックアップの実施

instant-misskeyディレクトリにて以下のコマンドを実行してください。

sudo bash ./maintenance.sh -b r2:misskey-backup

-bの後には「rcloneでの設定名:バケット名」を入力してください。

このコマンドを実行すると、サーバーが停止してバックアップが取られ、その後再起動します。

II. アップデート

全てのソフトウェアは定期的なアップデートが必要です。
定期的にアップデートを確認し、必要に応じて以下のコマンドでアップデート作業を行ってください。

アップデートが必要なソフトごとのコマンドはこんな感じです。

instant-misskey (misskey以外アップデート)

sudo bash ./maintenance.sh -m

instant-misskey (misskeyもアップデート)
注意ですが、こちらはアップデート前に移行作業が必要になることがあります。
Releases · chikage8640/instant-misskeyおよびリリースノート | Misskey Hubを読んでからアップデートしてください。

sudo bash ./maintenance.sh -u

rclone

sudo rclone selfupdate

その他すべて

sudo apt update
sudo apt upgrade

III. (応用編)自動化

これらすべてを手動でやるのは大変ですよね。
そこで、できる範囲のことは自動化をしてしまいましょう。

Linuxにはcronという、指定した時間にコマンドを実行してくれる便利な機能があります。
設定方法は以下の通りです。(今回はアップデートコマンドに管理者権限が必要なのでsudoしていますが、通常ユーザーでもcronは使用可能です。)

  1. sudo crontab -eで編集画面を呼び出す
  2. スケジュールとコマンドを書き込む(もしくは編集・削除する)
  3. そのまま保存して閉じる

スケジュールとコマンドは以下の書式で書き込みます。すべて半角スペースで区切ります。

分 時 日 月 曜日 コマンド

例えば、毎日夕方の5時半にコンピュータの再起動をするコマンドはこんな感じです。

30 17 * * * reboot

今回はinstant-misskeyのバックアップとMisskey以外のアップデートを自動化します。
バックアップの頻度とサーバーダウンしても問題ない時間に合わせて入力してください。
例として、毎朝3時55分に行う場合の書き方は次の通りです。

55 3 * * * bash /home/[ユーザー名]/instant-misskey/maintenance.sh -bu r2:misskey-backup

ちなみに、maintenance.shのオプションは複数指定が可能です。今回は-buとすることで、バックアップとアップデートを同時に行っています。

IV. (応用編)監視

おひとりさまサーバーでない場合、鯖が落ちたり異常な状態になっていないかの監視が必要です。

今回はmackarelを導入してみましょう。

Mackerel(マカレル): 新世代のサーバー管理・監視サービス
はてなが開発した新世代のサーバー管理・監視サービスです。仮想サーバーなどクラウドサービスをMackerelで統合管理および監視ができます。

サインアップすると導入までガイドが案内してくれるので詳しい説明は省きますが、導入後にいくつか設定した方がいい項目があるので紹介します。

まずはmackerel-agent-pluginsをインストールします。

sudo apt install update
sudo apt install mackerel-agent-plugins

その後、/etc/mackerel-agent/mackerel-agent.confをnanoなどで編集します。
以下の内容を最後尾に追記してください。

[plugin.metrics.linux]
command = "mackerel-plugin-linux"

[plugin.metrics.docker]
command = ["mackerel-plugin-docker", "-name-format", "name"]

5. 最後に

いかがだったでしょうか。

この記事では技術的な面に関して書かせていただきましたが、実際に建てるとなると他にも考えることがたくさんあります。
おひとりさまサーバーだと、カスタム絵文字を自分で追加しないと使えなかったり、維持コストの問題で大手のサーバーの方が住みやすいという結論にたどり着くことでしょう。
ひとたび公開サーバーにすれば、スパムなどへの対処や安定動作など、技術的にもさらなる負担がのしかかってきます。トラブルを未然に防ぐしくみづくりやそれでも起こるトラブルの解決、昼夜を問わないモデレーションにユーザー対応、さらにはのしかかる責任と、コミュニティ運営の大変さに嫌になることもあると思います。
それでもこの記事を見て、少しでもMisskeyのサーバーを建てることに興味を持っていただければ幸いです。

コメント

タイトルとURLをコピーしました