Jitsi Meet es una plataforma de videoconferencia de código abierto basada en WebRTC: los participantes se unen desde el navegador o desde la app móvil sin crear cuenta, y el vídeo pasa por tu propio servidor. Se compone de varios servicios: Nginx sirve la web, Prosody hace de servidor XMPP para la señalización, Jicofo gestiona las conferencias y Jitsi Videobridge (JVB) reenvía el audio y el vídeo. En este tutorial instalarás todo el conjunto en Ubuntu 24.04 con los paquetes oficiales, obtendrás un certificado de Let's Encrypt y configurarás el servidor para que solo los usuarios autenticados puedan crear salas.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS dedicado a Jitsi, por ejemplo un VPS de CubePath, con un usuario no root con privilegios
sudo. Jitsi configura su propio Nginx, así que es preferible no compartir el servidor con otros sitios web. - Al menos 4 GB de RAM y 2 vCPU para reuniones pequeñas. Para muchas reuniones simultáneas, 8 GB y 4 vCPU. El ancho de banda es el recurso que más se consume.
- Un subdominio, por ejemplo
meet.your_domain, con un registro DNS de tipo A que apunte a la IP pública del servidor. Let's Encrypt lo necesita durante la instalación.
A lo largo de la guía, sustituye meet.your_domain por tu subdominio y your_server_ip por la IP pública del servidor.
Paso 1: Configurar el nombre del servidor
Los servicios de Jitsi se comunican entre sí usando el nombre de dominio, así que el servidor debe resolver meet.your_domain hacia sí mismo. Comprueba primero que el DNS público ya apunta a tu IP:
dig +short meet.your_domain
203.0.113.10
Establece el nombre del host:
sudo hostnamectl set-hostname meet
Añade el dominio completo a /etc/hosts con la IP pública del servidor:
sudo nano /etc/hosts
your_server_ip meet.your_domain meet
Comprueba que el nombre se resuelve localmente:
ping -c 1 meet.your_domain
La respuesta debe venir de your_server_ip.
Paso 2: Abrir los puertos en el cortafuegos
Jitsi necesita HTTP y HTTPS para la web y Let's Encrypt, 10000/udp para el audio y el vídeo, y 3478/udp y 5349/tcp para el servidor TURN que instala el paquete y que ayuda a los participantes detrás de cortafuegos restrictivos:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable
Comprueba las reglas:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
10000/udp ALLOW Anywhere
3478/udp ALLOW Anywhere
5349/tcp ALLOW Anywhere
Paso 3: Añadir los repositorios de Prosody y Jitsi
Jitsi depende de versiones de Prosody más recientes que las de Ubuntu, así que se instalan desde el repositorio del propio proyecto Prosody. Instala las herramientas necesarias y activa el componente universe:
sudo apt update
sudo apt install gnupg2 curl lsb-release
sudo add-apt-repository universe
sudo mkdir -p /etc/apt/keyrings
Añade el repositorio de Prosody con su clave:
sudo curl -sL https://prosody.im/files/prosody-debian-packages.key -o /etc/apt/keyrings/prosody-debian-packages.key
echo "deb [signed-by=/etc/apt/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/prosody-debian-packages.list
Añade el repositorio de Jitsi. Su clave se convierte a formato binario con gpg --dearmor:
curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jitsi-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | sudo tee /etc/apt/sources.list.d/jitsi-stable.list
Actualiza el índice de paquetes e instala lua5.2, que Prosody necesita para los módulos de Jitsi:
sudo apt update
sudo apt install lua5.2
Comprueba que el paquete de Jitsi está disponible:
apt policy jitsi-meet
jitsi-meet:
Installed: (none)
Candidate: 2.0.10431-1
Version table:
2.0.10431-1 500
500 https://download.jitsi.org stable/ Packages
Paso 4: Instalar Jitsi Meet
Instala el metapaquete jitsi-meet, que trae Prosody, Jicofo, Jitsi Videobridge, la web y la configuración de Nginx y del servidor TURN:
sudo apt install jitsi-meet
El instalador hace varias preguntas:
- Hostname: escribe
meet.your_domain. - SSL certificate: elige Let's Encrypt certificates.
- Email: una dirección válida para los avisos de caducidad de Let's Encrypt.
- Si pregunta por la integración de telefonía de JaaS, puedes responder que no.
Al terminar, comprueba que los cuatro servicios están activos:
systemctl is-active prosody jicofo jitsi-videobridge2 nginx
active
active
active
active
Comprueba también que Videobridge escucha en el puerto UDP de medios:
sudo ss -ulnp | grep 10000
UNCONN 0 0 *:10000 *:* users:(("java",pid=5213,fd=258))
Abre https://meet.your_domain en el navegador. Verás la página de bienvenida de Jitsi Meet con un certificado válido. Escribe un nombre de sala, entra, y únete a la misma sala desde otro dispositivo (por ejemplo, el móvil con datos). Si os veis y oís, la instalación funciona.
Notasi durante la instalación elegiste un certificado autofirmado o Let's Encrypt falló porque el DNS aún no apuntaba al servidor, puedes obtenerlo después con
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh.
Paso 5: Exigir autenticación para crear salas
Tal como queda tras la instalación, cualquier persona que conozca la URL puede crear salas y usar tu servidor y tu ancho de banda. La configuración llamada secure domain exige usuario y contraseña para crear una sala, mientras que los invitados siguen pudiendo unirse a una sala ya iniciada sin cuenta.
Configurar Prosody
Abre la configuración de Prosody para tu dominio:
sudo nano /etc/prosody/conf.avail/meet.your_domain.cfg.lua
Dentro del bloque VirtualHost "meet.your_domain", cambia el método de autenticación de jitsi-anonymous a internal_hashed:
VirtualHost "meet.your_domain"
authentication = "internal_hashed"
Deja el resto del bloque como está. Después, al final del archivo, añade un host virtual para los invitados:
VirtualHost "guest.meet.your_domain"
authentication = "jitsi-anonymous"
c2s_require_encryption = false
El dominio guest.meet.your_domain es interno de XMPP; no necesita registro DNS ni certificado.
Configurar la web
Indica a la aplicación web qué dominio usan los invitados:
sudo nano /etc/jitsi/meet/meet.your_domain-config.js
Dentro del objeto hosts, añade la línea anonymousdomain (en el archivo aparece comentada como ejemplo):
hosts: {
domain: 'meet.your_domain',
anonymousdomain: 'guest.meet.your_domain',
muc: 'conference.' + subdomain + 'meet.your_domain',
},
No toques las demás líneas de hosts; solo añade o descomenta anonymousdomain.
Configurar Jicofo
Jicofo es quien decide si se puede crear una conferencia, así que también debe saber que la autenticación está activada:
sudo nano /etc/jitsi/jicofo/jicofo.conf
Dentro del bloque jicofo { ... } existente, añade el bloque authentication:
jicofo {
authentication: {
enabled: true
type: XMPP
login-url: meet.your_domain
}
// ... resto de la configuración existente (xmpp, etc.)
}
Crear usuarios y reiniciar
Crea un usuario para cada persona que deba poder abrir salas. prosodyctl pedirá la contraseña de forma interactiva, así no queda en el historial de la shell:
sudo prosodyctl adduser [email protected]_domain
Comprueba la configuración de Prosody y reinicia los servicios:
sudo prosodyctl check config
sudo systemctl restart prosody jicofo jitsi-videobridge2
Checking config...
Done.
Vuelve a abrir https://meet.your_domain en una ventana privada del navegador y entra en una sala nueva. Jitsi mostrará el aviso de que la reunión aún no ha empezado y un botón I am the host (o Soy el anfitrión) que pide usuario y contraseña. Con el usuario ana la sala se crea; a partir de ese momento, los invitados que abran el mismo enlace entran sin credenciales.
Para eliminar un usuario más adelante:
sudo prosodyctl deluser [email protected]_domain
Paso 6: Ajustar las opciones por defecto
La mayoría de opciones de la interfaz se configuran en el mismo archivo meet.your_domain-config.js, que Nginx sirve como archivo estático: los cambios se aplican al recargar la página, sin reiniciar servicios.
sudo nano /etc/jitsi/meet/meet.your_domain-config.js
Busca estas opciones (muchas están comentadas) y ajústalas según tus necesidades:
// Idioma por defecto de la interfaz
defaultLanguage: 'es',
// A partir del participante número 10, entrar con micrófono y cámara apagados
startAudioMuted: 10,
startVideoMuted: 10,
// En el móvil, abrir la reunión en el navegador en lugar de sugerir la app
disableDeepLinking: true,
Guarda el archivo, recarga la página y comprueba que la interfaz aparece en español.
Solución de problemas
Los participantes se desconectan a los pocos segundos o no ven vídeo. El puerto 10000/udp no es accesible. Comprueba la regla de UFW y cualquier cortafuegos externo, y revisa el registro de Videobridge:
sudo journalctl -u jitsi-videobridge2 -n 50 --no-pager
Dos personas se ven entre ellas pero con tres o más falla. Con dos participantes Jitsi usa conexión directa entre navegadores; a partir de tres el tráfico pasa por Videobridge. Es el mismo problema de 10000/udp del punto anterior.
Error de autenticación al pulsar "I am the host". Revisa que el usuario existe y pertenece al dominio principal, no al de invitados, y consulta los registros de Prosody y Jicofo:
sudo tail -n 50 /var/log/prosody/prosody.log
sudo journalctl -u jicofo -n 50 --no-pager
El servidor está detrás de NAT (IP privada). Videobridge anuncia su IP privada y los clientes externos no pueden conectar. Edita /etc/jitsi/videobridge/sip-communicator.properties y añade la IP privada y la pública:
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=your_private_ip
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=your_server_ip
Reinicia después con sudo systemctl restart jitsi-videobridge2. En un VPS con IP pública asignada directamente no hace falta.
Conclusión
Tienes un servidor Jitsi Meet propio en Ubuntu 24.04 con HTTPS, en el que solo los usuarios que tú creas pueden abrir reuniones y los invitados se unen con el enlace. Como siguientes pasos puedes activar la sala de espera (lobby) desde las opciones de seguridad de cada reunión, instalar Jibri en un servidor aparte para grabar reuniones o emitirlas en directo, o añadir más servidores Videobridge si necesitas más capacidad.
