Instalación y configuración básica de Jitsi Meet

En medio de la cuarentena actual, han proliferado las reuniones en línea. En verdad, a veces tengo 2 ó 3 invitaciones en el día para asistir a alguno de estos eventos en línea, el 95% de ellos es COVID-19 e «inserte aquí una patología adicional». La mayoría en Zoom, Microsoft Teams, Adobe Connect, Bluejeans, GoToWebinar, Veeva Engage y otras que he usado menos veces. En común estas aplicaciones tienen que son propietarias y en la mayoría de los casos, el host tiene que pagar por ciertas características para superar ciertas limitaciones. Me ha tocado entonces hacer posible una actividad de educación médica continua en línea y he elegido Jitsi Meet para cumplir este objetivo.

Jitsi Meet es una aplicación de software libre y de código abierto diseñada para videoconferencias y que usa el protocolo webRTC, por esta razón solamente es necesario utilizar un navegador para poder conectarse. En dispositivos móviles tenemos la opción de instalar la aplicación nativa tanto para Android como iOS.

La limitante es aquí entonces los recursos que tengas disponibles en el servidor. Evidentemente a más recursos, mejor calidad y más usuarios podrán conectarse. Pero también hay que tener en cuenta que quien actúa de host de la reunión debe tener un buen ancho de banda para transmitir con la mejor calidad posible y tener un buen equipo para videoconferencia.

Para empezar, debemos tener en cuenta el tope de usuarios que vamos a manejar y que un sistema de videoconferencia en verdad devora recursos. En mi caso hay que mantener 50 usuarios simultáneos, médicos igual que yo, hambrientos de educación médica continua.

Aspectos previos

Apuntar un subdominio hacia el servidor que se va a utilizar. Por razones de comodidad, Debian 10 es una buena elección para mí así que un VPS optimizado para tareas en CPU debe hacer el trabajo. Hay que tener en cuenta el tiempo de propagación de un dominio ya que casi 24 horas después hay algunos DNS que aún no reconocían la dirección.

Para verificar si un DNS reconoce una dirección solo hace falta usar el comando dig de esta manera:

Respuesta adecuada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dig @1.1.1.1 meet.nombrededominio.com A

; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> @1.1.1.1 meet.nombrededominio.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58223
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;meet.nombrededominio.com.  IN  A

;; ANSWER SECTION:
meet.nombrededominio.com. 3600 IN   A   167.70.90.200

;; Query time: 261 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Jun 14 07:30:35 EST 2020
;; MSG SIZE  rcvd: 97

Respuesta denegada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> @200.75.200.2 meet.nombrededominio.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12552
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;meet.nombrededominio.com.      IN  A

;; AUTHORITY SECTION:
nombrededominio.com.        1800    IN  SOA ns1.digitalocean.com. hostmaster.nombrededominio.com. 1580200932 10800 3600 604800 1800

;; Query time: 230 msec
;; SERVER: 200.75.200.2#53(200.75.200.2)
;; WHEN: Sun Jun 14 07:37:54 EST 2020
;; MSG SIZE  rcvd: 109

También podemos hacer uso de herramientas de verificación geográfica que lo único que hacen es ejecutar el mismo comando contra una serie de servidores DNS en varios lugares del mundo. Estos son los 3 que más uso:

Casi todas esas herramientas traen un mapa, así podemos darnos cuenta que por ejemplo en New York, quienes usen ese servidor DNS que está siendo comprobado no les cargará la web.

Configurando el nombre de dominio

Este paso es importante ya que la instalación de Jitsi se fija en estos cambios para generar los archivos de configuración. Primero cambiar el nombre de hostname.

1
$ sudo hostnamectl set-hostname meet.nombrededominio.com

Ahora necesitamos editar el archivo /etc/hosts para apuntar el localhost al mismo nombre de dominio.

1
127.0.0.1 localhost meet.nombrededominio.com

Con este último paso nos aseguramos que las conexiones locales internas utilicen también el certificado TLS que generaremos más adelante garantizando así la encriptación de las comunicaciones.

Activando el firewall

Para evitar complicaciones con reglas y demás hierbas aromáticas que pueda necesitar saber para administrar un firewall, usando ufw se puede lograr mucho en pocas líneas.

Para instalar ufw en caso que aún no esté instalado

1
sudo apt install ufw

Luego abrimos los puertos 80, 443, 4443 y 10000 de esta manera

1
2
3
4
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 4443/tcp
sudo ufw allow 10000/udp

Y activamos ufw

1
sudo systemctl enable ufw

Instalación

Luego de tener nuestro servidor funcionando a nuestro gusto. La rutina de actualizar todo será necesaria.

1
2
sudo apt update
sudo apt upgrade

Lo siguiente será entonces agregar el repositorio estable de Jitsi al sistema. El primer paso sería instalar gnupg para descargar y añadir la llave criptográfica.

1
sudo apt install gnupg

Ahora descargamos la clave GPG

1
wget https://download.jitsi.org/jitsi-key.gpg.key

Y la añadimos mediante apt-key

1
sudo apt-key add jitsi-key.gpg.key

Ya podemos eliminar la clave descargada después de haberla añadido al sistema y creamos un archivo sources.list para el repositorio de Jitsi.

1
sudo nano /etc/apt/sources.list.d/jitsi-stable.list

Y añadimos este contenido

1
deb https://download.jitsi.org stable/

Ahora actualizamos el repositorio e instalamos Jitsi.

1
2
sudo apt update
sudo apt install jitsi-meet

Luego la instalación lanzará un asistente que preguntará el hostname que usaremos y que ya configuramos

Y luego sobre usar un certificado autofirmado. Aceptamos está opción ya que después podemos usar uno de letsencrypt generado por certbot.

Usando un certificado TLS de letsencrypt

Solo necesitaremos instalar certbot

1
sudo apt install certbot

Y ejecutar el script de instalación que ya trae Jitsi que autoconfigura el certificado, nos preguntará por una dirección de correo electrónico donde nos notificará la expiración del certificado cuando este próxima la fecha.

1
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Al finalizar el script se añade automáticamente una tarea cron que renueve el certificado antes de su expiración y se ejecuta semanalmente.

Protegiendo las salas de reunión

Por defecto cualquier usuario que entre a la web en su estado por defecto podrá crear una videoconferencia. Para prevenir este comportamiento podemos añadir usuarios a través de prosody. De este modo también podemos garantizar que pueda haber más de un moderador en una reunión.

Los archivos de configuración de esta parte son autogenerados durante la instalación, por lo que toca buscar individualmente cada uno.

1
sudo nano /etc/prosody/conf.avail/meet.nombrededominio.com.cfg.lua

Una vez abierto el archivo, cambiamos la línea authentication = "anonymous" por authentication = "internal_plain" y al final del archivo añadimos este bloque

1
2
3
4
...
VirtualHost "guest.meet.nombrededominio.com"
    authentication = "anonymous"
    c2s_require_encryption = false

Ahora editamos el achivo /etc/jitsi/meet/meet.nombrededominio.com-config.js y cambiamos la línea

1
// anonymousdomain: 'guest.example.com',

por esta

1
anonymousdomain: 'guest.meet.nombrededominio.com',

Ahora abrimos el archivo /etc/jitsi/jicofo/sip-communicator.properties y añadimos esta línea

1
org.jitsi.jicofo.auth.URL=XMPP:meet.nombrededominio.com

Lo siguiente será añadir los usuarios que deseamos a Jitsi usando prosody

1
sudo prosodyctl register usuario meet.nombrededominio.com contraseña

Una vez hemos terminado aquí, reiniciamos Jitsi y sus servicios asociados.

1
2
3
4
sudo systemctl restart prosody.service
sudo systemctl restart jicofo.service
sudo systemctl restart jitsi-videobridge2.service
sudo systemctl restart nginx

Ahora, al intentar crear una sala de conferencia, Jitsi te pedirá un usuario y contraseña. El usuario se escribe como si fuera un correo electrónico. Este usuario ingresará automáticamente como moderador.

Si deseas iniciar sesión como un segundo moderador, solo hay que presionar en la rueda del engrane en la esquina superior derecha, y en la ventana que aparece en el acápite «Perfil» hay un enlace que dice «Iniciar sesión«. Ya solo será cuestión de ingresar a la sala de videoconferencia.

Personalización básica

El aspecto de Jitsi una vez instalado es bastante limpio, pero siempre podemos añadir al menos nuestro propio logo y texto a la web.

Portada de Jitsi personalizada

Para cambiar el logo, lo recomendable es utilizar una imagen monocrómatica blanca con 60% de transparencia a un tamaño de 612x272px en formato png. De este modo se presentará en Jitsi como una mosca audiovisual en la esquina superior izquierda.

Jitsi en funcionamiento con el logo personalizado como mosca audiovisual

Solo será cuestión de reemplazar el archivo /usr/share/jitsi-meet/images/watermark.png por el nuevo.

Como el texto se carga a través de un archivo json y existen múltiples para varios idiomas que se cargan dependiendo de la configuración de idioma del navegador con que visitemos el sitio. Solo es cuestión de editar el archivo correspondiente:

1
sudo nano /usr/share/jitsi-meet/lang/main-es.json

Solo es cuestión de buscar y reemplazar los bloques de texto que deseamos personalizar. Ahora solo debemos forzar que se muestre solo el que editamos al cargar la página web. Editamos el archivo /etc/jitsi/meet/meet.nombrededominio.com-config.js

1
defaultLanguage: 'es'

Conclusiones

Al finalizar todo este procedimiento tenemos un servidor web con capacidad para alojar videoconferencias entre usuarios sin necesidad de instalar aplicaciones adicionales. El único paso que tal vez podría limitar es otorgar permisos para uso de micrófono y cámara.

La seguridad y anonimato ofrecido por Jitsi son un punto fuerte a favor del sistema luego de conocer ciertas flaquezas y dudas en cuanto al tratamiento de datos que otorga por lo menos Zoom a sus usuarios. Sin tomar en cuenta que cada usuario también tendría que estar registrado. En Jitsi, es opcional que coloques tus datos (nombre, apellido, correo) pues la plataforma  funciona muy bien. La opción de compartir pantalla es útil si deseamos hacer una presentación en línea y como moderador podemos silenciar a todos los usuarios de un solo click o centrar la atención únicamente en un usuario.

Si en el peor de los casos, existe algún problema de incompatibilidad con algún usuario también tenemos la opción de transmitir en vivo a un canal de YouTube y así también queda nuestra sesión disponible en un archivo histórico.  O bien, podemos hacer que se grabe el vídeo de la misma sesión para editarlo después u subirlo al servicio de streaming de nuestra preferencia.


Moisés Serrano Samudio Médico de atención primaria, fotógrafo aficionado, apasionado de las tecnologías relacionadas con el EdTech y el eHealth y diseñador/desarrollador de sitios web de salud. Médico, apasionado del EdTech/eHealth y diseñador/desarrollador de sitios web de salud.
Moisés Serrano Samudio

@linkmoises

Médico de atención primaria, fotógrafo aficionado, apasionado de las tecnologías relacionadas con el EdTech y el eHealth.

Entradas relacionadas

Comentarios

  1. se ve clara la guía, estoy buscando un servidor de VOIP para montarlo en debian para comunicación en la oficina. probare jitsi también

  2. Buenas estimado;

    Agradezco el tutorial, gracias a el pude montar un servidor Jitsi.
    Ahora, siguiendo las indicaciones para que la creación de salas no quede abierta a todos, he notado que cuando se invita a una persona cualquiera (no moderador, un usuario no creado usando prosodyctl register), también le pide usuario y contraseña.
    Cómo se debe hacer para que en las invitaciones, los usuarios directamente pasen a sala de espera y esperen a ser aceptados?
    Es decir, a un usuario que desee ingresar no le pida usuario y contraseña? en todo caso solamente la contraseña fijada en la sala?

    Desde ya muchas gracias y saludos desde Uruguay.

  3. El moderador/host/anfitrión o como desees llamarlo debe ingresar antes que cualquiera de los invitados. De lo contrario se le mostrará la pantalla para inicio de sesión. Incluso el invitado puede ignorarla y mantenerse ahí pues apenas inicie sesión el host, ingresará automáticamente a la sesión.

    ¡Saludos Marcos!

  4. Excelente publicación y súper bien explicado.

    Pero tengo una duda, si quisiera transmitir en vivo o hacer una grabación del meet como lo puedo realizar sale una leyenda que dice error.

    Saludos.

  5. Con esta configuración se puede transmitir en vivo. Para hacer grabaciones hacia la nube hay que configurar algunos otros servicios que se salen de lo básico que quería mostrar en el tutorial. Intentaré crear uno nuevo cubriendo estos detalles en cuanto tenga algo de tiempo. Saludos!

Deja una respuesta

Su email no será publicado. Required fields are marked *