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.
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)
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
Autenticación con token Jwt (Opcional-Avanzado)
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
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": "*"
}
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
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.
Terminado el despliegue del stack visitamos el dominio desde el navegador
Información extraída de:
https://es.wikipedia.org/wiki/
Administrador de sistemas, un curioso amante de las tecnologías.
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.
lo siento por la demora, pudiste solucionar amigo?
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!!!
lo siento por responder un mes después, espero hallas solucionado el problema.