🦈

AWS上にWebRTCのWeb会議システムを構築する

2021/12/27に公開

みなさんこんにちは。

本日のお題

AWS上のEC2に、JitsiというOSSを利用して、Web会議システムをHTTPSで証明して構築する。
構築は、Dockerを利用して、コンテナ管理で構築する。

DL場所

基本は、docker-hubからコマンドで、その時の最新を利用させていただいています。
https://github.com/jitsi/docker-jitsi-meet
https://hub.docker.com/u/jitsi/

現在のイメージの状態

このあたりのちょっとしたトピックは、そのうち書きたいと考えています。

[root@meet meet]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED       SIZE
jitsi/prosody   latest    c92c1374d14c   12 days ago   124MB
jitsi/jvb       latest    76d12c55f78f   2 weeks ago   419MB
jitsi/jicofo    latest    402433635cd9   2 weeks ago   374MB
jitsi/web       latest    a2fba696f29f   2 weeks ago   262MB
[root@meet meet]#

docker-compose用の定義取得

docker-hubで入手した、コンテナをdocker-compose で動作させるための定義ファイルを準備していきます。
https://github.com/jitsi/docker-jitsi-meet/releases/tag/stable-6726-1

[root@meet meet]# wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/stable-6726-1.tar.gz

[root@meet meet]# ls
stable-6726-1.tar.gz

[root@meet meet]# tar zxf stable-6726-1.tar.gz

[root@meet meet]# ls
docker-jitsi-meet-stable-6726-1  stable-6726-1.tar.gz

[root@meet meet]# rm -rf stable-6726-1.tar.gz

[root@meet meet]# ls
docker-jitsi-meet-stable-6726-1

[root@meet meet]# mv docker-jitsi-meet-stable-6726-1 ./docker-jitsi-meet

インストール手順

インストール(初期設定)は公式手順を利用します。
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker

[root@meet meet]# cd ./docker-jitsi-meet/
[root@meet docker-jitsi-meet]# ls
base       CHANGELOG.md        env.example   examples          jibri      jicofo  jigasi.yml  LICENSE   prosody    release.sh  web
base-java  docker-compose.yml  etherpad.yml  gen-passwords.sh  jibri.yml  jigasi  jvb         Makefile  README.md  resources

[root@meet docker-jitsi-meet]# cp env.example .env

このコマンドを実行することで、.envファイルにコンテナイメージの連結に利用するパスワード文字列が追加されます。
[root@meet docker-jitsi-meet]# sh ./gen-passwords.sh

[root@meet docker-jitsi-meet]# mkdir -p ~/.jitsi-meet-cfg/{web/crontabs,web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

とりあえず起動

とりあえず起動しました。PORT番号が8443であり、HTTPSで接続したときに、当然ですが、証明書がエラーになりました。

[root@meet docker-jitsi-meet]# docker-compose up -d
[+] Running 4/4
 ⠿ jvb Pulled                                                                                                                                                                                                1.8s
 ⠿ web Pulled                                                                                                                                                                                                1.8s
 ⠿ prosody Pulled                                                                                                                                                                                            1.8s
 ⠿ jicofo Pulled                                                                                                                                                                                             1.8s
[+] Running 5/5
 ⠿ Network docker-jitsi-meet_meet.jitsi   Created                                                                                                                                                            0.0s
 ⠿ Container docker-jitsi-meet-prosody-1  Started                                                                                                                                                            1.5s
 ⠿ Container docker-jitsi-meet-web-1      Started                                                                                                                                                            1.5s
 ⠿ Container docker-jitsi-meet-jicofo-1   Started                                                                                                                                                            3.9s
 ⠿ Container docker-jitsi-meet-jvb-1      Started                                                                                                                                                            3.9s
[root@meet docker-jitsi-meet]#

Jitsi設定ファイルの設定を行います。

とりあえず起動しただけでは、HTTPSに証明書が無かったり、接続PORTが8443だったりと問題があるので、カスタムしていきます。

ファイル(.env)の設定

独自ドメインを設定

[root@meet docker-jitsi-meet]# vi .env
...
-#PUBLIC_URL=https://meet.example.com
+PUBLIC_URL=https://meet.yukkuri.me
...

PORT番号を8443→443に変更

[root@meet docker-jitsi-meet]# vi .env
...
# Exposed HTTPS port
-#HTTPS_PORT=8443
+HTTPS_PORT=443
...

ファイル(docker-compose.yml)の設定

Let's Encriptの証明書を連結

依然作った証明書を連結します。連結は、Dockerのホスト(/home/yukkuri/certificates)とDockerのゲスト(/config/keys)を連結します。

[root@meet docker-jitsi-meet]# vi docker-compose.yml
...
services:
    # Frontend
    web:
        image: jitsi/web:stable-6726-1
        restart: ${RESTART_POLICY}
        ports:
-#            - '${HTTP_PORT}:80'
            - '${HTTPS_PORT}:443'
        volumes:
            - ${CONFIG}/web:/config:Z
            - ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
            - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
+            - /home/yukkuri/certificates/yukkuri.me.crt:/config/keys/cert.crt:Z
+            - /home/yukkuri/certificates/yukkuri.me.key:/config/keys/cert.key:Z
        environment:
...

docker-composeの再起動

設定ファイルを編集したので、設定反映のためにコンポーネントを再起動します。

[root@meet docker-jitsi-meet]# docker-compose stop
[+] Running 4/4
 ⠿ Container docker-jitsi-meet-jicofo-1   Stopped                                                                                                                                                            3.9s
 ⠿ Container docker-jitsi-meet-jvb-1      Stopped                                                                                                                                                            4.0s
 ⠿ Container docker-jitsi-meet-web-1      Stopped                                                                                                                                                            3.6s
 ⠿ Container docker-jitsi-meet-prosody-1  Stopped                                                                                                                                                            3.5s
[root@meet docker-jitsi-meet]# docker-compose up -d
[+] Running 4/4
 ⠿ Container docker-jitsi-meet-prosody-1  Started                                                                                                                                                            1.3s
 ⠿ Container docker-jitsi-meet-jicofo-1   Started                                                                                                                                                            3.2s
 ⠿ Container docker-jitsi-meet-web-1      Started                                                                                                                                                            1.3s
 ⠿ Container docker-jitsi-meet-jvb-1      Started                                                                                                                                                            3.2s
[root@meet docker-jitsi-meet]#

AWS側のセキュリティグループ設定

AWSで構築しているので、利用するPORTについては、穴あけする必要があります。
以下の設定を追加

  • HTTPS (443):クライアントPCからWEB接続
  • UDP (10000):クライアントPCからJVB接続用

設定確認

実際に動作を確認します。
Edge バージョン 96.0.1054.62 (公式ビルド) (64 ビット)

Chrome バージョン: 96.0.4664.110(Official Build) (64 ビット)

今後の課題

設定ファイルを解析する必要があります。
ちなみに、現状だと、アクセスし放題、利用し放題になるので、ID/PASSで利用者を絞り込む必要があります。(後日、UPしたい。)
※皆さんに利用してほしいところですが、、、AWS上に展開している都合上、そうなると私の家計が確実に破綻するので、設定完了まではEC2停止ですね。
※AWSのセキュリティグループに自宅のIPだけOKにすればいいんですが、念のため。

今回の所要時間

ざっくりとした、動作確認までで4時間程度かかりました。
ちょっと動かすだけでも、それなりにハードルはありますし、大勢で利用したり、独自に運用するのは、それなりにハードルは高いと思います。
ZOOMも時間が短い場合は、無料ですし、無償のWeb会議システムはたくさんあると思います。
しかし、業務用途だと、自社オンプレじゃないと社内のセキュリティ的に許可されないなど、条件がある場合には使えると予想しています。
HTTPS化の設定のところは結構わかりにくいかなと。

Discussion