【第4回】誰でもできる!自宅で始める分散型SNSサーバー構築 ─── Misskeyインストール編【Misskey】

この記事は、 KENTEM TechBlog アドベントカレンダー2024 12日目、12月12日の記事です。

みなさんこんにちは! KENTEM第二開発部でフロントエンドを担当しているO・Aと申します😺

この記事では、一般家庭の要らなくなったPCを活用して、自宅で分散型SNS(Misskey)サーバーを構築する方法を、12/9~12/13の5日間に分けて、毎日丁寧に解説していきます。

シリーズ目次

  1. 第1回:分散型SNSとは何か? tech.kentem.jp
  2. 第2回:Ubuntuの環境構築手順 tech.kentem.jp
  3. 第3回:ドメイン取得とCloudflare Tunnelの設定 tech.kentem.jp
  4. 第4回:Misskeyのインストール ←本記事 tech.kentem.jp
  5. 最終回:Misskeyのセキュリティ対策、バックアップ方法、パフォーマンス向上、機能追加 tech.kentem.jp

今回は第4回:Misskeyのインストール編です。

misskey-hub.net



Misskeyのインストールには、以下の技術スタックを使用します。

しかし、Misskeyの開発者は大変親切なので、「ターミナルにコピペしてインストールするばかりなら シェルスクリプトでいいじゃん!」と一発でほぼ全部インストールしてくれるシェルスクリプトを提供してくださっています。

この辺の導入の簡単さもMisskeyを選んだ理由の一つですね。

では、早速始めていきましょう。


CloudflareのSSL/TLS設定

まず、以下のURLからCloudflareのダッシュボードを開きましょう。

dash.cloudflare.com

自分のドメインをクリックします。

左のメニューから、「SSL/TLS」→「概要」をクリックして、「SSL/TLS暗号化」の「設定」をクリックします。

「カスタムSSL/TLS」の「選択する」をクリックします。

「フル」を選択して、「保存」をクリックします。


Misskeyのインストール

ターミナルを開きます。

以下のシェルスクリプトをターミナルに入力してEnterを押します。

(とはいえ入力するのも面倒なので、コピーし、右クリックで貼り付け推奨です)

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh


これより先、ターミナルで質問/指示されたとおりに入力していきます。


Install Method
Do you use systemd to run Misskey?:
Y = To use systemd / n = To use docker

ここではsystemdを使用するので、yをタイプしてEnterを押します。


Misskey setting
Repository url where you want to install:
> https://github.com/misskey-dev/misskey.git

インストールしたいMisskeyのリポジトリを選択します。

デフォルトのままEnterを押します。


The name of a new directory to clone:
> misskey

Misskeyのインストール先のディレクトリ名を決めます。

デフォルトのままEnterを押します。


Branch or Tag
> master

Misskeyのブランチを選びます。

デフォルトのままEnterを押します。


Enter the name of user with which you want to execute Misskey:
> misskey

サーバー上でMisskeyを実行するユーザー名を決めます。

デフォルトのままEnterを押します。


Enter host where you want to install Misskey:
> example.com

第3回でCloudflare Tunnelで設定したドメインを入力します。

例えば設定していたドメインが、サブドメインも含めて「mi.hogehoge.jp」なら、そのとおりに入力しましょう。

入力してEnterを押します。


Nginx setting
Do you want to setup nginx?:
[Y/n] > 

Nginxの設定をするか聞かれます。

設定するのでyをタイプし、Enterを押します。


Do you want it to open ports, to setup ufw or iptables?:
u = To setup ufw / i = To setup iptables / N = Not to open ports
[u/i/N] > 

ファイアウォールの設定をufwかiptablesで行うかを決めます。

今回はCloudflare Tunnelを使用しているので、ポートを開放する必要はありません。

nをタイプし、Enterを押します。


Certbot setting
Do you want it to setup certbot to connect with https?:
[Y/n] > 

Certbotの設定で、https接続を利用するかの質問です。

yをタイプしてEnterを押します。


Cloudflare setting
Do you use Cloudflare?:
[Y/n] > 

Cloudflareを使うかどうか確認されます。

yを押してEnterを押します。


OK, you want to use Cloudflare. Let's set up Cloudflare.

Make sure that Cloudflare DNS is configured and is in proxy mode.

Enter Email address you registered to Cloudflare:
> 

Cloudflareに登録したEmailアドレスを入力してEnterを押します。


Open https://dash.cloudflare.com/profile/api-tokens to get Global API Key and enter here it.
Cloudflare API Key: 
>

CloudflareのAPIキーの入力を求められます。

APIキーを取得するために、以下のURLからCloudflareのダッシュボードを開きましょう。

dash.cloudflare.com

自分のドメインをクリックします。

開いたら、下にスクロールし、右サイドバーから「APIトークンを取得」をクリックします。

「APIキー」の「Global API Key」の「表示」をクリックします。

パスワードを入力します。

APIキーが表示されます。

「クリックしてコピー」をクリックし、先程のターミナルに右クリックで貼り付け、Enterを押します。


Tell me which port Misskey will watch: 
Misskey port: 
> 3000

Misskeyのポートを設定します。

デフォルトのままEnterを押します。


Database (PostgreSQL) setting
Do you want to install postgres locally?:
(If you have run this script before in this computer, choose n and enter values you have set.)
[Y/n] > 

データベースをインストールするか質問されます。

yをタイプしてEnterを押します。

ただし、何らかの事情(途中でエラーが発生したなど)でこのシェルスクリプト実行が2回目の場合は、既にデータベースが作られているので、「n」をタイプして、既存のデータベースのユーザー名とパスワードを入力してください。


PostgreSQL will be installed on this computer at localhost:5432.
Database user name: 
> misskey

データベースのユーザー名を決めます。

デフォルトのままEnterを押します。


Database user password: 
> 

データベースのパスワードを決めます。

忘れないように必ずメモしておきましょう。

入力したらEnterを押します。


Database name:
> mk1

データベースの名前を決めます。

デフォルトのままEnterを押します。


Redis setting
Do you want to install redis locally?:
(If you have run this script before in this computer, choose n and enter values you have set.)
[Y/n] >

Redisの設定をします。

データベースの時と同じく、シェルスクリプトが1度目の試行ならy、問題などが起きた場合の再挑戦(2度目以降)ならnを入力して、Enterを押します。


Redis password:
> 

Redisのパスワードを決めます。

忘れないようにメモしておきましょう。

入力したらEnterを押します。

その後、自動でインストール作業が進みます。3分ほど待ちましょう。

無事に終わると、

Process: create .misskey.env;
ALL MISSKEY INSTALLATION PROCESSES ARE COMPLETE!
Jump to https://mitest.seritude.com/ and continue setting up your instance.
This script version is v3.0.0.
Please follow @joinmisskey@misskey.io to address bugs and updates.

という表示が出ます!

これはMisskeyサーバーが正常に建っている証です。


いざ、ドメインにアクセスしてみましょう!

以下の画像のようなページが表示されていれば成功です!

おめでとうございます!!!

⚠ただし、まだこの段階では初期設定が終わっていないので、SNSのURLが分かるようなスクリーンショットを絶対に第三者に公開しないでください!

もしページが表示されなかったら?

可能性としては以下が挙げられます。

  • Misskeyインストールで間違ったメールアドレス/APIトークンを入力している
  • Cloudflareで「SSL/TLS」の設定を「フル」にしていない
  • RAMの不足
  • ビルドの失敗
  • etc…

うまくいかない場合は、シェルスクリプトを使わず、以下の「Ubuntu版Misskeyインストール方法詳説」を参考に、0から設定してみてください。

misskey-hub.net

基本的には上記の詳説に沿えば誰でも構築できるようになっていますが、初心者が覚えておくべきことは、ターミナル画面で操作ができなくなったら「:wq」を叩く。 これだけです。


それでも治らなかったら?

以下の「マニュアルインストール時のトラブルシューティング」のページを参考にしましょう。

misskey-hub.net


それでも治らなかったら?

「エラー名 Misskey」などでGoogle検索しましょう。

先人がいるかも。


それでも治らなかったら……?

「Misskey 鯖缶」などでGoogle検索して有識者に問い合わせるか、Claude.aiなどに聞きましょう。

claude.ai


管理者用アカウント作成

うまくサーバー構築できた場合に表示されるこのページでは、管理者用のアカウントを作成します。

管理者のユーザー名とパスワードを決めましょう。

「初期設定開始用パスワード」は入力しません。

あくまで管理者用アカウントなので、ユーザー名は素直に「admin」とかでも良いかもしれませんね。

終わったら「完了」をクリックします。

左上の「〇〇が次の通知を求めています」で「許可する」をクリックして、「プロフィールを設定→」をクリックします。

ここから先は、普通のプロフィール設定と同じ要領です。

プロフィールが設定し終わったら、「チュートリアルを開始→」をクリックします。

Misskeyの操作のチュートリアルを受けましょう。

(チュートリアルはここでは割愛します。)

チュートリアルが終わったら……

あなたのSNSのホームが現れます。

まっさらですね!記念に最初の投稿をしてみましょう。

左下の「ノート」または「N」キーで投稿フォームを開けます。

Misskeyでは投稿のことを「ノート」と呼びます。

「ノート」をクリックすれば……

無事に投稿できています!やったーーー!おめでとうございます!!!!!!

just setting up my msky ……


デーモンを設定する

デーモンとは、バックグラウンドで常時動作しているプログラムのことです。

SNSは常時稼働が求められるので、「誤ってターミナルを閉じちゃった!」という場合でも大丈夫なように、バックグラウンドで動かし続ける設定をしましょう。

一旦Ctrl+Cでプロセスをキルして、nanoエディタを立ち上げます。

exit
sudo nano /etc/systemd/system/misskey.service

nanoエディタに以下の内容を右クリックで貼り付けて保存します。

保存は「Ctrl+x」→「y」→「Enter」。


[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

15秒程度待ってから、systemctlでデーモンの状態を確認。

sudo systemctl status misskey

緑文字で「active」と表示されていたらデーモンの立ち上げ成功です。

もうターミナルのウィンドウは閉じても構いません。


今後のメンテナンスのための準備

ターミナルに以下のコマンドをコピペしてEnterを押します。

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/update.ubuntu.sh -O update.sh

そして今後、新しいバージョンのMisskeyがリリースされた場合は、ターミナルに以下のコマンドを貼り付けてEnterを押しましょう。

sudo bash update.sh -r

自動的に再起動するようになっており、当然再起動中はサーバーに接続できなくなる=SNSがダウンするので、アップデート時は事前にサーバー内のユーザーの皆様にお知らせしましょうね。

リリース情報は以下のページから確認できます。

直近(2024年12月現在)の傾向では毎月新しいバージョンがリリースされているようです。

misskey-hub.net


おめでとうございます!…だけど公開するのはまだ早いかも!

さて、ようやく築いたこの城ですが、まだまだ快適な生活を送るための設備が整っていない状況です。

確かにMisskeyのコアとなる部分は動作していますが、SNSとして十分な機能を提供するにはまだ準備が必要です。

具体的には、メールサーバーを立ててメール配信ができるようにしたり、プッシュ通知に対応したりなど、SNSとしての機能を盛り込んでいく必要があります。

充分な準備を整えてからのスタートを目指したいですね。

最終回である第5回では、この城を堅牢に守るためのセキュリティ対策、バックアップ方法、パフォーマンス向上、機能追加などについて述べていきたいと思います。

それではまた明日お会いしましょう!



おわりに

最後まで読んでいただいた方に向けて、KENTEMの採用情報のご紹介です👇
KENTEMでは、様々な拠点でエンジニアを大募集しています!

・ICTの力で、建設業の「3K」を解決し、働く人に安心安全を届けたい。

・ KENTEMユーザーの現場の方々が、残業規制内に仕事が終わるようにして、18時には家族で食卓を囲めるようにしたい。

・建設業を支えることで、社会全体を「さまざまなリスクに強い安心・安全な場所」に変えていきたい。

このような理念を掲げて我々は働いております。

建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください!😺
recruit.kentem.jp career.kentem.jp


参考文献

misskey-hub.net

seritude.com