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 内の ident
を trust
に変更しないと起動しない場合があります。
変更後 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 だけに頼ると起動しなくなることが発覚したため、調査中。