FICUSONLINE F9E
ONLINE LEARNING SYSTEM BIGBLUEBUTTON V2.4 ON DOCKER
This is an article about the procedure to operate BigBlueButton with Docker container. BigBlueButton is an open source online learning system that is established by sharing each participant's voice, video, text message, etc. on the browser.
Takanobu FuseAdministrator

32 min read

2 years ago

Cloud / Server

BigBlueButton is an open source online learning system that is established by sharing each participant's voice, video, text message, etc. on the browser. Since it is a conference system that allows users to share text files and video materials and make video calls, it can also be used for business purposes. The main functions and features are as follows.

Main functions / features

  • Mutual communication by voice and video

  • Chat function

  • Writing to a file shared on the screen, pointer function

  • Raise your hand if you have an opinion

  • Recording / playback of meetings

  • Shared viewing of video materials such as YouTube

  • Sharing desktop files / screens of any user

  • Open source, on-premises management and operation

BigBlueButton is a system that puts each component together according to the block diagram below, and the control tower that controls each component was created by Scala, a programming language with an actor model that executes parallel processing asynchronously, and its toolkit, Akka. The app apps-akka and fsesl-akka are responsible for it. The web interface design is provided by Greenlight.

Docker Compose Bbb Docker

Reference

BigBlueButton

https://docs.bigbluebutton.org/

GitHub BigBlueButton Docker

https://github.com/bigbluebutton/docker/tree/main

GitHub BigBlueButton

https://github.com/bigbluebutton/bigbluebutton

FreeSWITCH

https://freeswitch.com/


About Install

As the minimum operating condition of BigBlueButton, a dedicated desktop machine with a memory capacity of 16GB is required as shown below, but this time we will install and check the operation as a Docker container on a PC with 8GB of memory running on Ubuntu 20.04.

Minimum Requirements for running

  • 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

Prepared Script : bbb-install.sh for install BBB into the host machine directry. You can also use this script to install directly on a computer instance provided by AWS or GCP.


Overview of The System

The overall picture including the network of the operation system is as follows. It is a system that uses AWS for the purpose of ensuring security by VPN (WireGuard) and that the global IP is not assigned by the Internet provider. The system itself is installed on your on-premises PC (VPN Peer 1).

Wireguard Web Bbb


Before Installing

Obtaining a server domain is a prerequisite. We also recommend that you read the following items in advance. Knowledge of AWS, GCP, etc. that provide cloud services is also required.

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


Each Step to Confirm The System Running

Below are the steps from preparing the VPN server to actually checking the operation.

  1. VPN server construction with AWS + WireGuard
  2. Download BigBlueButton for Docker
  3. Get TLS server certificate with Let's Encrypt Certbot
  4. Reverse proxy settings
  5. Creating docker-compose file / environment variable file .env
  6. FreeSWITCH settings
  7. STUN / TURN server settings
  8. System startup / operation check / log check

1. VPN server construction with AWS + WireGuard

Since it is used as a VPN server, select the minimum computer resource from the AWS computing service. 512MB of memory and 10GB of disk capacity are sufficient. Please refer to the article in the blog for how to use and set WireGuard as a VPN server.

Refer to the overall system diagram

IP Forwarding

Validate the following sections in /etc/sysctl.conf (un-commented for excluding #)

net.ipv4.ip_forward = 1

net.ipv6.conf.all.forwarding = 1

Port Fowarding and IP Masquerade

Set the above rules by iptables or nftables

The port forwarding rule settings by nftables are as follows (only a part is described).

/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. Download BigBlueButton for Docker

Download the Docker version of BigBlueButon with the git clone command. After the download is complete, move to the bbb-docker directory and update the submodule.

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

3. Get TLS server certificate with Let's Encrypt Certbot

Nginx reverse proxy 443 port / FreeSWITCH web socket 7443 port and SIPS 5081 port / Coturn TURN server 5349 port, because of external connection to each of these ports requires a TLS certificate,  Using Let's Encrypt Certbot and get these in advance.

Use Certbot's Docker image to get the TLS certificate. Perform the TLS authentication procedure in Certbot's standalone mode, specify the acquired authentication file in the docker-compose file, and start the BigBlueButton.

Reference:Certbot Running with Docker

Start the Certbot container in the bbb-docker directory and get the TLS certificate. A set of TLS certificates with the specified domain is created in the letsencrypt folder.

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

Since you can get the TLS authentication file before booting the system, you can prepare the SSL configuration file that specifies the Nginx 443 port in advance.

For updating, refer to the Certbot command option and write the update command in the clone job of the host machine.


4. Reverse proxy settings

Add the function as a reverse proxy to Nginx of BigBlueButton. Create the Nginx reverse proxy configuration file template reverse-proxy.conf.temp in the bbb-docker / nginx_config_temp folder by referring to the following document.

By copying this template file to the template folder of the Nginx container in the docker-compose file, it will be saved and loaded as a reverse-proxy.conf file when the Nginx container starts.

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. Creating docker-compose file / environment variable file .env

By executing the following script in the bbb-docker directory, the docker-compose file docker-compose.yml and its environment variable file .env will be created.

$ ./scripts/setup

If you change or add the contents of environment variables, the changed contents will be overwritten in docker-compose.yml by executing the following script.

$ ./scripts/generate-compose

The points of the created docker-compose.yml and .env files are as follows.

.env(excerpted partly)

Check the below items.

DOMAIN--->Domain, EXTERNAL_IPvX--->Gloval IP of AWS Instance, STUN_IP--->EXTERNAL_IPv4, TURN_SERVER--->turns:Domain: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(excerpted partly)

freeswitch, nginx and coturn services in docker-compose.yml are customized.

Since the difference requierd TLS authentication file of Let's Encrypt for each service, please refer to the comment section of the volumes section of the nginx service and create the required authentication files.

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

  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 settings

Edit the following two configuration files, the environment variable configuration file and the profile configuration file for external lines, according to the network environment of the system.

mod/freeswitch/conf/vars.xml.tmpl

Modified :

<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

Modified :

<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 server settings

I replaced the Coturn image with the official Docker image. The point of configuration file is to specify the directories of TLS authentication files and dh file.

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. System startup / operation check / log check

After confirming the consistency between the TLS certificate in the specified domain and the file newly created based on those certificates for FreeSWITCH and the corresponding part of the Docker-Compose file, start it with the following command.

$ docker-compose up -d

Access to "https://www.example.com/b", then apper the below home view.

Bbb Welcome

Admin Account

The above Greenlight administrator account can be created by the following command.

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

Check Startup Containers

$ 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

Check logs

Check the log by specifying each container name or ID. For Coturn containers ;

$ docker logs bbb-docker_coturn_1

In the case of FreeSWITCH, you can check the operation in real time by using the command line tool fs_cli in the Docker container.

After entering the container, specify the FSESL_PASSWORD created in the .env file to enter the FreeSWITCH command console.

$ 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: [email protected]   |
| Brought to you by ClueCon http://www.cluecon.com/     |
.=======================================================.

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

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

freeswitch@xxxxxxxxx>

 

User management menu in admin user

Bbb Admin User Config

Meeting management menu in admin user

Bbb Admin User Config Meeting Rooms

 

 

The meeting "Home Room" managed by admin user

Bbb Admin User Main

 

Discussion and Teaching in "Home Room"

Bbb Home Room

 

Participation in "Home Room" from mobile

Bbb Mobile Invited User

After participation in "Home Room"

Bbb Mobile Invited User Participation


I will also follow this blog in Ficus Online Forum for fixing contents and adding comments.