オープンソースなビデオ会議システム「Jitsi Meet」の導入方法 [2020-05-31版]

オープンソースなビデオ会議システム「Jitsi Meet」の導入方法 [2020-05-31版]
Page content

昨今のコロナ事情の在宅勤務などで、ビデオ会議システムを利用することが増えた。私はJitsi Meetの公式サービス「meet.jit.si」を使うことも多いが、このシステムはオープンソースで公開されていて、いわゆるオンプレミス、自前のサーバ上でも構築できるというのだ。

ならば、ネットワーク的に近い場所にひとつ構築してみるしかないだろう。もしうまく行ったら、将来的にはビデオ会議の画質などのパラメータを自分で調整してみたいし。

導入対象サーバの環境

今回、Jitsi Meetを導入するサーバの環境は次の通り。

項目内容
サービスOracle Cloud Free Tier
リージョンap-tokyo-1 (東京)
インスタンスのタイプ・シェイプVM.Standard.E2.1.Micro (1/8 OCPU, Mem: 1GB) ※Always Free対象
サーバ名meet.example.com
OSUbuntu 20.04 LTS (当初の18.04 LTSからアップグレードした状態)
Webサーバ (導入済)Nginx
SSL証明書 (取得済)Let’s Encryptのワイルドカード証明書

サーバ側のネットワーク帯域について

実際に、Jitsi Meetでのビデオ会議を同一LAN内の3~5者で利用した場合は、サーバ側のネットワーク帯域はUp/Downともに常時2~8Mbps程度使用されていた。

Oracle Cloudでは通信量制限はないので良いが (訂正) 「アウトバウンド転送量は月10TBまで無料」なので、計算上は問題なさそうだが、通信量に応じて課金されるサーバへの導入は、「パケ死」に注意が必要に思う。

Jitsi Meetインストール方法

基本的に、一次情報源である、公式サイトの次のドキュメントにしたがって進めればよいと思う。二次情報のなかには、後述の通信ポートの情報が古いものがあったりするので。

1. 事前準備: 通信の許可

Jitsi Meetが使用する通信ポートに関して、公式ドキュメントには次の記載がある。

  • 80 TCP - for SSL certificate verification / renewal with Let’s Encrypt
  • 443 TCP - for general access to Jitsi Meet
  • 4443 TCP - for fallback network video/audio communications (when UDP is blocked for example)
  • 10000 UDP - for general network video/audio communications
  • 22 TCP - if you access you server using SSH (change the port accordingly if it’s not 22)

これらの通信がインターネットからサーバへ届くように、Oracle Cloudの場合は次の設定を変更し、通信を許可しておく。

  1. 「イングレス・ルール」で許可
    • Networking > Virtual Cloud Networks > HOGEHOGE > Security List Details > Ingress Rules
  2. 「セキュリティ・ルール」で許可
    • Networking > Virtual Cloud Networks > HOGEHOGE > Network Security Group Details > Security Rules
  3. サーバのOSのファイアウォール (ufwやiptables) で許可
    • Ubuntuの場合: /etc/iptables/rules.v4 など

2. 公式ドキュメントの手順でインストール

公式ドキュメントに沿って、最初から順に進めていく。apt install jitsi-meet を実行した後の、具体的な流れは次の通り。

  • 導入サーバのhostnameを聞かれるので「meet.example.com」と入力する
    • この質問は先日2020-05-30にapt install jitsi-meetを実行したときには無く、2020-05-31に実行したときには現れた。ちなみに、2020-05-30に私が導入を試した際には、install/uninstallを繰り返したりした後、サーバのホスト名とJitsi Meetの内部機構でのドメイン名がうまく噛み合わなくなったようで、Jitsi Meetをうまく動作させることが出来なかったが、パッケージの改善がされたのかもしれない
  • 質問「SSL certificate for the Jitsi Meet instance」に対しては、今回の環境では事前にSSL証明書を取得済みなので、「I want to use my own certificate」を選択する
    • 「Full local server path to the SSL key file」には、Nginx設定のssl_certificate_keyの内容を入力する
    • 「Full local server path to the SSL certificate file」には、Nginx設定のssl_certificateの内容を入力する

3. NAT環境用の設定

apt install jitsi-meet完了後の作業として。今回のサーバ自体には「10.0.0.X」という、ローカルネットワークのIPアドレスが割り当てられており、サーバがいわゆるNAT配下にあることになる。このため、Advanced configurationを実施する。

sudo vim /etc/jitsi/videobridge/sip-communicator.properties
---
#org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=~ # この行はコメントアウトする

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<サーバのローカルIPアドレス> # 行追加
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<サーバのグローバルIPアドレス> # 行追加
---

4. いよいよ動作確認

ここまでの設定の変更が行えたら、Jitsi Meet関連のサービスを次のように再起動して、各サービスの再起動後の状態が「active (running)」であることを確認する。

sudo systemctl restart prosody.service
systemctl status prosody.service

sudo systemctl restart jicofo.service
systemctl status jicofo.service

sudo systemctl restart jitsi-videobridge2.service
systemctl status jitsi-videobridge2.service

sudo systemctl restart nginx.service
systemctl status nginx.service

次に、Jitsi Meetの導入URLとなるhttps://meet.example.com/へ、Google Chromeなどのブラウザでアクセスし、2者間や3者間でのビデオ会議を行ってみる。

サーバ側では、dstatコマンドなどでビデオ会議中の負荷や通信量を観測していると楽しい。なお、手元にある端末をすべて並べて、5者でのビデオ会議まで試してみたが、今回の環境では特に問題なかった。こんなに使える環境が無償だなんて、Jitsiさん、Oracleさんありがとう!!

Jitsi Meetアンインストール方法

公式ドキュメントのUninstallの手順に加えて、次のディレクトリの削除も行っていたほうが良いように思う。もしJitsi Meetの再インストールを行うことになった場合、前回分の設定が残っていないクリーンな状態にしておくほうが、トラブルが少ないであろうから。

sudo rm -rf /etc/jitsi/
sudo rm -rf /var/lib/prosody/
sudo rm -rf /var/log/prosody/
sudo rm -rf /usr/share/jicofo/
sudo rm -rf /usr/share/jitsi-*/

お役立ち情報

ログ出力の抑制

Jitsi Meetのログファイル/var/log/jitsi/jvb.logのサイズ増加が激しい場合には、次のページの対応を行えばよい。

会議室履歴の削除

導入したJitsi Meetのトップページには、当該ブラウザで使用した会議室の履歴が表示されるようになるが、これをクリアしたい場合はどうするか。この履歴情報はブラウザのローカルストレージに保存されているので、次のページを参考に削除を行えば会議室の履歴もクリアされる。

会議室作成者の限定

Jitsi Meetのデフォルト状態では、アクセスしてきた誰もが会議室を作成できる。しかし個人サーバの管理者としては、「誰もが作成できる」点には一応制限をかけておきたい。そのため例えば、NginxでBASIC認証をかけようかと考えたが、iOSやAndroidの専用アプリ「Jitsi Meet」はBASIC認証には対応していない予感がする (確認はしていない)。

公式ドキュメントにある、会議室の作成権限を限定する手順は次の通り。やってみて成功したらまたレポートします。

追記 [2020-06-09]

Jitsi Meetにおける、会議室作成者を限定する設定に成功しましたので、こちらの記事を参照ください。