テレワークのためのWebツール、ZOOMを代替えするJitsiMeet

テレワークのためのWebツール、ZOOMを代替えするJitsiMeet

AWSクラウド上で、Ubuntuサーバを立ち上げて、その上でJitsiMeetを動かします。

JitsiMeetとは、ZOOMを代替えするオープンソースです。

JitsiMeetの公式サイトには、

Jitsiは、安全なビデオ会議ソリューションを簡単に構築および展開できるようにする一連のオープンソースです。
無料枠でも以下を利用できる

  • HDオーディオビデオ
  • 一度に最大100人の参加者が無制限無料で会議にアクセスできる
  • エンドツーエンド暗号化
  • 複数の参加者が同時に画面を共有できる
  • 参加者のデスクトップをリモートコントロールできる
  • Google、MicroSoft(カレンダー)、Slack(コミュニケーション連携)を統合できる

と謳っています。

UbuntuでSnapパッケージを使って、JitsiMeetをインストールし、AWS上のRoute53で購入してあるドメインmiko.servicesのサブドメイン、tool.miko.servicesで運用します。

(前提条件)

DebianベースのGNU / LinuxシステムにJitsi-Meetをインストール

Debian 9(Stretch)以降 
Ubuntu 18.04(Bionic Beaver)以降

必要なパッケージ

gnupg2
nginx-full
sudo
注意 : OpenJDK8またはOpenJDK11を使用する必要があります。

では、JitsiMeetをインストールします。

1.Jitsi Meet インストール

システムが最新であり、必要なパッケージがインストールされていることを確認

ubuntu@ip-10-21-12-68:~$ sudo -s
root@ip-10-21-12-68:/home/ubuntu# apt update
root@ip-10-21-12-68:/home/ubuntu# apt -y upgrade

root@ip-10-21-12-68:/home/ubuntu# apt install apt-transport-https

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1704 B of archives.
After this operation, 161 kB of additional disk space will be used.
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal-updates/universe amd64 apt-transport-https all 2.0.5 [1704 B]
Fetched 1704 B in 0s (39.5 kB/s)
Selecting previously unselected package apt-transport-https.
(Reading database ... 93685 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_2.0.5_all.deb ...
Unpacking apt-transport-https (2.0.5) ...
Setting up apt-transport-https (2.0.5) ...

JitsiはUbuntuのuniverseパッケージリポジトリからの依存関係を必要とします。
これが有効になっていることを確認するには、次のコマンドを実行します。

root@ip-10-21-12-68:/home/ubuntu# sudo apt-add-repository universe
'universe' distribution component is already enabled for all sources. (こうなればOK!!)

サーバーが使用するドメインを決定します。
(例) meet.example.org → ドメインのDNS:Aレコードを設定。
※ 今回はAWS上のRoute53で購入してあるドメインmiko.servicesのサブドメイン、
  tool.miko.servicesで運用します。

●完全修飾ドメイン名(FQDN)の設定(オプション)

root@ip-10-21-12-68:/home/ubuntu# sudo hostnamectl set-hostname tool.miko.services

/etc/hostsファイルに同じFQDNを追加

root@ip-10-21-12-68:/home/ubuntu# vi /etc/hosts

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
10.21.12.194 tool.miko.services

root@ip-10-21-12-68:/home/ubuntu# ping "$(hostname)"

PING rkt.mikolabo.net (10.21.12.68) 56(84) bytes of data.
64 bytes from rkt.mikolabo.net (10.21.12.68): icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from rkt.mikolabo.net (10.21.12.68): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from rkt.mikolabo.net (10.21.12.68): icmp_seq=3 ttl=64 time=0.043 ms
^C
--- rkt.mikolabo.net ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6141ms
rtt min/avg/max/mdev = 0.017/0.030/0.043/0.008 ms

●Jitsiパッケージリポジトリを追加

root@ip-10-21-12-68:~# curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3114  100  3114    0     0   6583      0 --:--:-- --:--:-- --:--:--  6583

root@ip-10-21-12-68:~# echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null

root@ip-10-21-12-68:~# sudo apt update

Hit:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease
Get:5 https://download.jitsi.org stable/ InRelease [1882 B]
Get:6 https://download.jitsi.org stable/ Packages [51.2 kB]
Fetched 53.1 kB in 1s (51.3 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.

セキュリティグループを構成します

Jitsi Meetサーバーへのトラフィックを許可するには、ファイアウォールで次のポートを開く必要があります。

  • 80 TCP-Let’sEncryptを使用したSSL証明書の検証/更新用
  • 443 TCP-JitsiMeetへの一般的なアクセス用
  • 10000UDP 一般的なネットワークビデオ/オーディオ通信用
  • 22 SSHを使用してサーバーにアクセスする場合(22でない場合は、それに応じてポートを変更)
  • 3478 UDP スタンサーバーをクエリするため(coturn,オプション,有効にするにはconfig.jsを変更する必要があります)
  • 5349 TCP TCPを介したフォールバックネットワークビデオ/オーディオ通信用 (たとえば,UDPがブロックされている場合)
    coturnによって提供されます

※ 自前のサーバを立てる場合で、ufwコマンドでアクセス制御を行う場合

  • sudo ufw allow 80/tcp
  • sudo ufw allow 443/tcp
  • sudo ufw allow 10000/udp
  • sudo ufw allow 22/tcp
  • sudo ufw allow 3478/udp
  • sudo ufw allow 5349/tcp
  • sudo ufw enable

●ファイアウォールのステータスを確認

  • sudo ufw status verbose

●TLS証明書 Jitsi Meetインストール中のオプション選択

  1. 推奨されるオプションは、[新しい自己署名証明書の生成]を選択し、後でLets-Encrypt証明書を作成することです(以下を参照)(これにより、自己署名証明書が置き換えられます)
  2. 別の証明書を使用する場合、または別のチャレンジタイプのLet’s Encryptを選択する場合(詳細は以下を参照)、最初にその証明書を作成してからjitsi-meetをインストールし、[自分の証明書を使用する]を選択する必要があります。
  3. 自己署名証明書を使用することもできますが、次の理由からお勧めしません。

   ①自己署名証明書を使用すると、サーバーのIDを確認できないため、
    ユーザーのブラウザーに警告が表示されます。
   ②Jitsi Meetモバイルアプリには、信頼できる認証局によって
    署名された有効な証明書が必要であり、自己署名証明書を
    選択した場合、サーバーに接続できません。

●JitsiMeetインストール

注:インストーラーは、NginxまたはApacheが(この順序で)存在するかどうかを確認し、
  JitsiMeetにサービスを提供するために検出したWebサーバー内に仮想ホストを構成します。

同じマシンのポート443ですでにNginxを実行している場合、現在のポート443と競合するため、
ターンサーバーの構成はスキップされます。

初めに、ホスト名を入力し、その後、SSL / TLS証明書の生成 について尋ねられますが、
[ 新しい自己署名証明書の生成 ] を選択しています。

root@ip-10-21-12-230:/home/ubuntu# sudo apt install jitsi-meet

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
 :  :  :
 :  :  :
Fetched 124 MB in 47s (2627 kB/s)
Extracting templates from packages: 100%
Preconfiguring packages ...
ドメインを指定
  :  :  :
  :  :  :
Setting up jitsi-meet (2.0.5765-1) ...
Setting up ruby2.7 (2.7.0-5ubuntu1.3) ...
Processing triggers for ufw (0.36-6) ...
Processing triggers for systemd (245.4-4ubuntu3.6) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

●アクセス制御

デフォルトでは、Jitsi Meetサーバーにアクセスできる人は誰でも会議を開始できます。
サーバーが世界中に公開されている場合は、誰でも他の人とチャットできます。

・会議を開始する機能を登録ユーザーに制限する場合は、安全なドメインを設定が必要です。
・会議/ルーム のアクセス制御はルームで管理されます。
 作成後に特定のルームのWebページでパスワードを設定できます。

●Let’s Encrypt証明書を生成する(オプション、推奨)

通信を暗号化するにTLS証明書が必要です。最良の方法は、認証局によって署名された証明書を作成することです。

今回はAWSを使ったので、AWS Certificate Manager (ACM) により、SSL/TLS 証明書を発行して使用しました

最も簡単な方法は、Let’sEncryptを使用することです。シェルで以下を実行するだけです。

  sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

※ このスクリプトはHTTP-01チャレンジタイプを使用するため、
  ポート80、443のアクセス許可が必要。
  別のチャレンジタイプでは、このスクリプトを使用できない。

●Let’s Encrypt証明書をセットアップ

※ 80,443ポートが開いていないと、Let’s Encrypt証明書でエラーとなるので注意!

root@tool:/home/ubuntu# sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
-------------------------------------------------------------------------
This script will:
#NAME?
- Download certbot-auto from https://dl.eff.org to /usr/local/sbin
- Install additional dependencies in order to request Let’s Encrypt certificate
  :  :  :
  :  :  :
IMPORTANT NOTES:		
 - Congratulations! Your certificate and chain have been saved at:		
   /etc/letsencrypt/live/tool.miko.services/fullchain.pem		
   Your key file has been saved at:		
   /etc/letsencrypt/live/tool.miko.services/privkey.pem		
   Your cert will expire on 2021-07-19. To obtain a new or tweaked		
   version of this certificate in the future, simply run certbot		
   again. To non-interactively renew *all* of your certificates, run		
   "certbot renew"		
 - If you like Certbot, please consider supporting our work by:		
		
   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate		
   Donating to EFF:                    https://eff.org/donate-le		
		
Configuring nginx		

インストールが機能していることを確認します

Webブラウザを起動し、ホスト名またはIPアドレスをアドレスバーに入力。

自己署名証明書の場合、Webブラウザーは、証明書を信頼していることを確認するように求めます。

新しい会議を作成するように求めるWebページが表示されます。会議を正常に作成でき、セッションに参加できることを確認します。

※ iOSまたはAndroidアプリからテストしている場合、自己署名証明書を使用していると、
  この時点で失敗する可能性があります。

Let’s Encrypt証明書の登録成功!! https://mikolabo.net で以下の開始画面表示に成功!!

上記イメージのように、ノートパソコンのWebブラウザでWeb会議を開催し、自身のスマホから専用アプリ(JitisMeetクライアント)で会議に参加した。
(実験に協力してくれる人がいなかったので、自分でバンバンした)

また、後日、武蔵浦和オフィスから遠隔の川口の間で、会話が成立した。

この時、同時に渋谷にオフィスあるノートパソコンの間でも実験したが、音声、ビデオの設定ができていなかったらしく、こちらの映像は向こうに見えたけど、あちらの様子が見えなかった。

最初はこんなものです。

あと、最後に公式サイトにあった参考資料を載せておきます。

●高度な構成

NATの背後にあるマシンの場合、 jitsi-videobridgeは起動時に自動的に構成する必要があります。
3方向の通話が機能しない場合は、外部からアクセスできるようにするために、jitsi-videobridgeをさらに構成する必要があります。
必要なポート・ルーティング(転送)は、TCP/443 または TCP/4443 および UDP/10000 です。

/etc/jitsi/videobridge/sip-communicator.properties

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>

既存のコメントを有効化 : org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES

※ ice4jのドキュメントを参照


●Systemd 制限

systemdを使用するシステムでのデフォルトのデプロイメントでは、最大プロセスと開いているファイルのデフォルト値が低くなります。
デフォルト値は100人未満の参加者に適しています。使用するブリッジがより多くの参加者を期待する場合は、デフォルト値を調整する必要があります。

値を更新 : /etc/systemd/system.conf 

DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000

Systemdの詳細確認

sudo systemctl daemon-reload
sudo systemctl restart jitsi-videobridge
sudo systemctl status jitsi-videobridge2  確認:Tasks: XX (limit: 65000)

ファイルとプロセス部分をチェック

cat /proc/`cat /var/run/jitsi-videobridge/jitsi-videobridge.pid`/limits	
	
	Max processes 65000 65000 processes 
	Max open files 65000 65000 files

JitsiMeetは、先に取り上げたRocker.Chatとの連携機能もあり、Rocket.Chatでチャットしているときに、そこからJitsiMeetのWeb会議に切り替えたりできました。

また、カレンダーに会議スケジュールを登録したり、参加者のパソコンを遠隔操作する機能もあり、端末もWin,Linux,iPhon,Androidが使えます。

ZOOMのセキュリティが気になる場合や、完全にプライベート空間に自前でシステムを構築する必要がある場合に、ZOOMを置き換える解決策の1つになると思います。