こんにちは。
株式会社アドグローブ ソリューション第一事業部の徳村です。
X (Formally Twitter) に暗雲立ち込める時勢の中、SNS の移行を検討されている方も多いのではないでしょうか。
その中で、今は亡き青い鳥に代わり、Mastodon を始めとした Fediverse が注目されています。
今回はこの Fediverse から、Misskey を自分のためだけに構築していきたいと思います。
何の準備もしていない 無 の状態から羽ばたくべく、Vultr と Cloudflare に全力で頼っていきます。
構成
Misskey
version: 2023.10.0 (作業時の最新版) github.com
Virtual Private Server (VPS)
今回は初挑戦ということもあり、 Vultr で一番安くあげられそうなスペックで借りました。
以下の構成で月$6です。インストール/アップデート時以外の負荷はそこまで掛からないらしく、今のところ不便はありません。
もちろん、ある程度の人数を捌けるサーバーとして運用したい場合は、余裕を持った性能にした方が良いでしょう。
後からスケールアップすることも可能なため、最初は様子見で、足りないようであれば増やす、といった流れでも良いかもしれません。項目 内容 Server Vultr Cloud Compute Location Tokyo OS Ubuntu 22.04 Application NodeJS Storage 25 GB NVMe vCPU/s 1 vCPU RAM 1024.00 MB Additonal Enable IPv6 DNS
Cloudflare Registrar でドメインを取得、管理します。
Object Storage
Cloudflare R2 を利用します。
Misskey のメディアの保存先と、バックアップ先として使用します。10 GB / 月 まで無料で利用することができます。
大規模な運用をしないのであれば、十分な量です。
手順
ドメインの購入から Misskey の起動までの一連の流れを記載していきます。
Cloudflare で Domain の取得
Cloudflare で好みのドメインを購入していきます。
このドメインが、ユーザの所属するサーバーを示す識別子としてアカウントの ID に付与されますので、慎重に決めましょう。
@syuilo@misskey.io
←の2つ目の@
以降の部分となります。
Cloudflare にログインして、ダッシュボードを開きます。
左のサイドバーから ドメイン登録 > ドメインの登録 を開いてください。
好みのドメイン名で検索すれば、利用可能な類似のドメイン名が一覧で表示されます。
利用できないドメイン名であれば、その旨も表示されるので再考してください。
利用したいドメイン名を選択できたら、購入を完了します。
Vultr で VPS を構築する
Vultr にログインし、新規サーバーを作成します。
Choose Server で Cloud Compute
を選択します。
CPU & Storage Technology で好きなものを選んでください。
左2つが無難かと思います。
Server Location で近所を選択します。
Server Image の Operatins System で Ubuntu
の LTS を選択します。
Server Image の Marketplace Apps で NodeJS
を選択します。
Server Size で好みのスペックを選択してください。
Add Auto Backups もお好みで選択してください。
Additional Features で Enable IPv6
を選択します。
Server Hostname & Label で任意の名前を入力してください。
Deploy を開始します。
インストールが終了したら、VPS の構築は完了です。
作成された VPS の詳細画面を開いて、
DNS の設定のため、IP Address
と IPv6 Address
を
SSH の設定のため、root ユーザの Password
を確認しておいてください。
Cloudflare で DNS の設定
Cloudflare のダッシュボードにて、左のサイドバーから ドメイン登録 > ドメインの管理 を開きます。
先程購入したドメインが追加されているので、該当ドメインの 管理 を選択します。
クイックアクションの DNS の設定を更新する を選択します。
DNS レコードの管理画面が表示されるので、レコードの追加 を選択し、以下の内容で保存します。
名前には利用したいサブドメインを設定してください。
ドメインがexample.com
だった場合、サブドメインをmk
とすると、mk.example.com
がサーバーのURLとなります。
サブドメインを付与したくない場合は、@
を入力します。
タイプ | 名前 | アドレス |
---|---|---|
A | (サブドメイン) | (VPS の IP Address) |
AAAA | (サブドメイン) | (VPS の IPv6 Address) |
SSH 接続の設定
VPS サーバーにローカルから SSH 接続が出来るよう、設定していきます。
SSH Key の生成
SSH Key を生成します。
保存先ファイルの指定はデフォルトで問題ありません。
パスフレーズは空でも生成できますが、セキュリティ面から設定しておいた方が良いでしょう。ssh-keygen -t ed25519
作成後、以下のように保存先が表示されるため、確認しておきます。
Your identification has been saved in C:/Users/USERNAME/.ssh/id_ed25519 Your public key has been saved in C:/Users/USERNAME/.ssh/id_ed25519.pub
.ssh/config
の記述VPS への接続情報を
.ssh/config
に記述します。config
ファイルが既にある場合はそれに追記してください。
なければテキストエディタで新規に作成します。Host misskey # 任意の接続先名 User {{YourUserName}} # この後 VPS 上に作成する作業用ユーザ Hostname xx.xx.xx.xx # VPS の IP Address IdentityFile ~/.ssh/id_ed25519 # 上記で作成した SSH Key のファイルパス
SSH で VPS に接続
まず root ユーザで VPS サーバに接続します。
初回接続時のみ接続を続けるか確認されるため、yes
を入力してください。
root ユーザのパスワードを要求されるため、Vultr で確認した Password を入力します。ssh root@misskey
作業用ユーザを作成する
新しいユーザを作成します。
adduser {{YourUserName}}
作成したユーザに sudo 実行を許可します。
usermod -aG sudo {{YourUserName}}
VPS に SSH Key を保存する
作業用ユーザに切り替えて、SSH Key の保存先を作成します。
sudo -iu {{YourUserName}} mkdir .ssh chmod 700 .ssh cd .ssh touch authorized_keys chmod 600 authorized_keys nano authorized_keys
nano エディタが開くので、1. でローカルに生成した
id_ed25519.pub
ファイルの内容を転記してください。
Ctrl+S
で保存し、Ctrl+X
でエディタを終了できます。sshd の設定
sshd_config
を開きます。sudo nano /etc/ssh/sshd_config
以下の項目からコメントアウト(
#
)を削除し、設定を変更してください。PermitRootLogin no
: ルートのログインを禁止するPasswordAuthentication no
: パスワードでのログインを禁止する
sshd の設定をテストします。
sudo sshd -t
問題がなければ、sshd を再起動します。
sudo systemctl restart sshd
ファイアウォールの設定
SSH 接続だけを許可します。
sudo ufw allow 22/tcp sudo ufw enable
接続確認
ここまでの設定で、意図通り SSH 接続ができることを確認しましょう。
新しくコマンドプロンプトを開き、以下のコマンドで接続します。
パスフレーズを設定した場合は、入力してください。ssh misskey
作成した作業用ユーザで接続が出来ていれば、SSH の設定は完了です。
Misskey のインストール用スクリプトの実行
インストール用の shell script が公式に提供されています。
以下記事の手順に従いオプションを選択していけば、簡単にインストールを完了することができます。
Misskey install shell script v3.0.0 | Misskey Hub
途中で Cloudflare の API Key を要求されます。
書かれている通りに Cloudflare のダッシュボード を開き Global API Key
を表示、コピー/ペーストしましょう。
筆者の選択したオプションは以下になります。
新しいもの好きなので develop branch を選んでいますが、デフォルトの master branch を選んでおくのが無難です。
Install script option | Value |
---|---|
Do you use systemd to run Misskey? | Y (Use Systemd ) |
Repository url where you want to install | https://github.com/misskey-dev/misskey.git (default) |
The name of a new directory to clone | misskey (default) |
Branch or Tag | develop |
Enter the name of user with which you want to execute Misskey | misskey (default) |
Enter host where you want to install Misskey | (Own Host Name, e.g. example.com ) |
Do you want to setup nginx? | Y |
Misskey port | 3000 (default) |
Do you want it to open ports, to setup ufw or iptables? | u (To setup ufw) |
SSH port | 22 (default) |
Do you want it to setup certbot to connect with https? | Y |
Do you use Cloudflare? | Y |
Enter Email address you registered to Cloudflare | (Own Email Address) |
Cloudflare API Key | (Own Cloudflare API Key) |
Tell me which port Misskey will watch | 3000 (default) |
Do you want to install postgres locally? | Y |
Database user name | misskey (default) |
Database user password | (Any password) |
Database name | mk1 (default) |
Do you want to install redis locally? | Y |
Redis password | (Any password) |
スクリプトが問題なく完了すれば、Misskey の立ち上げは完了です。
Misskey のバージョンアップをしたいときも、上記の記事にてアップデート用のスクリプトが提供されています。
設定した Misskey の URL にアクセスし、管理者アカウントを作成してください。
Cloudflare R2 でオブジェクトストレージの設定
Cloudflare のダッシュボードを開きます。
左のサイドバーから R2 > 概要 を開き、バケットの作成を選択します。
任意のバケット名を入力して作成します。
バケットの詳細画面を開き、S3 API を確認しておいてください。
r2.dev アクセスを許可します。
また、パブリック r2.dev バケット URL を確認しておいてください。
左のサイドバーから R2 > 概要 に戻り、R2 API トークンの管理 を選択します。
API トークンの管理画面で、API トークンを作成する をします。
API トークンの作成画面で、任意のトークン名を入力してください。
また、権限で オブジェクトの読み取りと書き込み を選択します。
作成された API トークンが表示されます。
S3 クライアント用の アクセス キー ID と シークレット アクセス キー を確認してください。
この画面は一度しか表示されないため、閉じてしまわないよう注意してください。
Misskey のコントロールパネルから 設定 > オブジェクトストレージ を開きます。
以下の項目を設定してください。
Column | Value |
---|---|
Base URL | (パブリック r2.dev バケット URL) |
Bucket | (作成したバケット名) |
Prefix | (任意の Prefix) |
Endpoint | (S3 API の FQDN) |
Region | us-east-1 |
Access Key | (API トークンのアクセス キー ID) |
Secret Key | (API トークンのシークレット アクセス キー) |
Proxy を利用する を 無効 に、 アップロード時に'public-read'を設定する を 有効 にします。
Misskey のドライブに画像をアップロードし、画像がボケていなければ設定は完了です。
Cloudflare R2 でバックアップの設定
バックアップ用の R2 の用意
Misskey のオブジェクトストレージと同様に、バックアップ用のバケットを作成します。
任意のバケット名を入力して作成します。
バケットの詳細画面を開き、S3 API を確認しておいてください。更に、設定下部の オブジェクトのライフサイクル ルール を設定します。
任意の定期的な期間で、ファイルが順次削除されるよう設定しておきましょう。R2 API トークンの用意
Misskey のオブジェクトストレージと同様に、R2 API トークンを作成します。
任意のトークン名を入力し、権限を オブジェクトの読み取りと書き込み とします。
作成された S3 クライアント用の アクセス キー ID と シークレット アクセス キー を確認しておいてください。aws configure プロファイルの作成
Misskey サーバーに接続し、postgres ユーザに切り替えます。
ssh misskey
sudo su - postgres
aws configure プロファイルを作成します。
プロファイル名には任意の名前を入力してください。
AWS Access Key ID と AWS Secret Access Key には 1. で確認したものをそれぞれ入力します。aws configure --profile {{AnyProfileName}} AWS Access Key ID [None]: {{YourAccessKeyID}} AWS Secret Access Key [None]: {{YourSecretAccessKey}} Default region name [None]: Default output format [None]: json
シェルスクリプトの配置
引き続き postgres ユーザでバックアップ用のスクリプトを配置します。
nano backup-psql-all.sh
以下のスクリプトを、それぞれの環境用に置き換えた後、
backup-psql-all.sh
にペーストしてください。
YourBucketName には 1. で作成したバケット名を入力します。
YourProfileName には 3. で作成したプロファイル名を入力します。
YourEndpointName には 1. で確認した S3 API を入力します。(.com
以前まで)#!/bin/bash TIME=$(date +%Y%m%d_%H-%M-%S) cd /tmp pg_dumpall > dumpall_psql.dmp tar czf dumpall_psql.tar.gz dumpall_psql.dmp chmod 700 dumpall_psql.tar.gz aws s3 cp dumpall_psql.tar.gz s3://{{YourBucketName}}/dumpall_psql_$TIME.tar.gz --profile {{YourProfileName}} --endpoint-url {{YourEndpointName}} rm dumpall_psql.tar.gz dumpall_psql.dmp
スクリプトの権限を変更します。
chmod 744 backup-psql-all.sh
スクリプトを実行し、
dumpall_psql_yyyyMMdd_HH-mm-ss.tar.gz
のようなファイルが R2 にアップロードされていれば、スクリプトの設定は成功です。bash ./backup-psql-all.sh
crontab の設定
引き続き postgres ユーザで crontab を編集します。
crontab -e
毎日 04:00 (JST) にバックアップ実行する場合は、以下のように編集してください。
サーバーは UTC で動作しているため、JST 基準で設定するには +09:00 する必要があります。0 19 * * * bash backup-psql-all.sh
(おまけ)ノート検索の許可
デフォルトではノート検索は無効になっています。
検索を有効にしたい場合、
コントロールパネル > 管理 > ロール > ベースロール 内の ノート検索の利用 を はい に変更します。
あとがき
Misskey の持つ大きな特徴の一つとして、カスタム絵文字とそれを使ったリアクションの存在があります。
このカスタム絵文字を自由に登録し、自分だけのリアクションデッキを構築したい!と考えたことが、今回の動機の一つです。あと早く新機能を試したかった。
このような邪心でも、手軽に自分だけの城を構築できるのが、Fediverse の掲げる分散型SNSの良いところのひとつですね。
また、以下の方法で外部とのやりとりを無効化し、社内用SNSのように運用することも可能なようです。
あなたの会社でも導入してみてはいかがでしょうか。
社交性の乏しい私でも、Misskey ベースの呟きでなら、同期たちと交流できるかもしれません ;)
Misskeyでソースを変更せずに連合を完全無効化する方法 - CookieRamen
参考
偉大なる開発者たちと先駆者たちに深く感謝
- Misskey 構築の手引き | Misskey Hub
- Misskey install shell script v3.0.0 | Misskey Hub
- Misskey のサーバを設置する(v11 系) - noellabo's tech blog
- Misskey のおひとり様インスタンスを建てる
- misskey のオブジェクトストレージに cloudflare r2 を利用する - Qiita
- Misskey インスタンスで最初に設定するべきインスタンス設定とその他設定の説明 | aqz/tamaina
- misskey データベースのバックアップを cron で定期的に Cloudflare R2 に保存する | 小束弓月
- Amazon S3 と API の互換性がある Cloudflare R2 を AWS CLI から使ってみる | DevelopersIO
- Misskey で Cloudflare R2 Storage を使う
- Docker Compose 版 Misskey にノート検索 (Meilisearch) を導入する - Qiita
現在アドグローブでは、さまざまなポジションで一緒に働く仲間を募集しています。
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。
hrmos.co