Project

General

Profile

RHEL系にmisskeyをインストール

前提として、Misskeyの推奨はubuntu&nginxへの導入となる。
https://misskey-hub.net/ja/docs/for-admin/install/guides/ubuntu-manual/

あくまでその前提として、エンタープライズ環境としてRHEL&httpdへの導入を実施する。
多数のサードパーティのリポジトリを使用するので基本的には推奨しない。

前提条件

  • git、curl、wget等を使えることにしておく
  • epelは利用可能状態とする
  • httpd(mod_ssl)はセットアップ済みとする
  • RockyLinux8での実施なので、適宜読み替えること

使用するソフトウェアの準備

次のソフトウェアを使用する。
  • postgreSQL
    バージョン15(コミュニティ版)
  • Redis
    バージョン7.0(Remiリポジトリ版)
  • Node.js
    バージョン20(コミュニティ版)

CodeReadyに存在するパッケージも使用するため、下記のコマンドで有効にしておく。

※rhel8
dnf config-manager --enable powertools

※rhel9
dnf config-manager --set-enabled crb

Remiリポジトリに存在するパッケージも使用するため、下記のコマンドで有効にしておく。

※rhel8
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

※rhel9
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

PostgreSQLの準備

PostgreSQLはRHEL標準パッケージではバージョンが古すぎるため、コミュニティ本家のバージョンを使用する。

  • 公式リポジトリ情報をインストールする
    ※rhel8
    yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    
    ※rhel9
    yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    
  • 使用しないバージョンの「pgdg**」の「enabled」を「0」にしておく
    記載時点でのmisskeyで使用するバージョンは「15」なので、「pgdg15」を有効にしておく。
    vi /etc/yum.repos.d/pgdg-redhat-all.repo
    ------------------------------
    [pgdg15]
    name=PostgreSQL 15 for RHEL / Rocky / AlmaLinux $releasever - $basearch
    baseurl=https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-$releasever-$basearch
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL
    repo_gpgcheck = 1
    
  • サーバとクライアントをインストールする
    yum install postgresql15 postgresql15-server
    
  • DBの初期化を行う
    /usr/pgsql-15/bin/postgresql-15-setup initdb
    
  • DBの起動と自動起動登録を行う
    systemctl enable --now postgresql-15
    

Redisの準備

RedisはRHEL標準パッケージではバージョンが古すぎるため、Remiリポジトリのバージョンを使用する。

  • remiリポジトリのredisが利用可能なことを確認する
    dnf module list redis
    ------------------------------
    redis:remi-7.0 が存在すること
    
  • 取得元を上記に変更する
    yum module reset redis
    yum module enable redis:remi-7.0
    
  • インストールを実行する
    yum install redis
    
  • 初回起動と自動起動登録を行う
    systemctl enable --now redis
    

Node.jsの準備

Node.jsはRHELでもバージョン20を利用出来るが、必要な「corepack」が含まれていないためnodesource.com版を使用する。
(misskeyコミュニティのubuntu版でもこの配布元を使用している)

  • リポジトリ情報作成用スクリプトを取得する
    wget https://rpm.nodesource.com/setup_20.x
    
  • スクリプトを実行し、リポジトリ情報を登録する
    bash setup_20.x 
    
  • インストールを実施する
    yum install nodejs
    
  • corepackでnpmを有効化する
    corepack enable
    

Misskeyのインストール

  • 必要ソフトウェアのインストール
    yum install git wget
    
  • DBの作成
    sudo -u postgres psql
    ------------------------------
    CREATE ROLE misskey LOGIN PASSWORD '任意のパスワード';
    CREATE DATABASE misskey OWNER misskey;
    ¥q
    
  • ユーザの作成
    useradd -s /sbin/nologin misskey
    
  • ユーザの切り替え
    su -s /bin/bash - misskey
    
  • 最新版のmisskeyをチェックアウト
    git clone -b master https://github.com/misskey-dev/misskey.git --recurse-submodules
    cd misskey
    
    ※安定板
    git checkout master
    
    ※最新版(ベータというわけではない)
    git checkout develop
    
  • 依存パッケージのインストール
    NODE_ENV=production pnpm install --frozen-lockfile
    
  • 初期設定
    cd .config/
    cp -p example.yml default.yml
    vi default.yml 
    ------------------------------
    url: 実際に公開するURL
    db: 先ほどのpostgreSQLの情報
    
    
  • ビルドを実行
    NODE_ENV=production pnpm run build
    
    • 下記は無視してよい
      (node:2375) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
      (Use `node --trace-warnings ...` to show where the warning was created)
      
  • データベースの投入
    pnpm run init
    
  • テスト起動
    NODE_ENV=production pnpm run start
    ------------------------------
    DONE *    [core boot]    All workers started
    DONE *    [core boot]    Now listening on port 3000 on https://公開アドレス
    
    上記が表示されるまで待機
    
  • もう一つターミナルを使うか、別サーバから実行(この場合はFWを一時停止しておくこと)
    # curl localhost(またはIPアドレス):3000
    ------------------------------
    <!DOCTYPE html><!---
      _____ _         _
     |     |_|___ ___| |_ ___ _ _
     | | | | |_ -|_ -| '_| -_| | |
     |_|_|_|_|___|___|_,_|___|_  |
                             |___|
     Thank you for using Misskey!
     If you are reading this message... how about joining the development?
     https://github.com/misskey-dev/misskey
    
  • 確認が出来たら終了する
    Ctrl+C
    
  • misskeyユーザから抜ける
    exit
    
  • 自動起動スクリプトを作成する
    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
    
  • systemdを再読込する
    systemctl daemon-reload
    
  • 起動および自動起動を設定する
    systemctl enable --now misskey
    

httpdの設定

  • httpdの導入(されていなければ)
    yum install httpd mod_ssl
    systemctl enable --now httpd
    
  • サイトの設定ファイルを作成する
    公式サイトにはnginxしか設定サンプルが置かれていない。
    SSL証明書はまだ作成していなければssl.confの自己署名を使う
    vi /etc/httpd/conf.d/misskey.conf 
    ------------------------------
    <VirtualHost *:443>
      ServerName misskeyのURL
      ServerAdmin 管理者のメールアドレス
    
      SSLEngine on
      SSLCertificateFile /etc/letsencrypt/live/misskeyのURL/cert.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/misskeyのURL/privkey.pem
      SSLCertificateChainFile /etc/letsencrypt/live/misskeyのURL/chain.pem
      SSLCACertificateFile /etc/letsencrypt/live/misskeyのURL/fullchain.pem
    
      RewriteEngine on
      RewriteCond %{HTTP:Upgrade}    websocket        [NC]
      RewriteCond %{HTTP:Connection} upgrade          [NC]
      RewriteRule ^/?(.*) "ws://127.0.0.1:3000/$1"  [P]
    
      ProxyPreserveHost on
      ProxyPass / http://127.0.0.1:3000/
      ProxyPassReverse / http://127.0.0.1:3000/
      CustomLog logs/misskey_access_log vhost_combined
      ErrorLog logs/misskey_error_log
      LogLevel warn
    </VirtualHost>
    
    
  • サービスを再起動する
    systemctl restart httpd
    

起動確認と初期設定

ブラウザから指定のアドレスでアクセスが出来ることを確認し、管理者アカウントを作成する。
ウィザードに従い管理者情報を登録し、「コントロールパネル」を開いて、サーバ情報などの「!」マークのある情報を設定する。
それ以外に特にやった方が良さそうなものを以下に記載

プッシュ通知の設定

  • 次のコマンドを実施する
    npx web-push generate-vapid-keys
    
  • 表示された秘密鍵と公開鍵を「コントロールパネル」の「ServiceWorker」に登録して有効化する。

メール通知の設定

  • 「コントロールパネル」の「メールサーバー」にSMTPサーバを登録して有効化する。
  • 「配信テスト」でメールを受信出来ることを確認する
    • クローズ環境のメールなどで「アドレスが無効」として登録出来ない場合、「コントロールパネル」の「セキュリティ」で「Active Email Validation」を無効化すると良いかも。

検索機能の有効化

  • 「コントロールパネル」の「ロール」の「ベースロール」で「ノート検索」を有効にすることで検索が可能になる。
  • 連合サーバを検索する場合はconfigの「meilisearch」を適宜設定する必要があるようだが、今回は除外