オープンソースなWeb会議システム Jitsi Meet Server インストール

Openmeetingsのフル機能がライセンス的な意味で会社で使えなくなって2ヶ月がたとうとしているある日曜日、オープンソースなWeb会議システムを試してみようと考えた。

その名は Jitsi Meet で、なんか面白そうな感じがする。

※今回、Chromeでカメラが使えない問題が発生した。どうやら、JitsiでもChromeでもなくWindowsが原因だった模様、解決できた。これは仕方ないかなぁ…最後の方で顛末を記している。





Jitsi Meetの特徴は、インストールが簡単であること。また、ブラウザでアクセスすれば簡単に会議室が開け、そのURLに他の人がアクセスするだけで会議に参加できること。
画面の共有はできるがOpenmeetingsのように相手に制御を渡すことはできない。また、Openmeetingsのようなホワイトボード機能やスケジュール機能はない。
Flash Playerは使わないし、JNLPを使うこともないので、追加で何かをインストールする必要もなさそう。

ってな具合。とっても良いと思う。

やること。

 

学習

まずは学習だ。
Jitsi / New tutorial: Installing Jitsi Meet on your own Linux Server
Youtubeは凄いなー、テロップを自動で出すだけでなく、それを翻訳できる訳で…俺でもわかる!

このチュートリアルは Ubuntu 16.04 LTS へのインストールをしているようなので、仮想環境で作成。
インストール時にはOpenSSH Serverを選択し、インストール後に以下を行う。

  • アップデートを全部インストールしておく。
  • SSHで接続できるようにする。

チュートリアルでは以下が説明されていた…ように思われる。

  • ルートユーザーでアクセスできるようにする。
    この後の操作は su – した後に行われている。
  • ファイアウォールでTCPの22,80,443、およびUDPの10000-20000を解放する。
    ufw enable
    ufw allow in ssh
    ufw allow in 80/tcp ←でも80番ポートは使わないんじゃね?
    ufw allow in 443/tcp
    ufw allow in 10000:20000/udp
  • モジュールをインストールするために鍵を読み込み、リポジトリを登録する。
    鍵をダウンロードする。
    wget https://download.jitsi.org/jitsi-key.gpg.key
    鍵を追加する。
    apt-key add jitsi-key.gpg.key
    ※本当は鍵を確認する手順が説明されているけど、ここでは省略した。
  • リポジトリを追加する。
    echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list
    SSLによる暗号化を必要とするので、サーバーの証明書を用意する。
    すでにあるものを使ったり、Let’s Encryptを利用したり、自己署名証明書を利用する。
  • WebサーバーはnginxやApacheが利用できる、ブリッジさせる感じ?先にインストールしておく。パッケージインストール時に必要な設定がなされる。
    apt install nginx
    apt install apache2
  • パッケージをインストールする。
    apt update
    apt install jisti-meet
  • インストーラーがホストについて訪ねてくる。
    FQDN名やIPアドレスを入力する。IPアドレスを入力すると、その後はIPアドレスしか受け付けない。
    証明書はどうするか訪ねてくる。
    チュートリアルは生成することを選んでいる。
    うちの場合は自己署名証明書を使うので、I want to use my own certificate を選べば良さそう。
  • ブラウザでアクセスして試す。

 

インストール

Ubuntu16.04でホスト名が使える場合

とりあえず、やってみた。
SSLが必要だから、事前にサーバーの証明書を用意しておく。ウチではオレオレ証明書を使っているので過去記事ベースに作成Let’s Encryptで証明書を取ることができる環境ならこれを使ってもいい
2020/03/27追記 ActiveDirectoryで管理されたネットワークなら、サーバーの管理者に「サーバー証明書署名要求」を送り、署名してもらったものを設置すれば、ドメインに参加しているPCから警告なしにアクセスができる。上記オレオレ証明書に関する投稿で書いたやり方で要求を作って運用できている。

$ sudo passwd ← rootのパスワード設定
$ su - ← rootになる
# ufw enable ← ファイアウォール設定
# ufw allow in ssh
# ufw allow in 443/tcp
# ufw allow in 10000:20000/udp
# ufw status ← 設定結果の確認
# wget https://download.jitsi.org/jitsi-key.gpg.key ← GPGキーのダウンロード
# apt-key add jitsi-key.gpg.key ← GPGキーの登録
# echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list ← リポジトリ追加
# apt update
# apt install nginx   ← WebサーバーにNginxを使う場合(どちらか一方)
# apt install apache2 ← WebサーバーにApacheを使う場合(どちらか一方)
# apt install jitsi-meet

インストール中の問い合わせ
The hostname of the current installation:
→ temp.hogeserver.hogeddns.jp

SSL certificate for the Jitsi Meet instance
→ I want to use my own certificate ※この選択はチュートリアルとは違っている

Full local server path to the SSL key file:
→ /etc/ssl/temp.hogeserver.hogeddns.jp.key ※SSLキーファイルをこのタイミングで要求している

Full local server path to the SSL certificate file:
→ /etc/ssl/temp.hogeserver.hogeddns.jp.crt ※SSL証明書ファイルをこのタイミングで要求している

これでインストールは終了。だけど、再起動しないとうまく動かない。

# reboot

 

ブラウザから https://temp.hogeserver.hogeddns.jp にアクセスするとサービスに接続できる。
会議名を適当に入れて会議室を作る…すると、マイクとカメラへのアクセスを求められる。

これだけで起動するし動作する。超簡単。

ちなみに、Apacheの場合、以下のようなサイトが作られて有効になっていた。
/etc/apache2/sites-enabled/temp.hogeserver.hogeddns.jp.conf
<VirtualHost *:80>
    ServerName temp.hogeserver.hogeddns.jp
    Redirect permanent / https://temp.hogeserver.hogeddns.jp/
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>

  ServerName temp.hogeserver.hogeddns.jp

  SSLProtocol TLSv1 TLSv1.1 TLSv1.2
  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /etc/ssl/temp.hogeserver.hogeddns.jp.crt
  SSLCertificateKeyFile /etc/ssl/temp.hogeserver.hogeddns.jp.key
  SSLCipherSuite "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  SSLHonorCipherOrder on
  Header set Strict-Transport-Security "max-age=31536000"

  DocumentRoot "/usr/share/jitsi-meet"
  <Directory "/usr/share/jitsi-meet">
    Options Indexes MultiViews Includes FollowSymLinks
    AddOutputFilter Includes html
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  ErrorDocument 404 /static/404.html

  Alias "/config.js" "/etc/jitsi/meet/temp.hogeserver.hogeddns.jp-config.js"
  <Location /config.js>
    Require all granted
  </Location>

  ProxyPreserveHost on
  ProxyPass /http-bind http://localhost:5280/http-bind/
  ProxyPassReverse /http-bind http://localhost:5280/http-bind/

  RewriteEngine on
  RewriteRule ^/([a-zA-Z0-9]+)$ /index.html
</VirtualHost>

 

これらの設定をいろんなところに探しにいって、古い情報なのか新しい情報なのか確認しながら試行錯誤しなきゃならない…としたら大変だ。その点、このパッケージは本当に簡単に使えるので感謝である。

 

Ubuntu18.04でホスト名が使える場合

あまりに簡単だったから会社でも使ってみたい。
ホスト名を同じにしてSSLは16.04の時に作ったものを流用、パッケージは全てアップデートしておいた。
Ubuntu16.04との違いは、openjdk-8-jre-headlessを手でインストールすること。

$ sudo passwd ← rootのパスワード設定
$ su - ← rootになる
# ufw enable ← ファイアウォール設定
# ufw allow in ssh
# ufw allow in 443/tcp
# ufw allow in 10000:20000/udp
# ufw status ← 設定結果の確認
# wget https://download.jitsi.org/jitsi-key.gpg.key ← GPGキーのダウンロード
# apt-key add jitsi-key.gpg.key ← GPGキーの登録
# echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list ← リポジトリ追加
↓↓ Ubuntu18.04の場合のみ追加。OpenJDK-8がインストールできないから ↓↓
# echo 'deb http://archive.ubuntu.com/ubuntu bionic universe' > /etc/apt/sources.list.d/openjdk-8.list
# apt update
# apt install nginx   ← WebサーバーにNginxを使う場合(どちらか一方)
# apt install apache2 ← WebサーバーにApacheを使う場合(どちらか一方)
↓↓ Ubuntu18.04の場合のみ追加。OpenJDK-8が入っていないから ↓↓
# apt install openjdk-8-jre-headless
# apt install jitsi-meet

インストール中の問い合わせ
The hostname of the current installation:
→ temp.hogeserver.hogeddns.jp

SSL certificate for the Jitsi Meet instance
→ I want to use my own certificate ※この選択はチュートリアルとは違っている

Full local server path to the SSL key file:
→ /etc/ssl/temp.hogeserver.hogeddns.jp.key ※SSLキーファイルをこのタイミングで要求している

Full local server path to the SSL certificate file:
→ /etc/ssl/temp.hogeserver.hogeddns.jp.crt ※SSL証明書ファイルをこのタイミングで要求している

これでインストールは終了。だけど、再起動しないとうまく動かない。

# reboot

 

これで利用できる。

 

Ubuntu18.04でIPアドレスしか使えない場合

会社で使おうとするとき、内向きDNSにサービス登録するのが本来の形。
だけど正式に使うと宣言するまでのテスト段階では、IPアドレスでサービス提供したいな。

この場合、インストールの途中の問い合わせで…

インストール中の問い合わせ
The hostname of the current installation:
→ 172.16.nnn.nnn

 

とサービスを提供するIPアドレスを入力するだけ。

 

他のサービスとの共存を考える

ホスト名で名前解決できる環境ならば、ApacheでいうところのVirtualHostで、別の名前でサービス提供するのが良いと考えられる。サブディレクトリ?は全て「会議室の名前」として利用されるため、サブディレクトリでサービスを分けることができないから。

IPアドレスでアクセスする環境の場合、同様の理由から別のIPアドレスを追加してサービス提供するのが良いと考えられる。

 

ユーザー認証を追加する

Jitsi Meetはアクセスさえできれば誰でも簡単に会議室を作ることができる。ただ、この状態でインターネットにサービスを公開したいとは思わないから…ユーザー認証機構を入れてみようと考えた。

Jitsi Meetの場合、認証されたユーザーだけが会議室を作ることができるようにするようだ。その会議室には誰でも入ることができるが、会議室にパスワードを掛ければ利用者を限定できるよね、ということらしい。

で、その認証はXMPPサーバーで行うらしい。XMPP(Extensible Messaging and Presence Protocol)はサーバーを自由に立てることができ、メールサーバーのように他のXMPPサーバーと連携できる模様。XMPPサーバーはProsody。

# systemctl status prosody
 prosody.service - LSB: Prosody XMPP Server
   Loaded: loaded (/etc/init.d/prosody; generated)
   Active: active (running) since Sun 2019-03-24 05:31:06 UTC; 29min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 929 ExecStart=/etc/init.d/prosody start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 9472)
   CGroup: /system.slice/prosody.service
           mq1243 lua5.1 /usr/bin/prosody

Mar 24 05:31:03 temp systemd[1]: Starting LSB: Prosody XMPP Server...
Mar 24 05:31:04 temp prosody[929]:  * Starting Prosody XMPP Server prosody
Mar 24 05:31:06 temp prosody[929]:    ...done.
Mar 24 05:31:06 temp systemd[1]: Started LSB: Prosody XMPP Server.

 

なるほど。

Github / jitsi/jicofo に設定方法が書いてあって…
/etc/prosody/conf.avail/temp.hogeserver.hogeddns.jp.cfg.lua
(ホスト名は設置する場所に置き換える)
VirtualHost "temp.hogeserver.hogeddns.jp"
        -- enabled = false -- Remove this line to enable this host
        -- 認証方法変更
        -- authentication = "anonymous"      ← コメント化
        authentication = "internal_plain"    ← 追加
        -- Properties below are modified by jitsi-meet-tokens package config

-- ファイルの最後にこれらを追加
VirtualHost "guest.temp.hogeserver.hogeddns.jp"
    authentication = "anonymous"
    c2s_require_encryption = false

 

Prosodyを再起動してみる。

# systemctl restart prosody
# systemctl status prosody
・・・
Mar 24 06:15:29 temp systemd[1]: Started LSB: Prosody XMPP Server.
Mar 24 06:15:29 temp prosody[21794]: portmanager: Error binding encrypted port for https: No key present in SSL/TLS configuration for https port 5281
Mar 24 06:15:29 temp prosody[21794]: portmanager: Error binding encrypted port for https: No key present in SSL/TLS configuration for https port 5281

 

なんかエラーが出てるなぁ。

次に以下のファイルを編集。
/etc/jitsi/meet/temp.hogeserver.hogeddns.jp-config.js
var config = {
・・・
    hosts: {
        // XMPP domain.
        domain: 'temp.hogeserver.hogeddns.jp',
        anonymousdomain: 'guest.temp.hogeserver.hogeddns.jp', ←追加。最後のカンマも忘れずに。

 

/etc/jitsi/jicofo/sip-communicator.properties
これは元々は0バイトファイルだったところ、これを追加。

org.jitsi.jicofo.auth.URL=XMPP:temp.hogeserver.hogeddns.jp

 

ここまで設定したところで再起動。

# reboot

# 再起動せずともサービスの再起動で設定更新できそう 2019/10/09追記
# systemctl restart prosody
# systemctl restart jitsi-videobridge
# systemctl restart jicofo

 

これでJitsi Meetに接続してみると…あ、普通に会議室に入れるじゃん?と思ったら、違った、メッセージが表示された。

Waiting for the host ...

The conference 会議室名 has not yet started.
if you are the host then please authenticate.
Otherwise, please wait for the host to arrive.
                              [I am the host] ← このボタンを押すと認証画面に入る

 

で、ユーザーはコマンドで管理するっぽい。

ユーザーの追加
# prosodyctl register hoge temp.hogeserver.hogeddns.jp hogepassword
# prosodyctl adduser hoge@temp.hogeserver.hogeddns.jp ← パスワードはコマンド実行後に聞かれる
ユーザーの一覧
# ls -l /var/lib/prosody/*/accounts/*
-rw-r----- 1 prosody prosody 40 Mar 24 04:59 /var/lib/prosody/auth%2e172%2e16%2e219%2e73/accounts/focus.dat
-rw-r----- 1 prosody prosody 40 Mar 24 05:30 /var/lib/prosody/auth%2etemp%2ehogeserver%2ehogeddns%2ejp/accounts/focus.dat
-rw-r----- 1 prosody prosody 44 Mar 24 06:47 /var/lib/prosody/temp%2ehogeserver%2ehogeddns%2ejp/accounts/hoge.dat

 

なんだろな、この focus さんは。
→ 実際、focusさんで認証はできてしまうが、会議室はできなかった。2019/10/09追記

さておき、追加したユーザー hoge@temp.hogeserver.hogeddns.jp と hogepassword を入力することでJitsi Meetの認証ができて会議室が作れるようになった。

ユーザーはJitsi Meetと同じホスト名にしておく必要がありそう。2019/10/09追記
とある環境で hoge@hogeserver.hogeddns.jp というユーザー(サブドメインtempがない)を作ってみたところ、最初の1回は接続できるけれど、その後は上手く接続できない問題が発生した。ユーザー hoge@temp.hogeserver.hogeddns.jp を作り直したところ上手く稼働した。

 

通信帯域幅を減らす 2020/03/27追記

ネットワーク管理者なら、通信帯域幅が気になることだろう。特に今、急激なテレワークの要求でビデオ会議システムが必要になったのはいいけど、ネットワークがパンクする!という状況が起こりうる。

また、この会議システム、クライアント側でかなりCPUリソースを食う。

これらは高品質な画像を処理するために発生している。

そこで、帯域幅について調べてみた。
jitsi / Decreasing Video Resolution does not decrease Kbits traffic on Jitsi server

ということで、品質を落としたギリギリのラインを攻めてみると…
/etc/jitsi/meet/temp.hogeserver.hogeddns.jp-config.js

resolution: 320,

constraints: {
video: {
aspectRatio: 16 / 9,
frameRate: {
max: 5
},
height: {
ideal: 320,
max: 320,
min: 240
}
}

※これだとカメラの画像がパラパラ漫画的に。


resolution: 240,

constraints: {
video: {
aspectRatio: 16 / 9,
frameRate: {
max: 15
},
height: {
ideal: 240,
max: 240,
min: 240
}
}

※これだとカメラの画像はかなり荒い感じに。

設定の反映は以下でできた。

# systemctl restart prosody jitsi-videobridge jicofo

 

画質は下がるので痛し痒しな部分もあるものの、用途によって色々と設定を変えて最適な設定を目指す。

 

アンインストール

アンインストールするには以下を実行すればいいみたい。
Github / Jitsi Meet quick install

# apt purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge
# reboot

 

きれいになるので再インストールを試すときにはこれを実行。

 

設定変更

初めてアクセスした際の言語を日本語にする

ユーザーの全てが日本人なので、デフォルトは日本語表示がいい。

/etc/jitsi/meet/temp.hogeserver.hogeddns.jp-config.jp
※赤文字部分は自サイトに読み替える。

    // Default language for the user interface.
// defaultLanguage: 'en',
defaultLanguage: 'ja',

 

 

出力されるログの量を減らす

2020/04/06追記
最初からやる話じゃなくて、安定したらやることかなって思う。

やり方は、気付いたときに書いたこちらのページ参照。

 

Welcomeページのメッセージ変更(保証対象外)

2019/10/12追記

Welcomeページのメッセージは、日本語では以下のようになっている。

安全で、機能豊富で、完全に無料のビデオ会議

チーム全体とビデオチャットしましょう。あなたが知っている皆さんを招待してください。Jitsi Meetは完全に暗号化された100%オープンソースのビデオ会議ソリューションで、一日中、毎日無料でご利用いただけます。アカウントは必要ありません。

メッセージは標準的なもので使う分には全く問題ないのだけれど、認証を入れたので「アカウントは必要ありません」というのがちょっと違っている…。

メッセージを変更するためにはソースコードをダウンロードしてきて、メッセージを編集し、それをコンパイルして使うのが正しい使い方とされているのだが、お手軽なメッセージ変更方法はないか探してみた。

結論からすると、以下のファイルを編集するとメッセージが変わる。

/usr/share/jitsi-meet/lang/main-ja.json

700行目付近

"welcomepage": {

"appDescription": "チーム全体とビデオチャットしましょう。あなたが知っている皆さんを招待してください。{{app}}は完全に暗号化された100%オープンソースのビデオ会議ソリューションで、一日中、毎日無料でご利用いただけます。アカウントは必要ありません。",

"title": "安全で、機能豊富で、完全に無料のビデオ会議"
},

※変更後に[CTRL]+[F5]的なページ更新をすると反映される。

ただし、恐らくパッケージが更新されたときにメッセージは元に戻されるから、一時的なメッセージ変更の方法と考えておくのがよさそう。

 

やったこと

画面共有ができない

どうにも画面共有が起動できない。いろいろと調べてみると、Jitsi MeetをアンインストールしてApacheやNginxをインストールしてからJitsi Meetをインストールしてみ?的なやりとりが見つかった。

# apt --purge remove jitsi-meet jitsi-meet-web jitsi-meet-prosody jitsi-meet-web-config jicofo jitsi-videobridge
# apt install apache2 ← 日頃使い慣れているから。後でNginxも試したけど、それでもうまくいく。
# apt install jitsi-meet

 

あら、これだけでしっかりと使えるように。
/etc/apache2/sites-enable を見てみたら設定ファイルが作られていた。必要ならこれをちょっといじってあげればいいのだろうと思う。

間にApacheやNginxを挟まなくてもポートさえ空けておけば何とでもなるのかなと思っていたが、そうならなかった。理由を突き詰めるところまではやっていない。

 

タブレットのカメラが安定しない

タブレットはWindows10の32ビット版。こいつはカメラが使えるものの、明るくなったり暗くなったりと全然安定しない。なんでだろ?

こちらも、ApacheやNginxを事前にインストールした上でJitsi Meetをインストールしたら解決した。
理由を突き詰めるところまではやっていない。

 

クロームでカメラが使えない

Firefoxでは使えてみたり、Edgeでも使えてみたりするのだけれど、Chromeでカメラにアクセスできない。設定画面では「Permission not granted」と表示される。

Jitsiを調べてみたけれどもこの問題が発生しているのは少数派っぽく、結論が出ていないように見えた。Windowsを再起動しても全然だめ…

試しにOpenmeetingsで試してみたら、マイクもカメラも使える。
これはWindows10の問題の可能性があるなと思い、以下を実行したところ解決した。

  • 設定 を開く(スタートボタンをクリックすると表示される歯車をクリック)。
  • 「プライバシー」をクリック。
  • 左側のペインの「カメラ」をクリック。
  • 項目「アプリがカメラにアクセスできるようにする」が「オン」になっているのを「オフ」にする。
  • Chromeを開きJitsi Meetの歯車をクリックして設定画面を開く。カメラは当然「Permission not granted」になる。Cancelで設定画面を閉じる。Chromeの再起動等は必要なし。
  • 項目「アプリがカメラにアクセスできるようにする」を「オン」にする。
  • ChromeからJitsi Meetの歯車をクリックする。

一口に言うと、いったんWindows10の設定でカメラへのアクセスを制限しエラーを発生させ、その後に設定を緩めるとこの問題が解消するみたい。
再起動しても問題再発することはなかった。

結論、Flashからのカメラへのアクセスはうまくできていたけど、WebRTCからのカメラへのアクセスはWindows的に何かがあってうまくできていなかったのかなと。

 

さいごに

性能が高くて使いやすいビデオ会議システムが簡単に構築できるのはいいなぁ。
SIPとかも連携できるようになるみたいだけど、自分にはハードルが高いと思うので今回は諦め。

2020/03/28追記 新型コロナウイルスの影響のためかアクセス数が増えていたので、帯域幅に関する記述を追加してみた。皆様のお役に立てるといいなと願って。

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です