URL発行のみでビデオチャットやビデオ会議を開始できるオープンソース「Jitsi」

公開日:2020/02/07 更新日:2020/02/07
URL発行のみでビデオチャットやビデオ会議を開始できるオープンソース「Jitsi」のサムネイル

はじめに

URL1つを発行するだけでその他のアカウント登録等不要にビデオチャットや複数人でのビデオ会議をブラウザで開始できる「Jitsi」を実際にインストールして使ってみたのでその手順をまとめます。

Jitsiについて

Jitsiは、前述したようにURLだけ指定してそのURLにアクセスするだけでビデオチャットを開始できます。少し前まではWhereBy(旧appear.in)というオンラインチャットサービスが全く同じサービスを提供していましたが、執筆時点ではユーザーアカウントの登録が必須になっていました。 JitsiはWebRTCを使用しており、URLを知っているユーザーがブラウザからアクセスすればすぐにビデオチャットを開始できます。そしてJitsiはオープンソースで公開されており、サーバーにインストールして使用すれば簡単にサービスとして提供できます。この記事では実際にUbuntuにインストールして使うところまでをまとめます。 以下がJitsiの公式サイトです。

jitsi.org

Jitsi Meet offers free, secure, flexible, open-source video conferencing. Start using Jitsi Meet today. Build and deploy secure videoconferencing solutions.

なお、以下がJitsiの公式リポジトリです。

github.com

Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.

前提と環境

今回はUbuntu 18.04にJitsiをインストールしました。Jitsiの動作にはNginxかApacheが必要となるので、これらのいずれかがインストールされていることが前提となります。

  • OS : Ubuntu18.04
  • NginxまたはApacheがインストール済であることを前提とする。

Jitsiをインストールする

Ubuntuの場合はapt経由でインストールできとても簡単です。まず、root権限で以下を実行しJitsiのリポジトリを追加しておきます。

$ echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
$ wget -qO -  https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -

後はJitsiをaptコマンドでインストールするだけです。

$ sudo apt update
$ sudo apt install jitsi-meet

Jitsiのインストール処理の中で必要な設定をNginxかApacheの設定ファイルに追記してくれるため、前述したように、NginxかApacheを事前にインストールしておいてください。

インストール中にJitsiで使用するドメイン名かIPアドレスを以下のように確認されます。ここでは、試しにローカルのUbuntuマシンにインストールしているので、IPアドレスを入力しています。各自の独自ドメインを使用する場合はそれを入力してください。

setup-jitsi-meet-ip.png

続いてSSL証明書について以下のように確認されます。もしとりあえずテストでローカルで動かす場合などは、「Generate a new self-signed...」 を選択したまま「了解」で進めます。

setup-ssl-jitsi-meet.png

取得済のSSL証明書やこれから取得する証明書を使用したい場合は、「I want to use my own certificate」を選択します。この場合、続けて証明書用のキーのパスを以下のように確認されます。

fullpath-ssl-key-hide.png

証明書のパスも確認されます。

full-chain-ssl.png

以上でインストールが完了します。 なお、Let's Encryptを使った場合は上記ではうまくいかず少しだけ設定ファイルを修正する必要がありました。これについて後述します。 また、もし「 E: The method driver /usr/lib/apt/methods/https could not be found. 」というエラーが出た場合は、以下をインストールするよう公式ドキュメントに書かれています。

$ sudo apt install apt-transport-https

Jitsiにアクセスする

Jitsiのインストールが完了後、実際にJitsi用に指定したドメイン名かIPアドレスにブラウザからアクセスしてみると、以下のような画面が表示されると思います。表示されない場合はNginxが起動していることを確認してみてください。

jitsi-open.png

後は適当なURLを入力するか、Jitsiが自動生成したURLのまま上記画面内の「Go」をクリックすると、ビデオ会議が開始されます。マイクとカメラの使用は許可してください。

jitsi-started-conference.jpg

他のビデオ会議サービスと同様に使えると思います。チャットもできます。パスワード保護機能について後述します。

プライバシー保護について警告が出る場合

自己証明書を作成した場合は、ブラウザからJitsiにアクセスすると「この接続ではプライバシーが保護されません」というような警告が表示されるかもしれません。この場合は「詳細設定」をクリックします。以下はChromeの場合です。

alert-for-ssl-memo.png

そして「192.168.33.10にアクセスする(安全ではありません)」をクリックします。なお、ここの192.168.33.10というのは私がJitsi用に指定したIPアドレスなので、ここは各自が指定したドメイン名かIPアドレスになっているはずです。

access-anyway-memo.png

アクセスするとJitsiのトップページが表示されると思います。

パスワード保護機能を使用する

Jitsiでは、ビデオ会議のパスワード保護機能も用意されています。URLだけでアクセスするできるようにせずにパスワード入力を求めることができます。この機能を有効化するには、まずビデオ会議開始し、以下のように右下にあるインフォメーションマークをクリックし、表示されたポップアップ内にある「Add password」をクリックします。

add-password.png

パスワードを入力できるようになるので入力してEnterを押します。以下ではパスワードとして「testpass」を入力しています。

set-your-password.png

パスワードが設定されたビデオ会議では、アクセスすると以下のようにパスワード入力を求められます。

dialog-for-password.png

Let's Encryptを使用する場合

Jitsiのインストール中にLet's Encryptの証明書とキーのパスを入力してインストールを進めたところ以下のようにエラーがでました。

$ sudo apt install jitsi-meet

// 省略

done.
done.
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for systemd (237-3ubuntu10.38) ...
Errors were encountered while processing:
 jitsi-meet-web-config
 jitsi-meet
E: Sub-process /usr/bin/dpkg returned an error code (1)

とりあえず再度実行してみると以下のように表示されました。

$ sudo apt install jitsi-meet
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jitsi-meet is already the newest version (1.0.4101-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Setting up jitsi-meet-web-config (1.0.3729-1) ...
----------------

You can now switch to a Let’s Encrypt certificate. To do so, execute:
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

----------------
Setting up jitsi-meet (1.0.4101-1) ...
W: APT had planned for dpkg to do more than it reported back (3 vs 7).
   Affected packages: jitsi-meet-web-config:amd64

上記エラーの後に何をしたかをまとめます。ただし、このエラーについては良く確認せずに解決できてしまったので、そもそもLet's Encryptとは無関係かもしれません。とりあえず実際に行った作業をメモしておきます。

Jitsiの設定ファイルを修正する

Jitsiは、Jitsiのインストール前にNginxかApacheがインストールされていれば、それら用の設定ファイルを自動で作成してくれます。Nginxの場合には、/etc/nginx/sites-available/に、Jitsiのインストール中に指定したドメイン名、またはIPアドレスがファイル名になった設定ファイルが作成されます。 例えばJitsiのインストール中にexample.comというドメイン名を指定した場合は、/etc/nginx/sites-available/example.com.confというファイルが作成されます。 そして中身が以下のようになっていると思います。

/etc/nginx/sites-available/example.com.conf
$ server_names_hash_bucket_size 64;

server {
    listen 80;
    server_name jitsi-meet.example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name jitsi-meet.example.com;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";

    add_header Strict-Transport-Security "max-age=31536000";

    ssl_certificate /etc/jitsi/meet/jitsi-meet.example.com.crt;
    ssl_certificate_key /etc/jitsi/meet/jitsi-meet.example.com.key;

    root /usr/share/jitsi-meet;
    ssi on;
    index index.html index.htm;
    error_page 404 /static/404.html;

    location = /config.js {
        alias /etc/jitsi/meet/jitsi-meet.example.com-config.js;
    }

    location = /external_api.js {
        alias /usr/share/jitsi-meet/libs/external_api.min.js;
    }

    #ensure all static content can always be found first
    location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
    {
        add_header 'Access-Control-Allow-Origin' '*';
        alias /usr/share/jitsi-meet/$1/$2;
    }

    # BOSH
    location = /http-bind {
        proxy_pass      http://localhost:5280/http-bind;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }

    location ~ ^/([^/?&:'"]+)$ {
        try_files $uri @root_path;
    }

    location @root_path {
        rewrite ^/(.*)$ / break;
    }
}

これを元に自分用に設定ファイルを作成すればLet's Encryptでも問題なく使用できます。 なお、私の場合はNginxの設定ファイルを/etc/nginx/sites-availableではなく/etc/nginx/conf.dに置いて管理しているので、ここでも/etc/nginx/conf.dに作成します。 そして中身を以下のようにします。

/etc/nginx/conf.d/example.com.conf
$ server_names_hash_bucket_size 64;

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;

    #  途中省略
    
    # Let's Encrypt用のパスを追記する
    ssl_certificate /etc/letsencrypt/live/exmple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/exmple.com/privkey.pem;

    # 以下はコメントアウト
    ssl_certificate /etc/jitsi/meet/jitsi-meet.example.com.crt;
    ssl_certificate_key /etc/jitsi/meet/jitsi-meet.example.com.key;

    #  途中省略

    location = /config.js {
        alias /etc/jitsi/meet/example.com-config.js;
    }

    #  途中省略
}

上記を見て分かるとおり、ドメイン名を自分が使用するものに変更してLet's Encrypt用の設定を追加しただけになります。

後はNginxを再起動します。

$ sudo service nginx restart

また、Jitsiのサービスも以下で起動します。

$ sudo service jicofo start
$ sudo service jitsi-videobridge start
$ sudo service prosody start

これで無事にJitsiが起動すると思います。

まとめ

Jitsiのインストール手順と簡単な使い方をまとめました。URL1つでさっとビデオ会議を開始できるのはとても楽です。社内システムとして使っても便利かもしれません。 なお、Jitsiでのチャットルーム作成にユーザー認証をつけることも可能です。この手順は以下にまとめました。

www.virment.com

URLを発行するだけでブラウザでビデオチャットを開始できるオープンソースのJitsiで、特定ユーザーのみが新しいチャットルームを作成できるよう設定を変更したのでその手順をまとめます。

2020/2/11 追記

JitsiのAPIを使用すると、ビデオチャットをを自分のサイト等外部サイトに埋め込んで表示することができます。これについて以下にまとめました。

www.virment.com

Jitsiでは、APIが用意されておりこのAPIを使用することで自分のサイト等外部サイトの中にビデオチャットを埋め込むんで表示することができます。この記事ではその手順を簡単にまとめます。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。