Videoconferencias con BigBlueButton - WebRTC

Ya he hablado de BigBlueButton en dos distintas ocasiones: la primera hace ya 6 años y la segunda hace tres años. Lo que me ha motivado a escribir otra vez acerca de este sistema de videoconferencias Open Source, es que con la ultima versión disponible, la 2.2.X se ha completado el pasaje de su uso mixto, WebRTC – Adobe Flash Player, a WebRTC solamente; esto quiere decir que ahora ya no se necesitará Adobe Flash Player; esto es una optima noticia ya que, si no estoy equivocado, será posible utilizarlo solamente hasta el final de este año 2020. Lo estoy probando desde hace unos días y la verdad estoy muy contento. Para la instalación se necesita Ubuntu 16.04 y personalmente lo tengo instalado en VPSDime que con 7 dólares/mes entrega un servidor con 6GB de memoria RAM y 4 vCPU. Los requisitos mínimos para que el sistema funcione correctamente/decentemente son 4GB RAM y 4vCPU. Un vez creado el VPS, se asocia un subdominio, que se utilizará más adelante, a la IP asignada por el proveedor. En mi caso el subdominio utilizado es bbb.voztovoice.org y la IP asignada es 209.50.56.144. Accedemos vía SSH y empezamos con la actualización de los repositorios:

apt-get update

Luego:

cat /etc/default/locale

cuyo resultado tiene que ser:

LANG="en_US.UTF-8"

Si así no fuera:

apt-get install language-pack-en

update-locale LANG=en_US.UTF-8

y luego nuevamente:

cat /etc/default/locale

# File generated by update-locale

LANG=en_US.UTF-8

Se continua con:

systemctl show-environment

Resultado esperado:

LANG=en_US.UTF-8

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Si así no fuera:

systemctl set-environment LANG=en_US.UTF-8

y luego nuevamente:

systemctl show-environment

LANG=en_US.UTF-8

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Se corrobora que la versión de Ubuntu sea la correcta:

cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=16.04

DISTRIB_CODENAME=xenial

DISTRIB_DESCRIPTION="Ubuntu 16.04.7 LTS"

que el sistema sea 64bit:

uname -m

x86_64

y que el Kernel versión 4.4:

uname -r

4.4.0-178-generic

Se averiguan que los repositorios contengan multiverse:

grep "multiverse" /etc/apt/sources.list

deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse

Ya se puede empezar con la parte dedicada a la instalación:

apt-get install haveged -y

apt-get install software-properties-common

add-apt-repository ppa:bigbluebutton/support -y

add-apt-repository ppa:rmescandon/yq -y

add-apt-repository ppa:libreoffice/ppa -y

apt-get update

apt-get dist-upgrade

 

MongoDB

wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

apt-get update

apt-get install -y mongodb-org curl

 

NodeJS

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

apt-get install -y nodejs

 

BigBlueButton

wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | sudo apt-key add -

echo "deb https://ubuntu.bigbluebutton.org/xenial-22/ bigbluebutton-xenial main" | sudo tee /etc/apt/sources.list.d/bigbluebutton.list

apt-get update

apt-get install bigbluebutton -y

Si sale un error relacionado con la autenticación de los paquetes, para que la instalación funcione se utiliza el siguiente comando:

apt-get install bigbluebutton --allow-unauthenticated -y

luego se continua con:

apt-get install bbb-html5 -y

apt-get dist-upgrade

Terminada la instalación se reinicia el sistema de videoconferencias:

bbb-conf --restart

En algunas VPS, dependiendo del sistema de virtualización adoptado, puede presentarse el siguiente error:

Error: FreeSWITCH failed to start with SETSCHEDULER error

para solucionar, se abre el siguiente archivo:

nano /lib/systemd/system/freeswitch.service

se comenta la linea que sigue para que quede:

#CPUSchedulingPolicy=rr

Se guardan los cambios y se continua con:

systemctl daemon-reload

bbb-conf --restart

Si no salen errores se controla el sistema:

bbb-conf --check

# Potential problems described below

Debajo de la linea de arriba no tiene que aparecer ningún tipo de error. Se mira el estado del sistema:

bbb-conf --status

 

 

 

 

 

 

 

 

 

 

Es siempre más seguro y cómodo trabajar con un dominio/subdominio. Es por eso que con el comando que sigue se configura BBB para que utilice el subdominio indicado al inicio de este articulo:

bbb-conf --setip bbb.voztovoice.org

Luego se crean los certificados con Let’s Encrypt que luego se utilizarán en el servidor Web Nginx:

apt-get install software-properties-common

add-apt-repository universe

add-apt-repository ppa:certbot/certbot

apt-get install certbot

mkdir -p /etc/nginx/ssl

openssl dhparam -out /etc/nginx/ssl/dhp-4096.pem 4096

El comando de arriba para terminar puede tomar hasta unos 10 minutos. Se crea el certificado:

certbot --webroot -w /var/www/bigbluebutton-default/ -d bbb.voztovoice.org certonly

Se modifica la configuración de Nginx, el servidor Web, para que trabaje sobre el puerto seguro 443:

nano /etc/nginx/sites-available/bigbluebutton

Después de esta linea:

server_name bbb.voztovoice.org;

se añade:

listen 443 ssl;

listen [::]:443 ssl;

ssl_certificate /etc/letsencrypt/live/bbb.voztovoice.org/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/bbb.voztovoice.org/privkey.pem;

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256";

ssl_prefer_server_ciphers on;

ssl_dhparam /etc/nginx/ssl/dhp-4096.pem;

Se reinicia Nginx:

systemctl restart nginx

Luego se pasa toda la configuración de BBB sobre conexiones seguras:

nano /etc/bigbluebutton/nginx/sip.nginx

Cambiar esta linea:

proxy_pass http://209.50.56.144:5066;

con:

proxy_pass https://209.50.56.144:7443;

Archivo que sigue:

nano /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties

Cambiar:

bigbluebutton.web.serverURL=http://bbb.voztovoice.org

con:

bigbluebutton.web.serverURL=https://bbb.voztovoice.org

Archivo que sigue:

nano /usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties

Cambiar estas dos lineas:

jnlpUrl=http://bbb.voztovoice.org/screenshare

jnlpFile=http://bbb.voztovoice.org/screenshare/screenshare.jnlp

Para que queden:

jnlpUrl=https://bbb.voztovoice.org/screenshare

jnlpFile=https://bbb.voztovoice.org/screenshare/screenshare.jnlp

Con el comando que sigue se cambian todas las lineas del archivo config.xml donde aparezca http con https:

sed -e 's|http://|https://|g' -i /var/www/bigbluebutton/client/conf/config.xml

Se continua con el archivo:

nano /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml

Cambiando:

wsUrl: ws://bbb.voztovoice.org/bbb-webrtc-sfu

url: http://bbb.voztovoice.org/pad

con:

wsUrl: wss://bbb.voztovoice.org/bbb-webrtc-sfu

url: https://bbb.voztovoice.org/pad

Se termina con el archivo:

nano /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml

Cambiando:

playback_protocol: http

con:

playback_protocol: https

Se reinicia BBB:

bbb-conf --restart

Se instala y se configura el cortafuegos dejando abiertos los puertos que se necesitan:

apt-get install ufw

ufw enable

ufw default deny incoming

ufw default allow outgoing

ufw allow 22/tcp

ufw allow 80/tcp

ufw allow 443/tcp

ufw allow 1935/tcp

ufw allow 5066/tcp

ufw allow 7443/tcp

ufw allow 16384:32768/udp

ufw status

 

 

 

 

 

 

 

 

 

Se reinicia el sistema:

reboot

Como yo lo tengo integrado con Moodle, para la configuración del modulo se necesita la URL y la clave para acceder a las API del sistema de videoconferencias. Esos datos se obtienen con el comando:

bbb-conf --secret

URL: https://bbb.voztovoice.org/bigbluebutton/

Secret: uTswnqnqT76p2Sx3u4Yh35S

Si lo quieren utilizar la demo desde la pagina web:

apt-get install bbb-demo

reinician BBB:

bbb-conf --restart

Luego acceden a la pagina utilizando el subdominio. En mi caso:

https://bbb.voztovoice.org

para personalizar la consola de Linux:

nano /root/.bashrc

al final del archivo se copian las siguientes lineas:

export EDITOR=/bin/nano

export PS1='\[\033[0;35m\]\H\[\033[0;33m\] \w\[\033[00m\]: '

alias free="free -m"

Se guardan los cambios y se recarga la configuración de la consola:

source /root/.bashrc

Si tenían un servidor con una versión anterior de BBB, para copiar las videoconferencias guardadas en el nuevo, desde el viejo se ejecutan los siguientes comandos:

cd /var/bigbluebutton

scp -r recording/ root@bbb.voztovoice.org:/var/bigbluebutton/

cd /var/bigbluebutton/published/

scp -r presentation root@bbb.voztovoice.org:/var/bigbluebutton/published/

Luego en el nuevo con el comando:

bbb-record --list

verán si los archivos se han copiado correctamente. Para terminar algunos pantallazos, muy bonitos, de la nueva versión: