オンライン学習・ビデオ会議システムBigBlueButton v2.4 on Docker

BigBlueButtonとは、ブラウザ上で参加者各々の音声、映像、テキストメッセージなどを共有することで成立するオープンソースのオンライン学習を目的とした会議システムです。テキストファイルや映像資料などをユーザ間で共有、ビデオ通話が出来る会議システムなので、ビジネス用途での利用も十分可能です。主な機能・特徴は以下の通りです。

主な機能・特徴

  • 音声・映像による相互コミュニケーション
  • チャット機能
  • 画面上で共有しているファイルへの書込み、ポインター
  • 意見がある場合の挙手
  • 会議の録画・再生
  • YouTube等の映像資料の共有視聴
  • 任意のユーザのデスクトップファイル・画面の共有
  • オープンソース、オンプレミスによる管理・運営

BigBlueButtonは以下のブロック図による各コンポーネントを一纏めにしたシステムであり、各コンポーネントを統括する司令塔としての役割は、非同期で並列処理を実行するアクターモデルによるプログラミング言語Scalaと、そのツールキットであるAkkaにより作成されたアプリである apps-akka( + fsesl-akka ) が担います。ウェブインターフェイスデザインはGreenlightにより提供されます。

参考サイト

BigBlueButton

GitHub BigBlueButton Docker

GitHub BigBlueButton

FreeSWITCH


インストールについて

BigBlueButtonの最小動作条件として、以下のようにメモリ容量16GBを搭載した専用のデスクトップマシンが求められますが、今回はUbuntu20.04で動作するメモリ8GBのPCにDockerコンテナとしてインストール・動作確認を行います。

最小動作条件

  • Ubuntu 18.04 64-bit OS running Linux kernel 4.x
  • Latest version of docker installed
  • 16 GB of memory with swap enabled
  • 8 CPU cores, with high single-thread performance
  • 500 GB of free disk space (or more) for recordings, or 50GB if session recording is disabled on the server.
  • TCP ports 80 and 443 are accessible
  • UDP ports 16384 - 32768 are accessible
  • 250 Mbits/sec bandwidth (symmetrical) or more
  • TCP port 80 and 443 are not in use by another web server or reverse proxy
  • A hostname (such as bbb.example.com) for setup of a SSL certificate
  • IPV4 and IPV6 addres

ホストマシンに直接インストールする場合のスクリプト bbb-install.sh も用意されています。このスクリプトを利用してAWSやGCP提供のコンピュータインスタンスに直接インストールしても良いでしょう。


システム全体図

運用システムのネットワークを含んだ全体像は以下の通りです。インターネットプロバイダからグローバルIPが割当てられていないこととVPN(WireGuard)によりセキュリティを確保したい目的からAWSを利用したシステムとなっています。システムそのものは オンプレミスのPC(VPN Peer1) にインストールされています。


インストールする前に

サーバドメインの取得は必須条件です。また以下の事項について事前に一読することをお勧めします。クラウドサービスを提供しているAWSGCP等についての知識も必要です。

FreeSWITCH

Command Line Interface(fs_cli)

Sofia SIP Stack

Sofia-SIP GitHub Library

Security —> SIP TLS

Networking —> ACL(Access Control List)

Networking —> NAT Traversal

Networking —> Auto NAT

Networking —> Firewall

Configuration —> WebRTC

BigBlueButton

ADMINISTRATION —> Configure TURN

ADMINISTRATION —> Configure Firewall

nftables wiki

Coturn STUN/TURN Server

GitHub Coturn

Coturn wiki


動作確認までのステップ

以下VPNサーバの準備から実際に動作を確認するまでのステップです。

  1. AWS+WireGuardによるVPNサーバ構築
  2. Docker版BigBlueButtonのダウンロード
  3. Let’s Encrypt CertbotによるTLSサーバ証明書の取得
  4. リバースプロキシの設定
  5. docker-composeファイル・環境変数ファイル.envの作成
  6. FreeSWITCHの設定
  7. STUN/TURNサーバの設定
  8. システム起動・動作確認・ログ確認

1. AWS+WireGuardによるVPNサーバ構築

VPNサーバとしての利用なので、AWSのコンピューティングサービスから最小構成のコンピュータリソースを選択して下さい。メモリ512MB、ディスク容量10GBあれば十分です。WireGuardによるVPNサーバとしての使い方・設定については、ブログ内の記事を参照願います。

システム全体図を参考にして

IPフォワーディングの設定

/etc/sysctl.confファイル内で以下の箇所をアンコメントにして有効化します。

net.ipv4.ip_forward = 1

net.ipv6.conf.all.forwarding = 1

ポートフォワーディング、IPマスカレードの設定

iptablesまたはnftablesにより行って下さい。

nftablesによるポートフォワードルール設定は以下の通りです(一部のみ記載)。

/etc/nftables.conf

.....
.....

table ip nat {
        chain PREROUTING {
                type nat hook prerouting priority dstnat; policy accept;
                iifname "eth0" tcp dport { 80, 443, 3478, 5081, 5349, 7443 } counter dnat to 10.8.0.2
                iifname "eth0" udp dport { 3478, 5081, 5349, 16384-65535 } counter dnat to 10.8.0.2
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                oifname "eth0" counter masquerade
        }
}
.....
.....

2. Docker版BigBlueButtonのダウンロード

git clone コマンドによりDocker版BigBlueButonをダウンロードします。ダウンロード完了後bbb-dockerディレクトリに移動しサブモジュールのアップデートを行って下さい。

$ git clone -b main --recurse-submodules https://github.com/bigbluebutton/docker.git bbb-docker
$ cd bbb-docker
$ git submodule update --init

3. Let’s Encrypt CertbotによるTLSサーバ証明書の取得

Nginxリバースプロキシの443ポート、FreeSWITCHのウェブソケット7443ポートとSIPSの5081ポート、CoturnのTURNサーバ5349ポート、これら各ポートへの外部からの接続にはTLS証明書が必要なため、Let’s EncryptのCertbotを利用して事前に取得しておきます。

TLS証明書の取得にはCertbotDockerイメージを利用します。CertbotスタンドアローンモードTLS認証手続きを行い、取得した認証ファイルをdocker-composeファイル内で指定してBigBlueButtonを起動します。

参考:Certbot Running with Docker

bbb-dockerディレクトリ内でCertbotコンテナを起動してTLS証明書を取得します。letsencryptフォルダに指定ドメインによるTLS証明書一式が作成されます。

$ sudo docker run -it --rm --name certbot -v "$PWD/letsencrypt:/etc/letsencrypt" -p 80:80 certbot/certbot certonly --standalone -d www.example.com

システム起動前にTLS認証ファイルを取得できるため、事前にNginx443ポートを指定したSSL設定ファイルを用意することが出来ます。

更新については Certbotコマンドオプションを参照してホストマシンのクローンジョブに更新コマンドを記述して下さい。


4. リバースプロキシの設定

BigBlueButtonNginxリバースプロキシとしての機能を追加します。以下ドキュメントを参考にNginxリバースプロキシ設定ファイルテンプレートreverse-proxy.conf.tempbbb-docker/nginx_config_tempフォルダに作成します。

docker-composeファイル内でこのテンプレートファイルをNginxコンテナのテンプレートフォルダにコピーすることで、コンテナ起動時にreverse-proxy.confファイルとして保存・読み込まれます。

How to integrate into an existing Web server setup

bbb-docker/nginx_config_temp/reverse-proxy.conf.temp

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
map $remote_addr $endpoint_addr {
    "~:"    [::1];
    default    127.0.0.1;
}

server {
  listen 443 ssl http2 default_server;
  listen [::]:443 ssl http2 default_server;
  server_name ${NGINX_HOST};

  ssl_certificate /etc/letsencrypt/live/${NGINX_HOST}/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/${NGINX_HOST}/privkey.pem;
  
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
  ssl_prefer_server_ciphers on;
  # on the host machine, "$ sudo openssl dhparam -out ./letsencrypt/dhp-4096.pem 4096"
  ssl_dhparam /etc/letsencrypt/dhp-4096.pem;

  access_log  /var/log/nginx/bigbluebutton.access.log;
  error_log /var/log/nginx/bigbluebutton.error.log;

  location / {
    proxy_http_version 1.1;
    proxy_pass http://$endpoint_addr:48087;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_cache_bypass $http_upgrade;
  }
}

5. docker-composeファイル・環境変数ファイル.envの作成

bbb-dockerディレクトリで下記スクリプトを実行することによりdocker-composeファイルdocker-compose.ymlとその環境変数ファイル .env が作成されます。

$ ./scripts/setup

環境変数の内容変更・追加をした場合には、以下のスクリプトを実行することで変更内容がdocker-compose.ymlに上書きされます。

$ ./scripts/generate-compose

作成したdocker-compose.yml.env ファイルのポイントは以下の通りです。

.env(一部のみ抜粋)

DOMAIN—>ドメイン、EXTERNAL_IPvX—>AWSのグローバルIP 、STUN_IP—>EXTERNAL_IPv4、TURN_SERVER—>turns:ドメイン:5349?transport=tcp を確認して下さい。

.....
.....
DOMAIN=www.example.com

EXTERNAL_IPv4=xx.xx.xx.xx
EXTERNAL_IPv6=xx:xx:xx:xx::1

STUN_IP=xx.xx.xx.xx
STUN_PORT=3478

# TURN SERVER
# uncomment and adjust following two lines to add an external TURN server
# certificate need domain, so don't use IP address!
TURN_SERVER=turns:www.example.com:5349?transport=tcp
TURN_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.....
.....

docker-compose.yml(一部のみ抜粋)

freeswitch、nginx、coturnの各サービスをカスタマイズしています。

各サービスでLet’s EncryptによるTLS認証ファイルの読取り方法と名称が異なるため、nginxサービスのvolumesセクションのコメント欄を参照し必要な認証ファイルを作成して下さい。

.....
.....
.....

  freeswitch:
    build: mod/freeswitch
    restart: unless-stopped
    cap_add:
      - IPC_LOCK
      - NET_ADMIN
      - NET_RAW
      - NET_BROADCAST
      - SYS_NICE
      - SYS_RESOURCE
    environment:
      DOMAIN: ${DOMAIN}
      EXTERNAL_IPv4: ${EXTERNAL_IPv4}
      EXTERNAL_IPv6: ${EXTERNAL_IPv6:-::1}
      SIP_IP_ALLOWLIST: ${SIP_IP_ALLOWLIST:-}
      DISABLE_SOUND_MUTED: ${DISABLE_SOUND_MUTED:-false}
      DISABLE_SOUND_ALONE: ${DISABLE_SOUND_ALONE:-false}
      SOUNDS_LANGUAGE: ${SOUNDS_LANGUAGE:-en-us-callie}
      ESL_PASSWORD: ${FSESL_PASSWORD:-ClueCon}
    volumes:
      - ./conf/sip_profiles:/etc/freeswitch/sip_profiles/external
      - ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
      - vol-freeswitch:/var/freeswitch/meetings
      ## added for wss: secure web socket. see the below "nginx" service "volumes"
      - ./letsencrypt/live/${DOMAIN}:/etc/freeswitch/tls
    network_mode: host

  nginx:
    build: mod/nginx
    restart: unless-stopped
    depends_on:
      - etherpad
      - webrtc-sfu
      - html5-backend-1
    volumes:
      - bigbluebutton:/var/bigbluebutton
      - html5-static:/html5-static:ro
      - ${DEFAULT_PRESENTATION:-/dev/null}:/www/default.pdf
      
      # in advance, execute certbot on docker to get ssl certification.
      # "$ sudo docker run -it --rm --name certbot -v "$PWD/letsencrypt:/etc/letsencrypt" -p 80:80 certbot/certbot certonly --standalone -d www.example.com"
      
      # added 4096-bit diffie-hellman parameters. see https://docs.bigbluebutton.org/2.2/install.html#configure-freeswitch-for-using-ssl
      # need /etc/letsencrypt/dhp-4096.pem: "$ openssl dhparam -out letsencrypt/dhp-4096.pem 4096"
      
      # For FreeSwith Web Socket, need to implement the following files.
      # $ sudo cat cert.pem privkey.pem fullchain.pem > wss.pem
      # add symbolic links
      # "$ sudo ln -s wss.pem agent.pem"
      # "$ sudo ln -s wss.pem tls.pem"
      # "$ sudo ln -s wss.pem dtls-srtp.pem"
      - ./letsencrypt:/etc/letsencrypt
      
      # added for reverse-proxy config template file; see https://hub.docker.com/_/nginx
      # *.conf.template changed into /etc/nginx/conf.d/*.conf after variables transferred.
      - ./nginx_config_temp:/etc/nginx/templates
    environment:
      # added below for variables in *.conf.template
      - NGINX_HOST=ficus-home.myvnc.com
    network_mode: host
    extra_hosts:
      - "host.docker.internal:10.7.7.1"
      - "bbb-web:10.7.7.2"
      - "etherpad:10.7.7.4"
      - "webrtc-sfu:10.7.7.10"
      - "html5:10.7.7.11"

.....
.....
.....

  # coturn https://github.com/coturn/coturn/tree/master/docker
  coturn:
    image: coturn/coturn
    restart: unless-stopped
    # command: ["turnserver", "--external-ip=${EXTERNAL_IPv4}/10.7.7.1", "--external-ip=${EXTERNAL_IPv6}/::1", "--static-auth-secret=${TURN_SECRET}"]
    volumes:
      # need /etc/letsencrypt/dhp-4096.pem: $ openssl dhparam -out letsencrypt/dhp-4096.pem 4096
      - ./letsencrypt:/etc/letsencrypt
      #- ./mod/coturn/entrypoint.sh:/usr/local/bin/docker-entrypoint.sh
      - ./mod/coturn/turnserver.conf:/etc/coturn/turnserver.conf
    #environment:
    #  ENABLE_HTTPS_PROXY:
    network_mode: host

.....
.....
.....

volumes:
  bigbluebutton:
  vol-freeswitch:
  vol-kurento:
  html5-static:


networks:
  bbb-net:
    ipam:
      driver: default
      config:
        - subnet: "10.7.7.0/24"

6. FreeSWITCHの設定

以下2つの設定ファイル、環境変数設定ファイルと外線用プロファイル設定ファイルをシステムのネットワーク環境に併せて編集します。

mod/freeswitch/conf/vars.xml.tmpl

変更箇所

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=autonat:{{ .Env.EXTERNAL_IPv4 }}"/>

<X-PRE-PROCESS cmd="set" data="external_sip_ip=autonat:{{ .Env.EXTERNAL_IPv4 }}"/>

.....
.....
.....

  <!-- external_rtp_ip
       Can be an one of:
           ip address: "12.34.56.78"
           a stun server lookup: "stun:stun.server.com"
           a DNS name: "host:host.server.com"
       where fs.mydomain.com is a DNS A record-useful when fs is on
       a dynamic IP address, and uses a dynamic DNS updater.
       If unspecified, the bind_server_ip value is used.
       Used by: sofia.conf.xml dingaling.conf.xml
  -->
  <X-PRE-PROCESS cmd="set" data="external_rtp_ip=autonat:{{ .Env.EXTERNAL_IPv4 }}"/>

  <!-- external_sip_ip
      Used as the public IP address for SDP.
       Can be an one of:
           ip address: "12.34.56.78"
           a stun server lookup: "stun:stun.server.com"
           a DNS name: "host:host.server.com"
       where fs.mydomain.com is a DNS A record-useful when fs is on
       a dynamic IP address, and uses a dynamic DNS updater.
       If unspecified, the bind_server_ip value is used.
       Used by: sofia.conf.xml dingaling.conf.xml
  -->
  <X-PRE-PROCESS cmd="set" data="external_sip_ip=autonat:{{ .Env.EXTERNAL_IPv4 }}"/>

.....
.....
.....

mod/freeswitch/conf/sip_profiles/external.xml

変更箇所

<param name="rtp-ip" value="${local_ip_v4}"/>

<profile name="external">
.....
.....
.....  

    <param name="rtp-ip" value="${local_ip_v4}"/>
    <param name="sip-ip" value="${local_ip_v4}"/>
    <param name="ext-rtp-ip" value="${external_rtp_ip}"/>
    <param name="ext-sip-ip" value="${external_sip_ip}"/>

.....
.....
.....
</profile>

7. STUN/TURNサーバの設定

Coturnのイメージを正式版のDockerイメージに入替えています。ポイントは、TLS認証ファイルとdhファイルのディレクトリです。

mod/coturn/turnserver.conf

# Coturn TURN SERVER configuration file
#
# Boolean values note: where a boolean value is supposed to be used,
# you can use '0', 'off', 'no', 'false', or 'f' as 'false,
# and you can use '1', 'on', 'yes', 'true', or 't' as 'true'
# If the value is missing, then it means 'true' by default.
#

listening-port=3478

tls-listening-port=5349

listening-ip=10.8.0.2
listening-ip=fdxx:xxxx:xx::2

relay-ip=10.8.0.2
relay-ip=fdxx:xxxx:xx::2

external-ip=xx.xx.xx.xx/10.8.0.2
external-ip=xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/fdxx:xxxx:xx::2

min-port=32769
max-port=65535

verbose

fingerprint

use-auth-secret

static-auth-secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

realm=www.example.com

total-quota=100

max-bps=1M

bps-capacity=0

no-tcp-relay

cert=/etc/letsencrypt/live/www.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/www.example.com/privkey.pem

cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"

dh-file=/etc/letsencrypt/dhp-4096.pem

syslog

no-multicast-peers

# IPv4 Private-Use
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
# Other IPv4 Special-Purpose addresses
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255

# special case the turn server itself so that client->TURN->TURN->client flows work
# this should be one of the turn server's listening IPs
#allowed-peer-ip=10.7.7.1
allowed-peer-ip=10.8.0.2

# IPv6 Unique-Local
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# IPv6 Link-Local Unicast
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Other IPv6 Special-Purpose assignments
denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff

#allowed-peer=::1
allowed-peer=fdxx:xxxx:xx::2

keep-address-family

no-cli

no-sslv3
no-tlsv1
no-tlsv1_1

8. システム起動・動作確認・ログ確認

指定ドメインでのTLS証明書とFreeSWITCH向けにそれら証明書をベースとして新たに作成したファイルとDocker-Composeファイルの該当箇所との整合性を確認後、以下コマンドにより起動します。

$ docker-compose up -d

https://www.example.com/bにアクセスすると**Greenlight**によるホーム画面が表示されます。

管理者アカウント

上記Greenlight管理者アカウントは以下のコマンドにより作成できます。

$ docker-compose exec greenlight bundle exec rake admin:create

起動コンテナの確認

$ docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED              STATUS                             PORTS                      NAMES
7254cb84f6b8   bbb-docker_nginx                    "/docker-entrypoint.…"   58 seconds ago       Up 41 seconds                                                 bbb-docker_nginx_1
1a4af7f491b5   bbb-html5                           "/entrypoint.sh"         About a minute ago   Up 52 seconds                                                 bbb-docker_html5-backend-2_1
01309d3aff4e   bbb-docker_bbb-web                  "/entrypoint.sh"         About a minute ago   Up 51 seconds (health: starting)                              bbb-docker_bbb-web_1
3191b52b4a41   bbb-html5                           "/entrypoint.sh"         About a minute ago   Up About a minute                                             bbb-docker_html5-frontend-1_1
e76bf3d18494   bbb-html5                           "/entrypoint.sh"         About a minute ago   Up 59 seconds                                                 bbb-docker_html5-backend-1_1
00468123d519   bbb-html5                           "/entrypoint.sh"         About a minute ago   Up 58 seconds                                                 bbb-docker_html5-frontend-2_1
72e958997413   bbb-docker_etherpad                 "/entrypoint.sh"         About a minute ago   Up About a minute (healthy)        9001/tcp                   bbb-docker_etherpad_1
b83cfb49cec0   bbb-docker_recordings               "/bin/sh -c /entrypo…"   About a minute ago   Up About a minute                                             bbb-docker_recordings_1
36e4d25cff80   bbb-docker_fsesl-akka               "/bin/sh -c 'dockeri…"   About a minute ago   Up About a minute                                             bbb-docker_fsesl-akka_1
272d30e8302b   bbb-docker_apps-akka                "/bin/sh -c 'dockeri…"   About a minute ago   Up About a minute                                             bbb-docker_apps-akka_1
8e7843ec3f97   bbb-docker_webrtc-sfu               "./docker-entrypoint…"   About a minute ago   Up About a minute                  127.0.0.1:3008->3008/tcp   bbb-docker_webrtc-sfu_1
0b3c4bebc1c7   bbb-docker_periodic                 "/entrypoint.sh"         About a minute ago   Up About a minute                                             bbb-docker_periodic_1
c8394581e5a7   coturn/coturn                       "docker-entrypoint.s…"   2 minutes ago        Up 2 minutes                                                  bbb-docker_coturn_1
875e2e8f72a1   mongo:4.4                           "docker-entrypoint.s…"   2 minutes ago        Up About a minute (healthy)        27017/tcp                  bbb-docker_mongodb_1
bbe2feccbd09   bbb-docker_freeswitch               "/bin/sh -c /entrypo…"   2 minutes ago        Up 2 minutes                                                  bbb-docker_freeswitch_1
e1d558249faa   redis:6.2-alpine                    "docker-entrypoint.s…"   2 minutes ago        Up About a minute (healthy)        6379/tcp                   bbb-docker_redis_1
8d134339b6ac   bigbluebutton/greenlight:v2         "bin/start"              2 minutes ago        Up About a minute                  10.7.7.1:5000->80/tcp      bbb-docker_greenlight_1
e41339c91944   kurento/kurento-media-server:6.16   "/entrypoint.sh"         2 minutes ago        Up 2 minutes (healthy)                                        bbb-docker_kurento_1
97282b5f8505   bbb-docker_jodconverter             "/docker-entrypoint.…"   2 minutes ago        Up About a minute                                             bbb-docker_jodconverter_1
061aced8710b   postgres:12-alpine                  "docker-entrypoint.s…"   2 minutes ago        Up About a minute (healthy)        5432/tcp                   bbb-docker_postgres_1

ログ確認

各コンテナ名またはIDを指定してログを確認します。coturnコンテナの場合は、

$ docker logs bbb-docker_coturn_1

FreeSWITCHの場合は、Dockerコンテナ内でコマンドラインツールfs_cliを使用することでリアルタイムに動作確認を行うことが出来ます。

コンテナに入ってから .env ファイルで作成された FSESL_PASSWORD を指定して FreeSWITCH のコマンドコンソールに入ります。

$ docker exec -ti bbb-docker_freeswitch_1 bash
root@xxxxxx:/# fs_cli -H 10.7.7.1 -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

.=======================================================.
|            _____ ____     ____ _     ___              |
|           |  ___/ ___|   / ___| |   |_ _|             |
|           | |_  \___ \  | |   | |    | |              |
|           |  _|  ___) | | |___| |___ | |              |
|           |_|   |____/   \____|_____|___|             |
|                                                       |
.=======================================================.
| Anthony Minessale II, Ken Rice,                       |
| Michael Jerris, Travis Cross                          |
| FreeSWITCH (http://www.freeswitch.org)                |
| Paypal Donations Appreciated: paypal@freeswitch.org   |
| Brought to you by ClueCon http://www.cluecon.com/     |
.=======================================================.

.=======================================================================================================.
|       _                            _    ____ _             ____                                       |
|      / \   _ __  _ __  _   _  __ _| |  / ___| |_   _  ___ / ___|___  _ __                             |
|     / _ \ | '_ \| '_ \| | | |/ _` | | | |   | | | | |/ _ \ |   / _ \| '_ \                            |
|    / ___ \| | | | | | | |_| | (_| | | | |___| | |_| |  __/ |__| (_) | | | |                           |
|   /_/   \_\_| |_|_| |_|\__,_|\__,_|_|  \____|_|\__,_|\___|\____\___/|_| |_|                           |
|                                                                                                       |
|    ____ _____ ____    ____             __                                                             |
|   |  _ \_   _/ ___|  / ___|___  _ __  / _| ___ _ __ ___ _ __   ___ ___                                |
|   | |_) || || |     | |   / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \                               |
|   |  _ < | || |___  | |__| (_) | | | |  _|  __/ | |  __/ | | | (_|  __/                               |
|   |_| \_\|_| \____|  \____\___/|_| |_|_|  \___|_|  \___|_| |_|\___\___|                               |
|                                                                                                       |
|     ____ _             ____                                                                           |
|    / ___| |_   _  ___ / ___|___  _ __         ___ ___  _ __ ___                                       |
|   | |   | | | | |/ _ \ |   / _ \| '_ \       / __/ _ \| '_ ` _ \                                      |
|   | |___| | |_| |  __/ |__| (_) | | | |  _  | (_| (_) | | | | | |                                     |
|    \____|_|\__,_|\___|\____\___/|_| |_| (_)  \___\___/|_| |_| |_|                                     |
|                                                                                                       |
.=======================================================================================================.

Type /help <enter> to see a list of commands

freeswitch@xxxxxxxxx>


管理者によるユーザ管理画面


管理者による全会議室の管理画面


主催者(管理者)の会議:Home Room


会議:Home Roomを開始後、資料を共有しての打合せや講義


モバイルからHome Roomに参加


Home Roomへ参加後の画面