Jitsi Meet
Jitsi Meetはオープンソースのビデオ会議システムJitsiのDebian/Ubuntu用のシステム環境です。
Jitsiは、End to End Scryption (暗号化)されたシステムで、操作が容易です。
技術情報
Jitsi Meet Blog : https://jitsi.org/blog/category/jitsi-meet/
Document : https://github.com/jitsi/jitsi-meet/blob/master/doc/README.md
Jitsi Meet Wiki : https://github.com/jitsi/jitsi-meet/wiki
Jitsi Jicofo(Conference Focus / managing media sessions) : https://github.com/jitsi/jicofo
Prosody (XMPP Communication Server) : https://prosody.im/
日本語での資料
https://rohhie.net/an-open-source-web-conferencing-system-jitsi-server-installation/
インストール
参考にしたサイト
インストール環境 Debian 10 (上記資料はUbuntuですが、Debian10でも同じ手順でOKでした)
1)事前準備
ドメイン名とそのドメイン名をインストールするサーバーのホスト名(FQDN:fully qualified domain name)と同じに設定する
例えば ホスト名 meet FQDN は meet.example.com
sudo hostnamectl set-hostname meet.example.com
sudo sed -i 's/^127.0.1.1.*$/127.0.1.1 meet.example.com meet/g' /etc/hosts
確認
hostname
hostname -f
2) ファイアウォールの設定
ufwコマンドで設定します。
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw allow in 10000:20000/udp
sudo ufw enable
システムの更新とシャットダウンおよび再起動
sudo apt update
sudo apt upgrade -y && sudo shutdown -r now
3)OpenJDK JRE8インストール
Jitsi Meet jitsi-meet_2.0.4548-1 (2020年5月19日)では、jitsi-videobridge2_2.1-197-g38256192-1でJavaはJDK-8を使っているので、openJDK のJRE8 をインストールします。
Debian 10 Buster にOpenJDK JRE8 をインストール
参考にしたサイト: Debian 10にOpenJDK 8をインストール
https://qiita.com/witchcraze/items/47d44df81f1b152bab8c
https://linuxize.com/post/install-java-on-debian-10/
sudo apt update
sudo apt install apt-transport-https ca-certificates wget dirmngr gnupg software-properties-common
wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
sudo apt update
sudo apt install adoptopenjdk-8-hotspot
java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Debian-3deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Debian-3deb10u1, mixed mode, sharing)
sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 自動モード
1 /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java 1081 手動モード
2 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 手動モード
現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 1
update-alternatives: /usr/bin/java (java) を提供するためにマニュアルモードで /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java を使います
java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.252-b09, mixed mode)
JAVA_HOMEの設定
echo "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | sudo tee -a /etc/profile
source /etc/profile
4)Nginxのインストール
sudo apt install -y nginx
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
5)Jitsi Meet インストール
レポジトリの設定
cd
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"
sudo apt update -y
Jitsi Meetのインストール
sudo apt install -y jitsi-meet
インストールの途中でFQDN(meet.example.com)を入力します。
SSL証明書の設定で、デフォルトの「Generate a new self-signed certificate (You will later get a chance to obtain a Let's Encrypt certificate) 」で実行
インストール終了後に、Let's Encrypt SSL証明書を適用させます。
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
途中でLet's Encrypt からの連絡先メールアドレス(自分のアドレスで)を入力
6)確認
https://meet.example.com で動作確認
7)会議作成の制限
インストール完了した状態は、URLを訪問した人は、だれでも会議が作成できるので、セキュリティ対策として作成者とそのパスワードで制限します。
詳細はここから: https://www.digitalocean.com/community/tutorials/how-to-install-jitsi-me...
※ authentication = "internal_plain" は authentication = "internal_hashed" に変更します。ホストがパスワードを作れるようにするため。
上記の「Step 5 — Locking Conference Creation」を参考にしてください。
sudo nano /etc/prosody/conf.avail/meet.example.com.cfg.lua
編集 /etc/prosody/conf.avail/meet.example.com.cfg.lua
...
authentication = "anonymous"
...
次のように
...
authentication = "internal_hashed"
...
※このauthenticationについてはprosodyのマニュアル(https://prosody.im/doc/authentication)に説明がありますが、Jitsi Meet上での動作についてはまだ不明ですが。
同じファイルの最後に以下を追加
...
VirtualHost "guest.meet.example.com"
authentication = "anonymous"
c2s_require_encryption = false
別のファイルを編集 Open another configuration file at /etc/jitsi/meet/meet.example.com-config.js
sudo nano /etc/jitsi/meet/meet.example.com-config.js
...
// anonymousdomain: 'guest.example.com',
...
変更
...
anonymousdomain: 'guest.meet.example.com',
...
次に編集するファイル /etc/jitsi/jicofo/sip-communicator.properties
sudo nano /etc/jitsi/jicofo/sip-communicator.properties
以下の行を2行目に追加します。
org.jitsi.jicofo.auth.URL=XMPP:meet.example.com
ユーザー名とパスワードを追加
sudo prosodyctl register user meet.example.com password
※もしユーザー名を削除する場合は sudo prosodyctl deluser ユーザー名@meet.example.com
Jitsi Meet 再起動
sudo systemctl restart prosody.service
sudo systemctl restart jicofo.service
sudo systemctl restart jitsi-videobridge2.service
上記の設定は、同様に、次のサイト https://jitsi.github.io/handbook/docs/devops-guide/secure-domain も参考にします。
ランディングページ(トップページ)を非表示にする場合
/etc/jitsi/meet/meet.example.com-config.js の enableWelcomePage: true を false に設定する
// Whether to use a welcome page or not. In case it's false a random room$
// will be joined when no room is specified.$
enableWelcomePage: true,$ <----- false
Prosodyctlの概要
sudo prosodyctl --help
prosodyctl - Manage a Prosody server
Usage: /usr/bin/prosodyctl COMMAND [OPTIONS]
Where COMMAND may be one of:
- adduser JID Create the specified user account in Prosody
- passwd JID Set the password for the specified user account in Prosody
- deluser JID Permanently remove the specified user account from Prosody
- start Start Prosody
- stop Stop a running Prosody server
- restart Restart a running Prosody server
- reload Reload Prosody's configuration and re-open log files
- about Show information about this Prosody installation
- check Perform basic checks on your Prosody installation
- cert config|request|generate|key|import Helpers for generating X.509 certificates and keys.
- cert config HOSTNAME [HOSTNAME+] Builds a certificate config file covering the supplied hostname(s)
-
cert key HOSTNAME <bits>
Generates a RSA key named HOSTNAME.key -
Prompts for a key size if none given -
cert request HOSTNAME [HOSTNAME+] Generates a certificate request for the supplied hostname(s) -
cert generate HOSTNAME [HOSTNAME+] Generates a self-signed certificate for the current hostname(s) -
cert import [HOSTNAME+] /path/to/certs [/other/paths/]+ Copies certificates to /var/lib/prosody -
status Reports the running status of Prosody
例えば、一度登録したユーザーのパスワードを変更する場合は、prosodyctl passwd ユーザー名@JID(URL名) を実行して変更するパスワードを入力します。
Prosodyの設定
Prosodyは認証機能をサポートしています。参考にしたページ: https://prosody.im/doc/authentication
providerの設定で変更可能
例えば、 authentication = "internal_hashed" -- Default
- internal_plain Plaintext passwords stored using built-in storage
- internal_hashed Hashed passwords stored using built-in storage
- cyrus Cyrus SASL integration (LDAP, PAM, …)
- anonymous SASL 'ANONYMOUS' mechanism, random username, requires no credentials
Hashed or Plain ? https://prosody.im/doc/plain_or_hashed
◆ Debian 10 busterにJitsiMeetをインストール
以下のサイトを参考にインストール
https://nerdonthestreet.com/wiki?find=Host+a+Jitsi+Meet+Server
◆ Debian 11 bullseye にJitsiMeetをインストール
以下のサイトを参考にインストール
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart
注意事項:
- debian11 での標準Javaパッケージは OpenJDK 11 です。 openjdk-11-jdk を事前にインストール
- JitsiMeetレポジトリなどのインストールは次を参照 https://jitsi.org/downloads/ubuntu-debian-installations-instructions/
- Prosody PackageはProsodyのページでレポジトリを追加、Prosodyは、まだ事前インストールしない、JitsiMeetインストール時に実行 https://prosody.im/download/package_repository
- Certbotの事前インストール、SSL対象のドメインは追加しない
- ダイアルインサービスは、電話料金がかかるので、インストール時に有効にしないほうが安心です。
◆ Debian 12 Bookworm に JitsiMeetをインストール(不安定です!)
2023年6月23日現在、Debian12でのJitsiMeetはインストール完了しますが、会議開始後、すぐに再接続するProsodyの設定エラーのような (Can’t connect to meeting - New install of Jitsi Meet)、障害が起きています。
以下のサイトを参考にインストール
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart
注意事項:
- debian12 Bookworm での標準Javaパッケージは OpenJDK 17 です。 Azulレポジトリを追加 https://docs.azul.com/core/zulu-openjdk/install/debian#install-from-azul... openjdk-11-jdk を事前にインストール
- JitsiMeetレポジトリなどのインストールは次を参照 https://jitsi.org/downloads/ubuntu-debian-installations-instructions/
- Prosody PackageはProsodyのページでレポジトリを追加、Prosodyは、まだ事前インストールしない、JitsiMeetインストール時に実行 https://prosody.im/download/package_repository
- Certbotの事前インストール、SSL対象のドメインは追加しない
- ダイアルインサービスは、電話料金がかかるので、インストール時に有効にしないほうが安心です。
FAQ
Q: サイト訪問者がroom作成ページにアクセスするのをブロックするには
出典:2018年11月 https://community.jitsi.org/t/how-to-request-authentication-before-the-meeting-room-is-initialized/15625/5
A: jicofo config で設定して、そのコンポーネント(jicofo)を再スタート sudo systemctl restart jicofo.service
Q: roomから出て、誰かがモデレーターから外れると自動でモデレーター権限を付与できない、という設定は可能でしょうか?
出典:2017年5月 https://community.jitsi.org/t/jitsi-users-users-to-login-before-joining-a-room-prosody/12508/5
A: この設定は現在サポートされていません。モデレーターがroomから出ると、ほかの一人がモデレーターになります。また、prosodyモジュールには、すべての参加者へモデレーター権限を与える、オプション設定があります。たぶん、そのオプションをOFFにすると、できるかもしれません。
Q: モデレーターの権限について知りたい?
出典: https://community.jitsi.org/t/how-to-what-is-a-meeting-moderator/73139
A: モデレーターの権限
- 会議室のパスワードを追加できる
- モデレーター以外の人にモデレーターの役割を付与する
- 非モデレーターをキックできる(muc_owner_allow_kick.patchを適用した場合のみ)
- 参加者をミュートさせる
- 全員にモデレーターのビデオ画面を見てもらう機能(全員がモデレーターをフォローしている)
- 参加者をミュートで参加させる機能(全員がミュートで開始)
- ビデオなしで参加者を参加させる機能(誰もがビデオなしで始めます)
- ロビー(待機室)を使う・使わない設定
- 参加/ノック通知リクエストを承認する機能(ロビーが有効になっている場合)
- e2e暗号化を有効にする機能、現在ベータ版です(利用可能な場合)
A: モデレーターのデフォルトインストール時の設定内容
- 最初に参加する参加者はモデレーターです
- モデレーターが離れると、新しいモデレーターが自動的に選択されます
- 選択はサーバー側で行われます(Prosody&Jicofoによる)
A: モデレーターのデフォルトインストール(Secure Domain セットアップで)時の設定内容
- 認証されたすべてのユーザーはモデレーターです
- ゲストユーザーはモデレーターではありません、会議室を作成することもできません
A: もし、mod_muc_allowners.lua を有効した場合
- 誰もがモデレーターです
- これは https://meet.jit.si のデフォルトの動作です
Q: JitsiMeetの録画をインストールしたい
A: この設定は、Debian10のJitsiMeetサーバーに、録画機能(Jibri)をインストールする手順です。一般的には、JitsiMeetのサーバーとJibriサーバーは別のサーバーにインストールするようですが。
この設定で、Youtubeのライブ配信もできました。
また、XMPPで使うTCPポート 5222, 5223, 5347 をオープンにします。Ubuntu 16.04へのJibriインストールを参考に
- Ubuntu 16.04へのJibriインストールを参考に https://raj-yadav-jibri-setup.blogspot.com/2020/03/how-to-install-jibri-recording-server.html
- TCPポートとJitsiについては https://community.jitsi.org/t/ports-5222-5269-5280-5347/36862
上記の設定ではDebia10のJavaがデフォルトは11なのでJitsiMeetのサーバーのインストールではそのままでOKです。Debian10のサーバーにJitsiMeetサーバーをインストールした際のJitsiMeetのソースにJava8関連が入っております。ただし、jibriをインストールする場合は、Javaの8をインストールして、そのJava8を実行させるときに、Java8への絶対パスで実行させる設定を行います。つまり、デフォルトではJava11ですが、Jibriの時だけJava8を使う環境設定になります。
Debian10にJava8をインストール:
Q: RMTPサーバーでストリーミング配信させたい
A: Jibriは録画とストリーミングができ、デフォルトではYoutubeライブ配信でストリーミングする設定になっています。Jibriで、Youtubeではなく、RMTPサーバーでストリーミング配信させる場合は、以下の記事を参考に設定します。
- Jibri Streaming To Custom RMTP Endpoint
- Stream to any OR Multiple RTMP Destinations + Record Simultaneously
参考資料: Easy way to create a Jitsi cluster based on Debian Buster
Q: 接続ユーザー数とサーバースペックについて
A: JitsiMeetに接続するユーザー数とサーバースペックは、クラウド環境により異なりますが、さくらのクラウド(石狩第1ゾーン、2021年1月21日)の場合
- 10名で接続 サーバーは4コア、メモリは3GBで、#CPUは70%-80% 程度です。 接続状態は良好
- 20名で接続 サーバーは2コア、メモリは3GBで、#CPUは120%-130% 程度です。 接続状態は時々接続エラーやカメラ画面が黒くなり、運用は困難
- 20名の接続 サーバーは8コア、メモリは5GBで接続状態は良好でした。 同じ石狩第1ゾーンの「コア占有プラン」の6コア/32GBメモリでは限界でした。
- 30-40名の接続 サーバーは10コア、メモリは6GBで可能だと推測します。
推測ですが、ユーザー数が増えた場合は、CPUコアを増やしたほうが良いと思います。ユーザー接続があると、スレッドを作るようなので、コア数を多くすることで安定した接続が維持できるようです。
さくらのクラウドでは、スレッドを多く使うので、コア数が多いほうがユーザー増加に対応できます。「コア占有プラン」では、2021年2月2日の時点でテスト、それほど、差がありませんでした。
Q: カメラやマイクのないPC(デスクトップや古いノートPC)の場合
Google Chromeでアクセスすると、参加者の映像が表示しない、参加者名だけの黒い画面しか表示しない。どうしたらカメラ映像が表示されるか。
A: PCにマイクやカメラが接続されていない場合は、自動的にカメラ映像もOFFとなり、黒くなります。もし、マイクやカメラがないPCで会議参加者のカメラ表示などを見たい場合は、GoogleChrome設定でカメラや音声を有効にすることで他の参加者の画像が表示されます。
Q: Google Analyticsの設定について
A: Google Analyticsの設定は、以下のページを参考にしました。 ただし、Create a analytics-ga.min.js file in / etc / jitsi / meet / lib folder はミスがあり、/ etc / jitsi / meet / libs が正しいディレクトリ名です。
- https://community.jitsi.org/t/how-to-correctly-enable-google-analytics/8...
- https://developers.google.com/analytics/devguides/collection/analyticsjs/
ファイル名 analytics-ga.min.js ファイルを次のディレクトリに作成 /etc/jitsi/meet/libs
次のページから参照 : https://developers.google.com/analytics/devguides/collection/analyticsjs/
以下のスクリプトを analytics-ga.min.js ファイルに記載します。AnalyticsのIDも記載し保存します。
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
/etc/jitsi/meet にある meet.ドメイン名-config.js ファイルに記載されている以下の箇所を設定します。
scriptURLs: [
“libs/analytics-ga.min.js”, // google-analytics
// “https://example.com/my-custom-analytics.js 5”
],
ApacheおよびNginxを再起動