AWS上にWebRTCのWeb会議システムを構築する stable-7882
みなさんこんにちは
本日のお題
前回、Jitsiを利用した際には、stable-6726を利用しましたが、新型が出ていたので、再度構築しました。
大きく変わったのは、以下の2点です。
Jibriがなくても録画ができるようになった。
WebAssenblyでノイズキャンセル性能が向上した。
Dockerのインストール
Docker自体にこだわりはないので、Versionなど考慮せずにデフォルトでインストール。
[root@yukkuri ~]# yum install -y docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:20.10.17-1.amzn2.0.1 will be installed
...略
Dockerの起動設定
Dockerの起動と、自動起動設定を行います。
[root@yukkuri ~]# systemctl start docker
[root@yukkuri ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@yukkuri ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-11-12 17:43:58 UTC; 48s ago
Docs: https://docs.docker.com
Main PID: 6417 (dockerd)
CGroup: /system.slice/docker.service
└─6417 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.674112768Z" level=info msg="ClientConn switching balancer to \"pic...ule=grpc
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.716969600Z" level=warning msg="Your kernel does not support cgroup... weight"
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.717008757Z" level=warning msg="Your kernel does not support cgroup..._device"
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.717177785Z" level=info msg="Loading containers: start."
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.905070868Z" level=info msg="Default bridge (docker0) is assigned w...address"
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.959494477Z" level=info msg="Loading containers: done."
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.976535405Z" level=info msg="Docker daemon" commit=a89b842 graphdri...20.10.17
Nov 12 17:43:57 yukkuri dockerd[6417]: time="2022-11-12T17:43:57.976647011Z" level=info msg="Daemon has completed initialization"
Nov 12 17:43:58 yukkuri systemd[1]: Started Docker Application Container Engine.
Nov 12 17:43:58 yukkuri dockerd[6417]: time="2022-11-12T17:43:58.012351867Z" level=info msg="API listen on /run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.
[root@yukkuri ~]#
docker-composeインストール
docker-composeも今回は動けば良いので、とりあえず最新をインストール
[root@yukkuri ~]# curl -L https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 42.8M 100 42.8M 0 0 84.0M 0 --:--:-- --:--:-- --:--:-- 91.0M
[root@yukkuri ~]# chmod +x /usr/local/bin/docker-compose
[root@yukkuri ~]# docker-compose -vDocker Compose version v2.12.2
[root@yukkuri ~]#
Dockerイメージの状態
[root@yukkuri ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jitsi/jicofo unstable 18a9f2355f38 13 hours ago 396MB
jitsi/jvb unstable 30151ad78462 13 hours ago 440MB
jitsi/prosody unstable dc9fbcec520b 14 hours ago 193MB
jitsi/web unstable 98e1152b894e 14 hours ago 307MB
Let's Encript導入
[root@yukkuri meet]# mkdir -p /home/yukkuri/certificates
[root@yukkuri meet]# ls /home/yukkuri/certificates
[root@yukkuri meet]#
legoツールの導入
[root@yukkuri meet]# mkdir -p /opt/lego
[root@yukkuri meet]# cd /opt/lego
[root@yukkuri lego]# wget https://github.com/go-acme/lego/releases/download/v4.5.3/lego_v4.5.3_linux_386.tar.gz
--2022-11-12 18:54:28-- https://github.com/go-acme/lego/releases/download/v4.5.3/lego_v4.5.3_linux_386.tar.gz
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/37038121/622cb438-75ea-4d47-9031-412a72beda47?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221112%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221112T185428Z&X-Amz-Expires=300&X-Amz-Signature=075777a633478b157aa836c0e358682cc0af8c6c4d6c09b18f6d76aea90da8a2&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=37038121&response-content-disposition=attachment%3B%20filename%3Dlego_v4.5.3_linux_386.tar.gz&response-content-type=application%2Foctet-stream [following]
...
legoツールの設置
[root@yukkuri lego]# tar zxf lego_v4.5.3_linux_386.tar.gz
[root@yukkuri lego]# rm -rf lego_v4.5.3_linux_386.tar.gz
[root@yukkuri lego]# /opt/lego/lego -v
lego version 4.5.3 linux/386
legoツールを利用して証明の作成
[root@yukkuri lego]# ./lego --accept-tos --path=/home/yukkuri --email="XXXXX@gmail.com" --dns="route53" --domains="yukkuri.me" --domains="*.yukkuri.me" run
2022/11/12 18:56:13 No key found for account XXXXX@gmail.com. Generating a P256 key.
2022/11/12 18:56:13 Saved key to /home/yukkuri/accounts/acme-v02.api.letsencrypt.org/XXXXX@gmail.com/keys/XXXXX@gmail.com.key
2022/11/12 18:56:13 [INFO] acme: Registering account for XXXXX@gmail.com
!!!! HEADS UP !!!!
Your account credentials have been saved in your Let's Encrypt
configuration directory at "/home/yukkuri/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from Let's Encrypt so making regular
backups of this folder is ideal.
2022/11/12 18:56:13 [INFO] [yukkuri.me, *.yukkuri.me] acme: Obtaining bundled SAN certificate
2022/11/12 18:56:13 [INFO] [*.yukkuri.me] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/175423188797
2022/11/12 18:56:13 [INFO] [yukkuri.me] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/175423188807
2022/11/12 18:56:13 [INFO] [*.yukkuri.me] acme: use dns-01 solver
2022/11/12 18:56:13 [INFO] [yukkuri.me] acme: Could not find solver for: tls-alpn-01
2022/11/12 18:56:13 [INFO] [yukkuri.me] acme: Could not find solver for: http-01
2022/11/12 18:56:13 [INFO] [yukkuri.me] acme: use dns-01 solver
2022/11/12 18:56:13 [INFO] [*.yukkuri.me] acme: Preparing to solve DNS-01
2022/11/12 18:56:14 [INFO] Wait for route53 [timeout: 2m0s, interval: 4s]
2022/11/12 18:56:48 [INFO] [yukkuri.me] acme: Preparing to solve DNS-01
2022/11/12 18:56:48 [INFO] Wait for route53 [timeout: 2m0s, interval: 4s]
2022/11/12 18:57:18 [INFO] [*.yukkuri.me] acme: Trying to solve DNS-01
2022/11/12 18:57:18 [INFO] [*.yukkuri.me] acme: Checking DNS record propagation using [172.31.0.2:53]
2022/11/12 18:57:22 [INFO] Wait for propagation [timeout: 2m0s, interval: 4s]
2022/11/12 18:57:29 [INFO] [*.yukkuri.me] The server validated our request
2022/11/12 18:57:29 [INFO] [yukkuri.me] acme: Trying to solve DNS-01
2022/11/12 18:57:29 [INFO] [yukkuri.me] acme: Checking DNS record propagation using [172.31.0.2:53]
2022/11/12 18:57:33 [INFO] Wait for propagation [timeout: 2m0s, interval: 4s]
2022/11/12 18:57:37 [INFO] [yukkuri.me] The server validated our request
2022/11/12 18:57:37 [INFO] [*.yukkuri.me] acme: Cleaning DNS-01 challenge
2022/11/12 18:57:37 [INFO] Wait for route53 [timeout: 2m0s, interval: 4s]
2022/11/12 18:58:03 [INFO] [yukkuri.me] acme: Cleaning DNS-01 challenge
2022/11/12 18:58:03 [INFO] [yukkuri.me, *.yukkuri.me] acme: Validations succeeded; requesting certificates
2022/11/12 18:58:03 [INFO] [yukkuri.me] Server responded with a certificate.
[root@yukkuri lego]#
#ファイルが作成されているか確認する。
[root@yukkuri lego]# ls /home/yukkuri/certificatesyukkuri.me.crt yukkuri.me.issuer.crt yukkuri.me.json yukkuri.me.key
[root@yukkuri lego]#
Jitsi用のdocker-compose起動
docker-compose用の定義取得
[root@yukkuri ~]# git clone https://github.com/jitsi/docker-jitsi-meet.git
Cloning into 'docker-jitsi-meet'...
remote: Enumerating objects: 4423, done.
remote: Counting objects: 100% (194/194), done.
remote: Compressing objects: 100% (137/137), done.
remote: Total 4423 (delta 73), reused 138 (delta 51), pack-reused 4229
Receiving objects: 100% (4423/4423), 1.28 MiB | 30.49 MiB/s, done.
Resolving deltas: 100% (2099/2099), done.
[root@yukkuri ~]#
docker-compose用の定義ファイルの準備
#ディレクトリ名の編集
[root@yukkuri ~]# mv docker-jitsi-meet meet
#ディレクトリの移動
[root@yukkuri ~]# cd meet
[root@yukkuri 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
#docker-compose.ymlファイルの各パラメタへのValueを記載するファイルを作成する。
[root@yukkuri meet]# cp env.example .env
#ここでProsodyや、JVBなどと内部で接続するためのPWを作成する。
[root@yukkuri meet]# sh ./gen-passwords.sh
[root@yukkuri meet]# mkdir -p ~/.jitsi-meet-cfg/{web/crontabs,web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
.envファイルの編集
docker-compose.ymlの各パラメーターのValue情報が記載されたファイル。
[root@yukkuri meet]# vi .env
# shellcheck disable=SC2034
################################################################################
################################################################################
# Welcome to the Jitsi Meet Docker setup!
#
# This sample .env file contains some basic options to get you started.
# The full options reference can be found here:
# https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
################################################################################
################################################################################
#
# Basic configuration options
#
# Directory where all configuration will be stored
CONFIG=~/.jitsi-meet-cfg
# Exposed HTTP port
-#HTTP_PORT=8000
+HTTP_PORT=80
# Exposed HTTPS port
-#HTTPS_PORT=8443
+HTTPS_PORT=443
# System time zone
TZ=UTC
# Public URL for the web service (required)
-#PUBLIC_URL=https://meet.example.com
+PUBLIC_URL=https://meet.yukkuri.me
# Media IP addresses to advertise by the JVB
# This setting deprecates DOCKER_HOST_ADDRESS, and supports a comma separated list of IPs
# See the "Running behind NAT or on a LAN environment" section in the Handbook:
# https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker#running-behind-nat-or-on-a-lan-environment
#JVB_ADVERTISE_IPS=192.168.1.1,1.2.3.4
...
docker-compose.ymlファイルの編集
ホストOS上に作成した証明書ファイルを、ゲストOS上に紐づける設定を追加します。
[root@yukkuri meet]# vi docker-compose.yml
services:
# Frontend
web:
image: jitsi/web:${JITSI_IMAGE_VERSION:-unstable}
restart: ${RESTART_POLICY:-unless-stopped}
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:
- AMPLITUDE_ID
- ANALYTICS_SCRIPT_URLS
- ANALYTICS_WHITELISTED_EVENTS
- AUDIO_QUALITY_OPUS_BITRATE
- BRANDING_DATA_URL
...
docker-composeを起動する
起動するときに、Dockerの最新のイメージをDLしてくれます。
今回は、録画と、ノイズキャンセルを動かしたいだけでVersionにこだわりがないので、そのまま動かします。
[root@yukkuri meet]# docker-compose up -d
docker-composeを停止する
停止するときのコマンドは以下。docker-compose downとすると、中間ファイルが消えてしまいます。
スッキリが必要なときに利用します。
ただ、停止する場合は、以下のコマンドを利用します。
[root@yukkuri meet]# docker-compose stop
試運転
動くことを確認できました。
新しい機能
会議名_2022-11-12T19_26_10.827Z.webmのようなファイル名で出力される。
ブラウザの機能を利用していると思われる。
Noise suppressionでノイズキャンセリングのONOFFが可能。デフォルトはON
今後の課題
周りからも、お安くなったので、Teamsでいいんじゃないですかね。
と言われましたし、そうですね。とも思うのですが、Webassenblyのノイズキャンセルを試したくて構築。
※夜中なので、自分で試した感じだと、そもそもノイズがないということで確認できず。。。
オンプレミスで利用できるのが、いいところなので、有効活用を考えていきたいですね。
単独だと有償サービスも安くなってきたしいいことばかりなんじゃないですかね。
AWSで運用すると転送料金で高額になりがちなOSSですしね。
今回の所要時間
EC2など全部作り直したこともあり、数時間かかりました。
EIPや、ストレージなどあるだけでお金がかかるようなサービスの金額が気にならないくらいの予算が欲しいですね。。。
うーん。また徹夜しちゃいましたね。誰に褒められるでもなく。
Discussion