How to build Misskey on Fedora (or RHEL-based distributions)

Misskey v2024.5.0 を Fedora 40 上に建てた時の記録
Misskey Hub の Misskeyを手動で構築する などで最新の情報も確認してください。
面倒なので Cockpit を使っているところがあります。 利用しない場合は読み替えてください。 古い建て方のところに詳細が書いてある場合があります。

手順

作業用ユーザーの追加

今回は OS インストール時に追加したため説明しません。

セットアップのために SELinux を無効化する

sudo setenforce 0
sudo vi /etc/selinux/config
    SELINUX=disabled

dnf パッケージ更新

sudo dnf update

dnf の自動アップデート設定

今回は Cockpit 上で設定したため説明しません。

swap の確認

free -m

デフォルトのまま変更しなかったため説明しません。

Node 及び npm のインストール

sudo dnf info nodejs
sudo dnf install nodejs npm

PostgreSQL のインストール

dnf info postgresql15
dnf info postgresql15-server
sudo dnf install postgresql15 postgresql15-server

v16がインストールできる可能性がありますが、v15を推奨します。
デフォルトで何がインストールされるかは dnf info postgresql なりで確認してください。

PostgreSQL の設定

sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres psql
  postgres=# CREATE ROLE foo LOGIN CREATEDB PASSWORD '**';
  postgres=# CREATE DATABASE bar OWNER foo;
  postgres=# \q

参考: https://pgtune.leopard.in.ua/

Redis のインストール

sudo dnf install redis
sudo systemctl start redis
sudo systemctl enable redis

Nginx のインストール

dnf info nginx
sudo dnf install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

pnpm のインストール

dnf info pnpm
sudo dnf install pnpm

Git のインストール

dnf info git
sudo dnf install git

FFmpeg のインストール

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf update
dnf info ffmpeg
sudo dnf install ffmpeg

Misskey をクローン

git clone -b fugafuga https://github.com/hogehoge/misskey.git
cd misskey
git checkout fugafuga

default.yml の設定

vi .config/default.yml
    url: https://example.com/
    port: 3000    # A port that your Misskey server should listen.
    db:
      host: localhost
      port: 5432
      db  : bar
      user: foo
      pass: **

letsencrypt の設定

dnf info snapd
sudo dnf install snapd
sudo ln -s /var/lib/snapd/snap /snap
sudo systemctl start snapd
sudo systemctl enable --now snapd
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --pre-hook 'systemctl stop nginx' --standalone -d example.com
sudo certbot renew --dry-run

昔と違って cron の設定が不要で自動で更新してくれるようになったらしい。
現在は Cloudfrare を使うことが一般的なため、この手順は不要である可能性があります。

Nginx の設定

sudo cp /home/misskey/misskey/docs/examples/misskey.nginx /etc/nginx/conf.d/misskey.conf
sudo vi /etc/nginx/conf.d/misskey.conf
    server_name example.com;
    server_name example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
sudo nginx -t
sudo systemctl restart nginx

Misskey のビルド

git submodule update --init --recursive
NODE_ENV=production pnpm install --frozen-lockfile
NODE_ENV=production pnpm run build
pnpm run init

Misskey の起動確認

NODE_ENV=production pnpm run start

RHEL 系ディストリビューションでは、 /var/lib/pgsql/data/pg_hba.conf 内の identtrust に変更しないと起動しない場合があります。
変更後 PostgreSQL を再起動してください。

Misskey の起動

sudo vi /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
sudo systemctl daemon-reload
sudo systemctl enable misskey
sudo systemctl start misskey

ServiceWorker の設定

sudo pnpm install web-push -g
sudo web-push generate-vapid-keys

今回は行っていないため、多分こう。

SELinux の有効化及び設定

setroubleshoot-server だけに頼ると起動しなくなることが発覚したため、調査中。

ナビゲーション

作業用ユーザー追加
SELinux 無効化
dnf パッケージ更新
dnf 自動アップデート
swap 確認
Node npm インストール
PostgreSQL インストール
PostgreSQL 設定
Redis インストール
Nginx インストール
pnpm インストール
Git インストール
FFmpeg インストール
Misskey クローン
default.yml 設定
letsencrypt 設定
Nginx 設定
Misskey ビルド
Misskey 起動確認
Misskey 起動
ServiceWorker 設定
SELinux 有効化