Servidor Jitsi Meet en Docker con Traefik 2.*

En esta ocasión veremos como desplegar servidor privado Jitsi meet en Gnu/Linux con docker que usa traefik como proxy para los contenedores.

¿Qué es Jitsi?

Para quienes no sepan que es jitsi, tendremos una breve explicación sacada de wikipedia o de algún otro sitio.

Jitsi (antes SIP Communicator) es una aplicación de videoconferencia, VoIP, y mensajería instantánea con aplicaciones nativas para iOS y Android, y con soporte para Windows, Linux y Mac OS X a través de la web.1​ Es compatible con varios protocolos populares de mensajería instantánea y de telefonía, y se distribuye bajo los términos de la Apache License, por lo que es software libre y dé código abierto.

Características

Jitsi soporta varios sistemas operativos, incluyendo Windows, así como sistemas de tipo UNIX, como Linux, Mac OS X y BSD. También incluye:

  • Transferencia de llamadas atendidas y/o ciegas.
  • Cambio a «ausente» automático.
  • Autorreconexión
  • Grabación de llamadas.
  • Cifrado con protocolos SRTP y ZRTP.
  • Llamadas de conferencia.
  • Establecimiento de conexión de medios directa mediante protocolo ICE.
  • Streaming de escritorio.
  • Almacenamiento de contraseñas cifradas con una contraseña maestra.
  • Transferencia de archivos para los servicios XMPP, AIM/ICQ, Yahoo!
  • Cifrado de mensajería instantánea con Off-the-Record Messaging.
  • Soporte IPv6 para SIP y XMPP.
  • Releo (relaying) de medios con protocolo TURN.
  • Indicador de mensaje en espera (RFC 3842).
  • Llamadas de voz y vídeo mediante protocolos SIP y XMPP, con H.264, H.263, VP8 para codificación de vídeo.
  • Telefonía de banda ancha con G.722 y Speex.

Bueno ya acabada la parte aburrida para muchos que no conocen esta aplicación y sus características, vamos a la parte del despliegue y dependencias.

Dependencias y requerimientos

  • Linux
  • Docker
  • Docker-compose
  • Traefik 2.*.*
  • Puertos 80, 443, 10000/udp abiertos en el firewall

Si no saben que es traefik acá en el blog tenemos un artículo de como hacer un deploy de la versión 2.*.* Traefik como proxy

Despliegue del servidor Jitsi Meet

Clonamos el repositorio de jitsi

$ git clone https://github.com/tomasmetal23/jitsi-stable-with-docker-traefik.git

$ cd  jitsi-stable-with-docker-traefik

$ cp env.example .env

$ ./gen-passwords.sh

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

Hacemos una copia de env.example y le colocamos el nombre, .env el cual es el archivo de configuraciones del entorno.

Editamos el .env de la siguiente manera, esto es opcional para que nuestros logs estén con la fecha en orden, gracias a traefik no necesitaremos configurar otra cosa en este archivo.

Solo configuramos nuestra zona horaria y el dominio que usaremos
Solo configuramos nuestra zona horaria y el dominio que usaremos

Para que nuestro servidor funciones con autenticación de usuarios o jwt, debemos descomentar las lineas tal cual como se ve en la siguiente imagen.

Autenticación de usuarios (opcional)

Activación de la autenticación en jitsi
Dejamos tal cual en la imagen

prosodyctl

Comando para la creación de usuarios con su credencial, entramos al contenedor prosody y ejecutamos el siguiente comando, esto se hace luego de la finalización y despliegue.

prosodyctl --config /config/prosody.cfg.lua register usuariodeseado meet.jitsi contraseñadeseada
Creación de usuarios  para jitsi
Prosodyctl solo puede ser usado una vez, hayamos ejecutado el deploy, con la configuración de autenticación AUTH_TYPE=internal .

Autenticación con token Jwt (Opcional-Avanzado)

Agregamos si no están y definimos igual que en la imagen

JWT_APP_ID=

JWT_APP_SECRET=

JWT_ACCEPTED_ISSUERS=

JWT_ACCEPTED_AUDIENCES=

JWT_ALLOW_EMPTY=1

JWT_AUTH_TYPE=token

JWT_TOKEN_AUTH_MODULE=token_verification

Definimos estas variables de entorno con los datos de verificación de aplicación que usaremos para obtener nuestro token jwt, estos deben ser datos seguros ya que si alguien los tiene podrá crear tokens para acceder como moderador, básicamente es un identificador que nos da acceso mediante un enlace.

En el sitio jwt.io colocaremos los datos para general nuestro token de esta manera

Agregamos nuestro payload, abajo estará el formato solo para editar

Payload

{
  "context": {
    "user": {
      "avatar": "https://robohash.org/john-doe",
      "name": "John Doe",
      "email": "jdoe@example.com"
    }
  },
  "aud": "my_jitsi_app_id",
  "iss": "my_jitsi_app_id",
  "sub": "meet.jitsi",
  "room": "*"
}
Agregamos nuestra personalización al payload con nuestros datos para general el token
Agregamos nuestra personalización al payload con nuestros datos para general el token
Token generado en jwt.io
Token generado en jwt.io

Una vez generado el token lo usamos con nuestro dominio, el nombre de la sala que se quiera crear o acceder mas el token en este caso

descripción del enlace.
descripción del enlace.

https://meet.saiyans.com.ve/nft?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7InVzZXIiOnsiYXZhdGFyIjoiaHR0cHM6Ly9ibG9ncy5zYWl5YW5zLmNvbS52ZS93cC1jb250ZW50L3VwbG9hZHMvMjAxOS8xMi9tb2lzZXMuanBnIiwibmFtZSI6Ik1vaXNlcyIsImVtYWlsIjoibW9pc2VzQHNhaXlhbnMuY29tLnZlIn19LCJhdWQiOiIwMTM0MEM2REFBODZENDkxN0UxMzZCQkM5NENDRjI2NEFEN0M1NThGMTE0NDdDNzY2Mzc4NDg3N0E3OEY5REEzIiwiaXNzIjoiNjc4MUQ2Iiwic3ViIjoibWVldC5qaXRzaSIsInJvb20iOiIqIn0.k58_oIBLN0qAhxlTlpfJEVQ-6wpwZLUQpynuGeZxB7M

Al visitar la dirección automáticamente deja crear o entrar en una sala como moderador gracias al token, obviamente primero hay que terminar el despliegue para poder acceder.

Estos pasos van acá en el medio por una razón y es que si hacemos el despliegue primero y luego queremos agregar autenticación, tendremos que borrar toda la carpeta ~/.jitsi-meet y recrearla con sus subdirectorios.

Para que puedan obtener los cambios que apliquen en el .env .

Finalización y despliegue

Ahora procedemos a configurar el docker-compose.yml para decirle a traefik cuál será nuestro dominio y decirle a que puerto del contenedor debe conectarse para exponerlo hacia el exterior.

Una vez finalizada la configuración básica procedemos a desplegar nuestro stack con el comando docker-compose up -d tenemos abajo una imagen de referencia.

docker-compose up -d

Terminado el despliegue del stack visitamos el dominio desde el navegador

Nuestro servidor de jitsi meet funcionado perfectamente

Información extraída de:

https://es.wikipedia.org/wiki/

Autenticación JWT
Administrador de sistemas, un curioso amante de las tecnologías.

4 Comentarios

  1. Me quedan 2 containers apagados, hasta donde mostraste funciona perfecto, pero cuando quiero crear una sala se queda rebotando.
    docker-jitsi-meet_jicofo_1 docker-jitsi-meet_jvb_1 Esos dos no arrancan.

  2. Muy buen post, me solucionaste un problema que tenia, ahora se me presento otro… jajajaja, en el caso que quiera criar otra instancia de Jitsi en el mismo docker pero con otro dominio, como tendría que hacer?. Abrazo y gracias!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada.