昨今のコロナ事情の在宅勤務などで、ビデオ会議システムを利用することが増えた。私は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 |
OS | Ubuntu 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が使用する通信ポートに関して、公式ドキュメントには次の記載がある。
- 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の場合は次の設定を変更し、通信を許可しておく。
Networking > Virtual Cloud Networks > HOGEHOGE > Security List Details > Ingress Rules
Networking > Virtual Cloud Networks > HOGEHOGE > Network Security Group Details > Security Rules
/etc/iptables/rules.v4
など公式ドキュメントに沿って、最初から順に進めていく。apt install jitsi-meet
を実行した後の、具体的な流れは次の通り。
apt install jitsi-meet
を実行したときには無く、2020-05-31に実行したときには現れた。ちなみに、2020-05-30に私が導入を試した際には、install/uninstallを繰り返したりした後、サーバのホスト名とJitsi Meetの内部機構でのドメイン名がうまく噛み合わなくなったようで、Jitsi Meetをうまく動作させることが出来なかったが、パッケージの改善がされたのかもしれないssl_certificate_key
の内容を入力するssl_certificate
の内容を入力する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アドレス> # 行追加
---
ここまでの設定の変更が行えたら、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さんありがとう!!
公式ドキュメントの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認証には対応していない予感がする (確認はしていない)。
公式ドキュメントにある、会議室の作成権限を限定する手順は次の通り。やってみて成功したらまたレポートします。
Jitsi Meetにおける、会議室作成者を限定する設定に成功しましたので、こちらの記事を参照ください。