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

03-05-01・オブジェクトストレージについて

03-04-03・BashスクリプトでMisskeyを建てる