Despliegue de nodo maestro Jitsi con soporte para escalamiento vía docker

De JitsiWiki ARIU
Ir a la navegación Ir a la búsqueda

El objetivo de este manual es documentar los pasos para el despliegue de Jitsi de acuerdo a un esquema de escalamiento horizontal de su componente principal: el Video Bridge. Si bien la solución Docker ofrecida en https://github.com/jitsi/docker-jitsi-meet funciona bien, pueden surgir varios inconvenientes a la hora de implementarla, por lo cual se trata de brindar una receta que funcione desde cero hasta puesta en funcionamiento en poco tiempo.

El esquema de deploy básico que apuntamos es el siguiente:

Esquema deploy.png

Nuestro deploy varía del propuesto oficialmente en dos aspectos:

  • Se pueden agregar más Videobridges en otros hosts (el docker-compose provisto no lo permite por defecto).
  • Gestionamos el acceso a la web a través de un load balancer, router y terminador SSL llamado Traefik (https://containo.us/traefik/). Le quitamos la responsabilidad al contenedor web de administrar sus certificados SSL.

Despliegue del Nodo Maestro

Como se muestra en el esquema de despliegue, este nodo puede puede ofrecer el servicio por si solo, sin escalamiento de videobridges.

Requerimientos

Aparte de los requerimientos de hardware oficiales del proyecto, para un deploy en un solo servidor, se requiere instalar en el host:

Atención: si se utiliza Debian Buster, tener en cuenta que usa nftables en lugar de iptables, por lo cual hay que configurar iptables-legacy con el comando “update-alternatives –set iptables /usr/sbin/iptables-legacy”. Más información en: https://wiki.debian.org/nftables

En la red, el host elegido deberá tener una ip pública con forwards a los siguientes puertos:

  • 443 tcp
  • 80 tcp
  • 10000 udp

Procedimiento

Iniciar sesión como root

Tomando las instrucciones de: https://github.com/jitsi/docker-jitsi-meet#quick-start

- Moverse a un directorio donde se descargará el paquete por ej: /root/ y ejecutar:

git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet

- Copiar el template de environment y modificarlo según las características del entorno propio (ver más adelante)

cp env.example .env

- Crear passwords para el archivo .env con el script provisto

./gen-passwords.sh

- Crear las carpetas del host en donde se guardarán las configuraciones de los diferentes componentes para ser montadas por los contenedores docker (por defecto en /root)

mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb,jigasi,jibri}

Continuar con estas instrucciones propias de nuestra solución

- Crear el archivo de almacenamiento de claves de Let's Encrypt y protegerlo. (Traefik no arranca si no tiene permisos 600).

touch /root/jitsi-acme.json
chmod 600 /root/jitsi-acme.json

- Copiar al directorio docker-jitsi-meet el archivo docker-compose.rtf, renombrarlo a “docker-compose.yml” y modificar lo siguiente:

"--certificatesResolvers.jitsi-acme-resolver.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory"

- Reemplazar la url con el CA Server de producción de Let´s encrypt según https://letsencrypt.org/docs/acme-protocol-updates/ . Al momento de redacción es: https://acme-v02.api.letsencrypt.org/directory . Por defecto se provee la dirección del entorno staging.

"--certificatesResolvers.jitsi-acme-resolver.acme.email=MAIL_WEBMASTER"

- Reemplazar MAIL_WEBMASTER por una dirección donde recibir notificaciones de let´s encrypt. Se recomienda una dirección real y de acceso periódico.

"traefik.http.routers.jitsi-router.rule=Host(`HOSTNAME`)"

- Reemplazar HOSTNAME con el hostname de la URL destinada al servicio jitsi.

- Arrancar la solución por primera vez para que genere los archivos de configuración a partir del entorno definido en “.env” (ver variables).

- Ejecutar

docker-compose up

y luego de que arranque todo correctamente (ingresar a la url al cabo de un par de minutos) presionar ctrl+c para cortar la ejecución.


Moverse a ~/.jitsi-meet-cfg/web y reemplazar el archivo config.js por el provisto, que contiene algunas optimizaciones.


A partir de este momento se pueden modificar los archivos de configuración de todos los componentes ya que se habrán generado todos los archivos en sus respectivos directorios. Es de especial atención la configuración del componente web, en el cual pueden aplicarse varias optiimizaciones. Los archivos en cuestión son ~/.jitsi-meet-cfg/web/config.js y ~/.jitsi-meet-cfg/web/interface.config.js . Una modificación sugerida es configurar el idioma por defecto para que sea Español. Para ello editar en ~/.jitsi-meet-cfg/web/config.js lo siguiente:

defaultLanguage: 'es'

- Iniciar el servicio en background ejecutando

docker-compose up -d

- Por último, ingresar a la url

https://HOSTNAME

Si todo salió bien, el sistema estará operativo y podrán iniciarse conferencias.

Importante: cada vez que se modifique el archivo .env, es necesario regenerar la configuración a mano de todos los componentes. Por lo tanto, se recomienda llevar una bitácora de los cambios realizados en los contenidos de ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb,jigasi,jibri} para luego poder replicar los cambios realizados tras sucesivos cambios del .env.