以前、ビデオ会議システムのJitsi MeetをUbuntuにインストールしました。
https://minokamo.tokyo/2022/03/21/4548/
今度はDockerを使用して構築します。Oracle CloudにUbuntu22.04のインスタンスを作成したので、ここに構築します。
やり方は公式ページのハンドブックに書いてあるのでコマンドをコピペするだけです。
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/
それでは作業をしていきましょう。ホームディレクトリに安定版をダウンロードして展開します。展開した時、ディレクトリが作成されるのでホームにしました。取得先はハンドブックに記載してあります。
wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/stable-7577-2.zip
unzip stable-7577-2.zip
展開するとjitsiにバージョンが付いたディレクトリが作成されるのでそこに切り替えます。
cd docker-jitsi-meet-stable-7577-2
ここにenvファイルのサンプルがあるので、使用できる形にしてコピーします。envファイルは環境変数に関する記述が設定してあるファイルです。
cp env.example .env
このファイルは、普通に一覧表示しても表示されないので、隠しファイルも含めて一覧表示します。
ls -a
次にセキュリティ向上のため、初期値のパスワードを変更するスクリプトを実行します。パスワードはenvファイルに記述してあり、このコマンドを実行すると初期値のenvファイルのバックアップが作成され、新たに強力なパスワードを設定したenvファイルが作成されます。スクリプトを実行してパスワードを設定しないとコンテナは起動しないようです。
./gen-passwords.sh
このenvファイルを自分の環境に合わせて編集します。
vi .env
envファイルを見ると、使用するポートがリバースプロキシ前提のポート番号になっています。ほとんどの人は次のように変更します。Jitsi Meet専用のサーバーの時などがこれに該当します。
HTTP_PORT=80
HTTPS_PORT=443
他のコンテナやサービスがこのポートをすでに使用している場合、これらを重複して使用できませんので初期値のままにしておきます。初期値のままだと次のURLでアクセスすることになります。
https://example.com:8443
作業しているubuntu22.04では一般的なWebサーバーのポートは空いているので変更しました。他のコンテナやサービスがこのポートを使用している時は注意が必要です。リバースプロキシのサーバーがあるときは初期値のままにしておき、リバースプロキシ側で設定します。
envファイルの編集項目として、ポート番号以外では、次のように変更しました。
TZ=Asia/Tokyo
PUBLIC_URL=meet.betelgeuse.work
DOCKER_HOST_ADDRESSには、Dockerが割り当てた内部IPアドレスではなく、Dockerを実行しているホストのIPアドレスを記入します。これを正しく設定しないと3人以上でミーティングするとクラッシュすると公式ページに書いてありました。
DOCKER_HOST_ADDRESS=10.0.0.159
ポート番号を一般的に使用する80と443に変更した場合、SSLに対応した記述をすることをお勧めします。
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.betelgeuse.work
LETSENCRYPT_EMAIL=info@example.com
また、docker-compose.ymlの内容を確認しましたが、変更するところは特にありませんでした。「ネットワークを自分で決めたい」などの理由がある人は変更します。また、コンテナを複数作成する仕組みになっていました。
Dockerコマンドの前にもう一つ作業をします。設定内容を保存しておくディレクトリを作成します。
mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb}
「~/」の意味は下記になります。
「~/」がホームディレクトリを示しているので、その直下に.jitsi-meet-cfgというディレクトリを作成することになります。ディレクトリやファイルの前にドットが付くと隠しディレクトリや隠しファイルになります。
これで準備ができたのでDocker Composeコマンドを入力します。
docker-compose -f docker-compose.yml -f jibri.yml up -d
全部で5つのコンテナが立ち上がりました。
忘れずにIPアドレスとドメインの紐付けもしておきます。
さらに、OS自体でファイヤーウォールを無効にするか、もしくはポート番号を追加してトラフィックを許可しておきます。ここではファイヤーウォールは無効になっているので何もしません。有効な場合は次のポートを開放しておきます。
80/tcp:一般的なWebサーバー用のポート。証明書獲得のため必要。
443/tcp:一般的なWebサーバー用のポート(SSL接続対応)。
4443/tcp:Jitsi video bridge。TCPポート443をポート4443にフォールバックする。
10000/udp:一般的なネットワークビデオ、オーディオ通信用。
ただし、このサーバーはOracle Cloudで作成したインスタンスなので、セキュリティリストにはポートの追加が必要です。
PCとスマホアプリで会議をテストします。
会議システムは作成できたが、このままでは誰でもルームを作成できるので制限をかけます。これに関してもハンドブックに記述してあります。先ほどと同様にしてenvファイルを編集します。
ENABLE_AUTH=1
がコメント扱いになっているので解除します。次にProsodyのコンテナに入ります。
docker-compose exec prosody /bin/bash
続けてユーザーとパスワードを作成します。
prosodyctl --config /config/prosody.cfg.lua register testuser meet.jitsi testpass
しかし、ユーザーを作成できないというエラーが発生しました。一度コンテナから出て、Prosodyのコンテナを再起動します。
docker compose restart prosody
再びコンテナに入ってコマンドを試みるが同じエラーが表示されます。jitsi関連のコンテナをすべて停止して、起動することにします。
docker compose stop
docker-compose -f docker-compose.yml -f jibri.yml up -d
再度、prosodyのコンテナに入ってコマンドを入力します。今度はうまくいきました。内容は出力されませんので注意します。envファイルを修正した時は、関連するコンテナをすべて再起動した方がいいかもしれません。