Nextcloud Talk の高性能バックエンドを AlmaLinux 9 + OpenLiteSpeed の環境に構築する

conoha Linux
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

前回は Nextcloud を AlmaLinux 9 + OpenLiteSpeed の環境にセットアップしました。

この Nextcloud に Talk アプリ(https://apps.nextcloud.com/apps/spreed)をインストールしたところ、高性能バックエンド(HPB: High-performance backend)を設定するように促されました。

Nextcloud Talk は自前でチャットやビデオ通話の環境を持つことができるためとても重宝していますが、HPB を設定しないと 3 人以上のビデオ通話が不安定になってしまいます。

そこで今回は HPB を構築していきます。

環境

  • OS: AlmaLinux release 9.5 (Teal Serval)
  • Web サーバー: OpenLiteSpeed 1.8.3
  • Nextcloud:
    • Nextcloud Hub 10(31.0.5)
    • Talk 21.0.4
  • ホスティング: ConoHa VPS(メモリ 2GB)

高性能バックエンドの構築

前回に引き続き Docker イメージの All-in-One は使わず個別に設定をしていきます。

幸いにも Nextcloud 社公式パートナーの株式会社スタイルズから導入手順の例が公開されていますので、それに沿ってやっていく事にします。

Nextcloud Talkの紹介とOSS版Talk HBPのインストール | Nextcloud日本公式サイト
0.本記事の概要 この記事は、Nextcloudの追加アプリケーションである「Nextcloud Talk」に

HPB 用のサブドメインとして hpb.example.com を設定します。SSL 証明書についてはワイルドカード証明書を取得しているので説明を後にしていますが、HTTP-01 チャレンジ認証の場合は先にサブドメインを作成し、証明書を取得しておいてください。

coTURN

coTURN は、NAT やファイヤーウォールの背後に位置する端末間の IP 接続を確立するために必要な中継サーバである STUN(Session Traversal Utilities for NAT)/ TURN(Traversal Using Relays around NAT)サーバです。

coTURN のインストール

Enterprise Linux 9 では EPEL リポジトリに登録されていましたので、そこからインストールします。

coTURN の設定

Nextcloud の公式ドキュメントに coTURN の詳細な設定方法がありますので、こちらを参考に設定します。

coTURN - Nextcloud Talk API documentation

SSL 証明書を読み込むために、root が coTURN サービスを実行するように設定します。

TURNS を使用しない場合は、この作業は不要です。

次に、TURN サーバーシークレットを生成しておきます。

coTURN の設定ファイル(/etc/coturn/turnserver.conf)を編集します。

coTURN サービスのスタートと自動起動を設定します。

Janus

WebRTC(Web Real-Time Communication)サーバーの Janus をインストールしていきます。

Ubuntu 24.04 では apt でインストールできるようですが、Enterprise Linux 9 用のパッケージは見つけることができませんでした。

Snap のインストール

Snap Store で janus-gateway を見つけることができましたので、まずは Snap のインストールを行っていきます。

Snap がソケットを使って通信するための、systemd ユニットを有効化します。

janus-gateway のインストール

Snap で janus-gateway をインストールします。

janus-gateway v1.3.0 がインストールされました。

janus-gateway の設定

TURN REST API キーを生成します。

Janus の設定ファイル(/var/snap/janus-gateway/common/etc/janus.jcfg)を編集します。

ルームの設定ファイル(/var/snap/janus-gateway/common/etc/janus.plugin.videoroom.jcfg)を編集して、Demo Room の設定を全てコメントアウトします。

WebSocket の設定ファイル(/var/snap/janus-gateway/common/etc/janus.transport.websockets.jcfg)を編集して、アドレスを指定します。

サービスの起動順序を編集します。

Unit の After に coturn.service を追加し、coTURN の後に Janus が起動するように指定します。

janus-gateway サービスのスタートと自動起動を設定しようとしましたが、サービスが既に開始されていて、自動起動も設定されていました。設定変更を反映するため再起動だけしておきました。

NATS

NATS(Neural Automatic Transport System)は、軽量でハイパフォーマンスなメッセージングシステムを提供するミドルウェアです。

こちらも Ubuntu 24.04 では apt でインストールできるようですが、Enterprise Linux 9 用のリポジトリでパッケージを見つけることができませんでした。

nats-server のインストール

nats-server の公式サイトでRPM が配布されていたので、そこから最新版をインストールすることにしました。

Releases · nats-io/nats-server
High-Performance server for NATS.io, the cloud and edge native messaging system. - nats-io/nats-server

展開されるファイルは 2 つで、メインが「/usr/bin/nats-server」、シンボリックリンクが「/usr/local/bin/nats-server」に作成されます。

ユーザーの追加

nats ユーザー/グループを、システムアカウントとして作成しておきます。

ユニットファイルを作成

以下を参考に、ユニットファイル(/etc/systemd/system/nats-server.service)を作成します。

nats-server/util/nats-server.service at main · nats-io/nats-server
High-Performance server for NATS.io, the cloud and edge native messaging system. - nats-io/nats-server

設定ファイル(/etc/nats-server.conf)を作成します。

nats-server サービスのスタートと自動起動を設定します。

Signaling

いよいよ Nextcloud Talk 用のシグナリングサーバーをインストールしていきます。

GitHub - strukturag/nextcloud-spreed-signaling: Standalone signaling server for Nextcloud Talk.
Standalone signaling server for Nextcloud Talk. Contribute to strukturag/nextcloud-spreed-signaling development by creat...

Spreed standalone signaling server はパッケージが用意されていないため、ソースコードからビルドする必要があります。また、ビルドするために Go 言語も必要になります。

前提条件パッケージが入っていない場合は、事前にインストールしておいてください。

Signaling のインストール

ビルドしたファイルを、所定のディレクトリに配置します。

キーに使用する乱数を 3 種類生成します。

設定ファイル(/etc/signaling/server.conf)を編集します。

ユーザーの追加

signaling ユーザー/グループを、システムアカウントとして作成しておきます。

設定ファイルのアクセス権を signaling ユーザーに変更しておきます。

ユニットファイルを作成

ユニットファイル(/etc/systemd/system/signaling.service)を編集します。

signaling サービスのスタートと自動起動を設定します。

ファイアウォール の設定

nftables の設定ファイル(/etc/nftables/filter.nft)を編集して、STUN/TURN(S) のポートを許可します。

  • STUN/TURN:3478(TCP、UDP)
  • TURNS: 5349(TCP、UDP)
  • Janus: udp 20000-40000
  • TURN: udp 49152-65535

今回は国内向けにポートを開放しましたが、環境に合わせて調整してください。

参考にしたサイトの通り Janus(UDP / 20000-40000)と、TURN(UDP / 49152-65535)も開けていましたが、検証時に使ってなさそうだったので塞ぎました。

OpenLiteSpeed の設定

今回設定した中で、ここが一番ハマりました。参考にしたサイトでは standalone-signaling ディレクトリを起点に Proxy 設定を入れていましたが、OLS の Web Socket Proxy が上手くいかなかったため、ドメイン直下で設定しました。

バーチャルホストにサブドメインを追加

高性能バックエンド用のサブドメインとして、hpb.example.com を追加します。

OLS の管理画面から、新しいバーチャルホストを追加し、リスナーのバーチャルホストマップに追加します。

  • 基本
    • バーチャルホスト名: hpb.example.com
    • Virtual Host Root: /var/www/$VH_NAME
    • 設定ファイル: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
  • 一般
    • Document Root: $VH_ROOT
    • ドメイン名: $VH_NAME

SSL 秘密鍵 & 証明書の設定も行っておきましょう。

外部アプリにシグナリングサーバーを追加

追加したバーチャルホストの外部アプリに、シグナリングサーバーを追加します。

  • タイプ: Web サーバー
  • 名前: Signaling
  • アドレス: 127.0.0.1:8080

Rewrite ルールを追加

追加したバーチャルホストの Rewrite ルールを追加します。

  • Rewrite 制御: はい
  • Rewrite ルール
    • RewriteCond %{REQUEST_URI} !^/.well-known/(acme-challenge|pki-validation)/
    • RewriteRule ^/(.*) http://Signaling/$1 [P,L]
    • Header set Host %{HTTP_HOST}
    • Header set X-Real-IP %{REMOTE_ADDR}
    • Header set X-Forwarded-For %{HTTP_X_FORWARDED_FOR}

Web Socket Proxy を追加

追加したバーチャルホストに Web Socket Proxy を追加します。

  • URI: /spreed
  • アドレス: 127.0.0.1:8080

以上で OLS の設定は完了です。緩やかな再起動をして、設定を反映させてください。

Nextcloud Talk に設定を反映

Nextcloud に管理者でログインし、設定画面から「管理」>「トーク」を開きます。

高性能バックエンド

  • 高性能バックエンド URL: wss://hpb.example.com
  • 共有秘密鍵:(HPB の共有秘密鍵)
  • SSL 証明書を検証する: チェックする

共有秘密鍵には、Signaling の設定ファイル(/etc/signaling/server.conf)に記載された、backend-1 の secret を入力します。

正しく設定されるとステータスが「OK」になります。

STUN/TURN サーバー

  • STUN サーバー: hpb.example.com:3478
  • TURN サーバー:
    • turn: hpb.example.com:3478(UDP と TCP)
    • turns: hpb.example.com:5349(TCP のみ)

TURN サーバーシークレットには、coTURN の設定ファイル(/etc/coturn/turnserver.conf)に記載したものを入力します。

TURN サーバーの設定欄の右に緑のチェックマークが付けば、正しく設定されています。

ビデオ通話の検証

テスト用に 6 アカウントを用意してグループを作成、ビデオ通話の検証を行ないました。

PC のブラウザから 3 回線(光回線)、iPhone の Nextcloud Talk アプリ から 3 回線(モバイル通信:Wi-Fi オフ)の合わせて 6 人でビデオ通話を行いましたが、カクついたりすることも無く非常にスムーズでした。

ConoHa VPS 2G プランでも余裕で動きましたので、小規模の運用なら全く問題ないと思います。

参考にしたサイト

Nextcloud Talkの紹介とOSS版Talk HBPのインストール | Nextcloud日本公式サイト
0.本記事の概要 この記事は、Nextcloudの追加アプリケーションである「Nextcloud Talk」に

コメント

タイトルとURLをコピーしました