翻訳にご協力ください

このドキュメントはコミュニティによる翻訳です。ドキュメントの翻訳はCrowdinから行えます。ご協力をお願いします🙏

Ubuntu版Misskeyインストール方法詳説

その他のMisskeyインストール方法

シェルスクリプトのお知らせ

コピペばかりならシェルスクリプトでいいじゃん、と言うことでシェルスクリプトでほぼ全部やってくれるやつを作ってみました!
シェルスクリプトの詳細と使用方法はこちらから!

Suggerimento

シェルスクリプトでの開発環境へのインストールは想定されていません。

Suggerimento

ドメインの購入とCloudflareのセットアップ、サーバーの確保についてはご自身でご準備ください。

不具合があれば @[email protected] へのメンションにてお知らせいただければと思います。

この記事について

この記事では、Misskey構築の手引き (manual)で紹介されている通り、systemdでMisskeyを動作させています。

docker-composeなら、手作業でももうちょっと簡単に実行できるはずです。

Pericolo

一度使用を始めたサーバーのドメイン・ホスト名では、データベースを作り直さないでください!

はじめに

この記事では、Misskey構築の手引き (manual)を基に、一般的なUbuntuサーバーへMisskeyをインストールし公開する方法の一挙手一投足を解説する。

Bashのコマンド入力、いくつかの設定ファイルの編集、そしてブラウザの操作だけで設定が完了するようにしている。インストールするソフトウェアについて簡単に説明しているが、気にする必要はない。

この記事では、具体性を重視し、特定の環境に特化した記述をしている。

OSの違い、Misskey本体や依存するソフトウェアのバージョンアップで変わってしまった部分等があるかもしれないが、ご容赦いただきたく思う。

わからない単語については、『「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典』 で調べて分かった気になってほしい。

環境と条件

  • OSはUbuntu 22.04 LTSを利用する。
  • ハードウェア要件としては、CPUは最近のものなら最小限で動く。アーキテクチャはamd64及びarm64を想定している。
  • メモリは4GB程度あると良い。
    • (従来Viteの導入により1.5GB程度でもビルド可能と説明していたが、最近またフロントエンドのビルドで要件が厳しくなってきた。)
  • 独自のドメインを購入し、CloudFlareを使用する。
  • ドメインはCloudflare Registrarなどで予め用意しておくこと。
  • ここではドメインをexample.tldとして解説を進めるので、自分が買ったドメインに適宜置き換えて読むこと。開発環境の場合はlocalhostと読み替えます(設定ファイルの項で別途説明)
Pericolo

一度使用を始めたサーバーのドメイン・ホスト名は、決して変更しないでください!

nanoの使い方

今回はテキストエディターにnanoを使う。次のように起動する。

nano /path/to/file

一般的な矢印ボタンやHome/Endなどを利用してカーソルを移動できる。

終了はCtrl+Xで、変更を保存するか聞かれた場合Y(Yes)を入力しEnterすると保存できる。

下部にコマンド一覧が表示されるので、^をCtrl、M-をAltと読み替えて参考にしよう。

ユーザーの作成

Misskeyはrootで実行しない方がよいため、専用のユーザーを作成する。

sudo adduser --disabled-password --disabled-login misskey
Suggerimento

開発環境の場合はユーザーを分ける必要はありません

基本的なソフトウェアのインストールと設定

基本的なソフトウェアのインストールを行う。

Node.js

Node.jsは、サーバーサイドJavaScript環境であり、Misskeyの基本的な実行環境である。

sudo rm /usr/share/keyrings/nodesource.gpg;
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg;
NODE_MAJOR=20; echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list;
sudo apt update;
sudo apt install -y nodejs;

# Node.jsがインストールされたので、バージョンを確認する。
node -v

# corepack enable
sudo corepack enable

v20.x.xなどと表示されればOK。v8.x.xのように低いバージョンが表示された場合は、正しくインストールが行えていないため、サーバーを再起動してもう一度インストールし直すなどしてみよう。

PostgreSQL

PostgreSQLは、オブジェクト関係データベース管理システムであり、Misskeyの種々のデータを保存するために必要不可欠なソフトだ。

インストール

シェルスクリプトを実行し、最新バージョン(v15)をインストールしよう。

sudo apt install -y postgresql-common

sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -i -v 15;

# systemctlでデーモンの状態を確認。
systemctl status postgresql

activeならOK。

ユーザーとデータベースの作成

psqlを起動。

sudo -u postgres psql

Misskeyで使うユーザーを作成する。
ユーザー名をmisskey、パスワードをhogeとする場合は次のようになる。
(LinuxのユーザーとPostgreSQLのユーザーは別物なので、混同しないよう注意すること。)

CREATE ROLE misskey LOGIN PASSWORD 'hoge';

データベースを作成。データベース名をmk1としている。

CREATE DATABASE mk1 OWNER misskey;
¥q

Redis

Redisは、NoSQLのインメモリデータベースソフトであり、データベースや連合との通信を管理するなどのために必要だ。
redis.ioのドキュメントに従い、snapでインストールする。

https://redis.io/docs/getting-started/installation/install-redis-on-linux/

sudo snap install redis

systemctlでデーモンの状態を確認。

systemctl status redis-server

activeならOK。

nginx

http://localhost にアクセスし、*Welcome to nginx!*と表示されればOK。Misskeyには必須ではないが、キャッシュ等をするとパフォーマンスが向上したり、httpからhttpsへの転送などをするために、インストールしておこう。

Suggerimento

開発環境の場合はnginxのセットアップは不要です

nginx.orgのドキュメント http://nginx.org/en/linux_packages.html#Ubuntu に従ってインストールする。

sudo apt install -y curl ca-certificates gnupg2 lsb-release ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

このとき出力に 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 とあるか確認する。

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx

sudo apt update

sudo apt install -y nginx

systemctlでデーモンの状態を確認。

systemctl status nginx

activeならOK。そうでなければ、次のコマンドを実行。

sudo systemctl start nginx

sudo systemctl enable nginx

http://localhost にアクセスし、*Welcome to nginx!*と表示されればOK。
curlで確認するのもよいだろう。

curl http://localhost

その他

Git(バージョン管理ソフト)およびbuild-essential(Misskeyのビルド時に必要)をインストールする。

sudo apt update

sudo apt install -y git build-essential

追加の設定とインストール

サーバーをインターネットに公開する準備をする。

Suggerimento

開発環境の場合はファイヤーウォールやCloudFlare、Certbotの設定は不要です

ファイヤーウォール

今回は、ファイヤーウォールとしてufwを使用する。

次では、接続許可をホワイトリスト形式とし、22番SSHポートを接続回数制限を設けながら開放、80番HTTPポート及び443番HTTPSポートを開放とした。

sudo ufw enable

sudo ufw default deny

sudo ufw limit 22

sudo ufw allow 80

sudo ufw allow 443

ufwのステータスを確認しておく。

sudo ufw status

systemctlで永続化する。

sudo systemctl enable ufw
Suggerimento

ufwは、netfilter(iptables)を人間が操作しやすいようにするアプリだ。インストールスクリプトは、OCI環境ではnetfilterを直接操作する。

CloudFlare

CloudFlareは、自分のドメインに対してDNSサーバー・リバースプロキシ・CDNをいっぺんに提供してくれるたいへん便利なサービスである。
CloudFlareを経由せずにサーバーを公開することも可能だが、たいへん便利なので導入することをお勧めする。 → CDNの設定

CloudFlareにサインアップ し、購入したドメインを案内に従って登録する。

DNSの登録画面でサーバーのIPアドレスを入力しておくとよい。

ドメインを購入した所によっては適用に3日程度かかる場合がある。

Certbot (Let’s Encrypt) の設定

HTTPS・WSS通信に使用する証明書をCloudFlareを使う方式でLet’s Encryptから取得する。

certbotとCloudFlareプラグインをインストール

sudo apt install -y certbot python3-certbot-dns-cloudflare

CloudflareのAPIキーを取得する。以下の手順で取得されたい。

  1. https://dash.cloudflare.com/profile/api-tokens にアクセス
  2. Global API KeyのViewを選択
  3. パスワードを入力しhCaptchaを解除、Viewを選択

CloudFlareの情報を記載した設定ファイル/etc/cloudflare/cloudflare.iniを作成する。

mkdir /etc/cloudflare
nano /etc/cloudflare/cloudflare.ini

dns_cloudflare_email(下の例では[email protected])にはCloudFlareで登録しているメールアドレスを設定する。

dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxx

これを保存し、パーミッションを600に設定。

sudo chmod 600 /etc/cloudflare/cloudflare.ini

準備ができたのでコマンドを実行する。途中の2箇所のexample.tldは自分のものに置き換えること

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d example.tld -d *.example.tld

*Congratulations!*と表示されたらOK。生成された.pemファイルのパスは今後使うので記録しておくこと。

自動更新の設定はインストールと同時に行われているため不要。

Misskeyのインストール

これで前準備はあらかた終わったので、Misskeyを準備していく。

misskeyユーザーに変更。

sudo su - misskey

Gitでファイル類を展開。

git clone -b master https://github.com/misskey-dev/misskey.git --recurse-submodules

cd misskey

git checkout master

必要なnpmパッケージをインストール。

NODE_ENV=production pnpm install --frozen-lockfile

Misskeyを設定する

default.yml

設定ファイル.config/default.ymlを作成。

nano .config/default.yml

次の内容を貼り付け、適宜置き換える。設定値の変更が必要な箇所は●で、これまでの流れの中で設定した値を用いる箇所は〇で示した。

この設定ファイルはYAML形式で書かれており、行頭のスペースの数などを間違えるとMisskeyが動かないので、特に注意すること。

設定できる値と記述方法は.config/example.ymlに書かれている。

Suggerimento

開発環境の場合、urlはurl: http://localhost:3000と指定します。

# ● Misskeyを公開するURL
url: https://example.tld/
# ポートを3000とする。
port: 3000

# ● PostgreSQLの設定。
db:
  host: localhost
  port: 5432
  db  : mk1 # 〇 PostgreSQLのデータベース名
  user: misskey # 〇 PostgreSQLのユーザー名
  pass: hoge # ● PostgreSQLのパスワード

#   Redisの設定。
redis:
  host: localhost
  port: 6379

#   IDタイプの設定。
id: 'aidx'

#   syslog
syslog:
  host: localhost
  port: 514

指定できたら保存する。

nginxの設定

nginxの設定を行う。

ルート権限で行う。

exit

/etc/nginx/conf.d/misskey.confを作成する。

sudo nano /etc/nginx/conf.d/misskey.conf

Misskey Hubの設定例をnanoへコピー&ペーストし、次の部分を自分のものに書き換える。

  • 18行目と30行目のドメイン名
  • 34-35行目の証明書へのパスをCertbotで取得したものに (基本的にexample.tldを置き換えるだけでOK)
  • 56行目 (If it's behind another reverse proxy or CDN, remove the following.) から4行を削除

変更を保存する。

設定ファイルがきちんと機能するか確認。

sudo nginx -t

OKならば、nginxデーモンを再起動。

sudo systemctl restart nginx

ステータスを確認。

sudo systemctl status nginx

activeであればOK。

Misskeyのビルド

misskeyユーザーにログインし直す。

sudo su - misskey

ビルドをする。yes we can…

cd misskey
NODE_ENV=production pnpm run build
Suggerimento

開発環境の場合、NODE_ENV=productionは不要です。以降のコマンドでも同様に削除してください。

サーバーでビルドできない場合

RAMの不足が考えられる。

Misskeyのビルドやデータベースのマイグレーション(初期化を含む)には、RAMが2GB以上必要になっている。
RAMが足りない場合、以下のような解決策が考えられる。

  • サーバーにスワップを追加する
  • ローカルでビルドしたもの(builtディレクトリ)をsftpで転送する

データベースの初期化

pnpm run init

Misskeyを起動する

NODE_ENV=production pnpm run start

Now listening on port 3000 on http://example.tld と表示されたら、設定したURLにアクセスする。

Misskeyのウェルカムページが表示されるはずだ。

アカウントの作成、ノートの作成やファイルのアップロードといった一通りの操作が正しく行えるか確認しよう。

アクセスできない場合

CloudFlareのDNSを確認する

CloudFlareのDNS設定が正しいIPアドレスになっているかもう一度確認しよう。

ルーターの設定を確認する

自宅サーバーの場合、ルーターがサーバーと外部との80ポート・443ポートの通信を許可する設定になっているかどうか確認しよう。

クラウドの場合でも、ネットワーク設定でポート開放が必要な場合が多い。

Misskeyのデーモンを作成

Suggerimento

開発環境の場合、デーモンの作成は不要です。

いったんCtrl+Cでプロセスをキルし、Misskeyをデーモンで起動する設定をしよう。

ルート権限で行う。

exit

/etc/systemd/system/misskey.serviceを作成する。

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

次の内容を貼り付け、保存する。

[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

systemdを設定し、misskeyデーモンを開始。

sudo systemctl daemon-reload

sudo systemctl enable misskey

sudo systemctl start misskey

systemctlでデーモンの状態を確認。起動に少し時間がかかるため、15秒程度待ってからのほうが良い。

sudo systemctl status misskey

activeならOK。

これでMisskeyのインストールはほぼ完了だ。

Misskeyサーバーに自分のアカウントを登録・ログインし、設定を続けよう。

Misskeyの設定を続ける

Misskeyのアップデート

Misskeyのアップデート方法

作業中はMisskeyを使うことができません。

sudo systemctl stop misskey

su - misskey

git pull;
NODE_ENV=production pnpm install --frozen-lockfile
pnpm run clean;
NODE_ENV=production pnpm run build;
pnpm run migrate;

exit

Case 1: apt upgradeをする場合

sudo apt update -y
sudo apt full-upgrade -y
sudo reboot

再起動後はMisskeyは自動で起動します。

Case 2: そのまま起動

sudo systemctl start misskey