Ubuntu版Misskeyインストール方法詳説( https://misskey-hub.net/ja/docs/for-admin/install/guides/ubuntu-manual/ )が詳しいです。
大雑把な手順は、Misskeyを手動で構築する( https://misskey-hub.net/ja/docs/for-admin/install/guides/manual/ )にあります。
1.Misskeyの前提条件(もしくは必要な環境)と言われる、背後で動いているプログラムたちをインストールしていきます。
全体の下準備を行います。
sudo apt install -y curl ca-certificates gnupg2 lsb-release ubuntu-keyring git build-essential
Node.jsの下準備をします。
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
PostgreSQLを入れます。
sudo apt update
sudo apt install -y postgresql-common
sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -i -v 16;
Node.js, Redis, FFmpeg, Nginx, Certbotなど(Cloudflare前提)も入れます。
sudo apt install -y nodejs redis-server redis-tools ffmpeg nginx certbot python3-certbot-dns-cloudflare
corepackを有効化します。
sudo corepack enable
2.PostgreSQLの設定を行います。
sudo -u postgres psql
CREATE ROLE misskey LOGIN PASSWORD 'hoge';
CREATE DATABASE mk1 OWNER misskey;
¥q
上記のhogeは、実際にはもっと強力なパスワードで設定してください。
3.NGINXやファイアウォール、CertbotをCloudflareとの連携込みで設定します。
NGINXを起動させます。
sudo systemctl start nginx
sudo systemctl enable nginx
ファイアウォールを設定します。
sudo ufw enable
sudo ufw default deny
sudo ufw limit 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw status で状態を確認後、以下で永続化します。
sudo systemctl enable ufw
Cloudflare関連についての設定を行います。
mkdir /etc/cloudflare
nano /etc/cloudflare/cloudflare.ini
立ち上がったファイルに以下を記載します。
dns_cloudflare_email = (Cloudflareに登録したメールアドレス)
dns_cloudflare_api_key = ( https://dash.cloudflare.com/profile/api-tokens にて確認できるGlobal API Key)
ファイル保存後、パーミッションを600に設定します。
sudo chmod 600 /etc/cloudflare/cloudflare.ini
Cloudflareと連携します。example.tldの部分は自分のMisskeyのドメインに書き換えてください。
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
.pemファイルが生成されるとのことで、後ほど使用するため、パスを控えておきましょう。
4.Misskeyを実行するVPS上のユーザーを作成します。
sudo adduser --disabled-password --disabled-login misskey
5.Misskey本体をインストールします。
sudo su - misskey
git clone --recursive https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master
git submodule update --init
NODE_ENV=production pnpm install --frozen-lockfile
6.Misskeyに関わるプログラム的な設定を行います。
まずは設定ファイル .config/default.yml を作成します。
nano .config/default.yml
最低限、以下の設定を自分の環境に合わせて行います。
# 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
この設定ファイルはYAML形式で書かれているため、行頭のスペースの数などを間違えるとMisskeyが動かないそうです。行頭のスペースには十分注意しましょう。
設定が済んだら、保存してください。
7.Misskeyに合わせてNGINXの設定を更新します。
一旦作業用ユーザーに戻ります。
exit
/etc/nginx/conf.d/misskey.conf を作成します。
sudo nano /etc/nginx/conf.d/misskey.conf
以下のサンプルを参考に、 example.tld とか書かれたドメイン部分を自分のMisskeyドメインに書き換えてコピペします。半分行くまでに4ヶ所あるはずです。
# For WebSocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;
server {
listen 80;
listen [::]:80;
server_name example.tld;
# For SSL domain validation
root /var/www/html;
location /.well-known/acme-challenge/ { allow all; }
location /.well-known/pki-validation/ { allow all; }
location / { return 301 https://$server_name$request_uri; }
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.tld;
ssl_session_timeout 1d;
ssl_session_cache shared:ssl_session_cache:10m;
ssl_session_tickets off;
# To use Let's Encrypt certificate
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# SSL protocol settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
# Change to your upload limit
client_max_body_size 80m;
# Proxy to Node
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_redirect off;
# For WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Cache settings
proxy_cache cache1;
proxy_cache_lock on;
proxy_cache_use_stale updating;
proxy_force_ranges on;
add_header X-Cache $upstream_cache_status;
}
}
変更を保存し、 sudo nginx -t にて設定ファイルがきちんと機能するか確認できたら、NGINXを再起動します。
sudo systemctl restart nginx
8.misskey実行ユーザーに入り直し、Misskeyのビルドとデータベースの初期化を行います。
多少の時間がかかるようです。
sudo su - misskey
cd misskey
NODE_ENV=production pnpm run build
pnpm run init
9.Misskeyを起動します。
NODE_ENV=production pnpm run start
Now listening on port 3000 on (自分のドメイン) と表示が出てきたら、起動できていると思われます。
10.systemdでの管理設定を行います。
一度 Ctrl+C でMisskeyを停止させ、作業用ユーザーに戻って設定ファイルを作成します。
exit
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