Instalación de Jitsi Meet para Videoconferencia Autoalojada

Jitsi Meet es una plataforma de videoconferencia de código abierto basada en WebRTC que permite celebrar reuniones seguras y de alta calidad directamente en el navegador sin necesidad de instalar ninguna aplicación. Con soporte para cifrado extremo a extremo, grabación de reuniones, streaming a YouTube y salas con contraseña, Jitsi Meet es una alternativa completa a Zoom o Google Meet que mantiene el control sobre los datos. Esta guía cubre la instalación completa en un servidor Linux con dominio propio, autenticación de usuarios y configuración para producción.

Requisitos Previos

  • Ubuntu 20.04 o 22.04 LTS (recomendado, Jitsi soporta estas versiones oficialmente)
  • Mínimo 4 GB de RAM (8 GB para cargas medianas)
  • 4 vCPUs recomendado
  • Dominio propio apuntando a la IP del servidor
  • Puertos abiertos: 80, 443 (TCP) y 10000 (UDP para RTP/SRTP)
# Verificar que el dominio resuelve correctamente al servidor
dig jitsi.tudominio.com

# Abrir los puertos necesarios en el firewall
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw reload

Instalación Rápida con apt

Jitsi proporciona un instalador que configura automáticamente Nginx, Prosody y todos los componentes:

# Paso 1: Configurar el hostname del servidor (importante para Jitsi)
sudo hostnamectl set-hostname jitsi.tudominio.com

# Añadir al /etc/hosts
echo "127.0.0.1 jitsi.tudominio.com" | sudo tee -a /etc/hosts

# Paso 2: Instalar las dependencias básicas
sudo apt update && sudo apt install -y gnupg2 curl wget apt-transport-https

# Paso 3: Añadir el repositorio de Jitsi
curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor \
  -o /usr/share/keyrings/jitsi-key.gpg

echo "deb [signed-by=/usr/share/keyrings/jitsi-key.gpg] https://download.jitsi.org stable/" \
  | sudo tee /etc/apt/sources.list.d/jitsi-stable.list

sudo apt update

# Paso 4: Instalar Jitsi Meet
# El instalador preguntará el hostname y si quiere generar un certificado SSL
sudo apt install -y jitsi-meet

Durante la instalación, el asistente pregunta:

  1. Hostname: introduce jitsi.tudominio.com
  2. Certificado SSL: selecciona "Generate a new self-signed certificate" si vas a usar Let's Encrypt después
# Paso 5: Obtener certificado SSL de Let's Encrypt
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
# Introduce tu email cuando se solicite

Configuración de NGINX y SSL

El script de instalación configura Nginx automáticamente. Verifica el archivo generado:

# Ver la configuración de Nginx generada
cat /etc/nginx/sites-enabled/jitsi.tudominio.com.conf

# Verificar que la configuración es válida
sudo nginx -t

# Reiniciar Nginx si hiciste cambios
sudo systemctl reload nginx

Configuración de Nginx producida por el instalador (referencia):

server {
    listen 80;
    server_name jitsi.tudominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name jitsi.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/jitsi.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jitsi.tudominio.com/privkey.pem;

    # Archivos estáticos de Jitsi Meet
    root /usr/share/jitsi-meet;
    index index.html;

    # Proxy para el backend de Jicofo
    location /http-bind {
        proxy_pass http://localhost:5280/http-bind;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

Configuración del Servidor

Configuración principal de Jitsi

# Archivo de configuración principal del servidor Jitsi
sudo nano /etc/jitsi/meet/jitsi.tudominio.com-config.js
// Opciones importantes en config.js
var config = {
    hosts: {
        domain: 'jitsi.tudominio.com',
        muc: 'conference.jitsi.tudominio.com',
    },

    // Número máximo de participantes antes de mostrar advertencia
    channelLastN: 25,

    // Calidad de video por defecto
    startVideoMuted: 10,       // Empezar sin video a partir del participante 10
    startAudioMuted: 10,       // Empezar con micro silenciado a partir del 10

    // Cifrado extremo a extremo
    e2eping: {
        pingInterval: -1,
    },

    // Deshabilitar características que no necesitas
    disableDeepLinking: true,
    hideLobbyButton: false,

    // Configuración de videocalidad
    constraints: {
        video: {
            height: {
                ideal: 720,
                max: 1080,
                min: 180,
            },
        },
    },
};

Configuración de Prosody (servidor XMPP)

# Ver y editar la configuración de Prosody
sudo nano /etc/prosody/conf.avail/jitsi.tudominio.com.cfg.lua
-- Configuración básica de seguridad en Prosody
VirtualHost "jitsi.tudominio.com"
    authentication = "internal_hashed"  -- Cambiar a "jitsi-anonymous" para abrir el acceso
    ssl = {
        key = "/etc/prosody/certs/jitsi.tudominio.com.key";
        certificate = "/etc/prosody/certs/jitsi.tudominio.com.crt";
    }
    modules_enabled = {
        "bosh";
        "pubsub";
        "ping";
        "roster";
        "saslauth";
        "tls";
    }

-- Sala de conferencias
Component "conference.jitsi.tudominio.com" "muc"
    storage = "memory"
    modules_enabled = {
        "muc_meeting_id";
        "muc_domain_mapper";
    }
    admins = {"[email protected]"}
    muc_room_locking = false
    muc_room_default_public_jids = true

Autenticación de Usuarios

Por defecto, Jitsi permite que cualquiera cree salas. Para requerir autenticación:

# Paso 1: Modificar el VirtualHost de Prosody
sudo nano /etc/prosody/conf.avail/jitsi.tudominio.com.cfg.lua

Cambiar authentication = "jitsi-anonymous" a authentication = "internal_hashed".

# Paso 2: Crear usuarios en Prosody
sudo prosodyctl register admin jitsi.tudominio.com contraseña_admin
sudo prosodyctl register usuario1 jitsi.tudominio.com contraseña_usuario1

# Paso 3: Configurar Jitsi para requerir autenticación
sudo nano /etc/jitsi/meet/jitsi.tudominio.com-config.js
// En config.js, añadir:
hosts: {
    // ...
    anonymousdomain: 'guest.jitsi.tudominio.com',
},
# Añadir el VirtualHost de invitados en Prosody (sin autenticación para unirse)
sudo tee -a /etc/prosody/conf.avail/jitsi.tudominio.com.cfg.lua > /dev/null <<EOF

VirtualHost "guest.jitsi.tudominio.com"
    authentication = "anonymous"
    c2s_require_encryption = false
EOF

# Paso 4: Reiniciar todos los servicios
sudo systemctl restart prosody jicofo jitsi-videobridge2

Con esta configuración, solo los usuarios autenticados pueden crear salas, pero los invitados pueden unirse con el enlace.

Personalización de la Interfaz

# Los archivos de personalización van en un directorio separado
sudo mkdir -p /usr/share/jitsi-meet/custom

# Crear archivo de configuración de interfaz personalizada
sudo nano /etc/jitsi/meet/jitsi.tudominio.com-interface_config.js
var interfaceConfig = {
    APP_NAME: 'Mi Empresa VideoConf',
    SHOW_WATERMARK_FOR_GUESTS: false,
    DEFAULT_BACKGROUND: '#3d3d3d',
    DEFAULT_REMOTE_DISPLAY_NAME: 'Participante',
    DISPLAY_WELCOME_PAGE_CONTENT: true,
    TOOLBAR_BUTTONS: [
        'microphone', 'camera', 'closedcaptions', 'desktop',
        'fullscreen', 'fodeviceselection', 'hangup', 'profile',
        'chat', 'recording', 'livestreaming', 'settings',
        'raisehand', 'videoquality', 'filmstrip', 'invite',
        'feedback', 'stats', 'shortcuts', 'tileview',
        'videobackgroundblur', 'mute-everyone', 'security'
    ],
};

Grabación con Jibri

Jibri permite grabar reuniones o hacer streaming a YouTube:

# Instalar Jibri (requiere Chrome/Chromium headless)
sudo apt install -y jibri

# Configurar Jibri
sudo nano /etc/jitsi/jibri/jibri.conf
// /etc/jitsi/jibri/jibri.conf
jibri {
    id = "jibri-instance-1"
    single-use-mode = false

    api {
        http {
            external-api-port = 2222
            internal-api-port = 3333
        }
        xmpp {
            environments = [
                {
                    name = "prod environment"
                    xmpp-server-hosts = ["jitsi.tudominio.com"]
                    xmpp-domain = "jitsi.tudominio.com"
                    control-muc {
                        domain = "internal.auth.jitsi.tudominio.com"
                        room-name = "JibriBrewery"
                        nickname = "jibri-instance-1"
                    }
                    control-login {
                        domain = "auth.jitsi.tudominio.com"
                        username = "jibri"
                        password = "contraseña_jibri"
                    }
                    call-login {
                        domain = "recorder.jitsi.tudominio.com"
                        username = "recorder"
                        password = "contraseña_recorder"
                    }
                    strip-from-room-domain = "conference."
                    usage-timeout = 0
                    trust-all-xmpp-certs = true
                }
            ]
        }
    }

    recording {
        recordings-directory = /srv/recordings
        finalize-script = ""
    }
}
# Crear usuarios de Jibri en Prosody
sudo prosodyctl register jibri auth.jitsi.tudominio.com contraseña_jibri
sudo prosodyctl register recorder recorder.jitsi.tudominio.com contraseña_recorder

# Crear directorio de grabaciones
sudo mkdir -p /srv/recordings
sudo chown jibri:jibri /srv/recordings

# Iniciar Jibri
sudo systemctl enable jibri --now

Solución de Problemas

La reunión no conecta (ICE failure):

# El problema más común es el puerto UDP 10000 bloqueado
sudo ufw status | grep 10000

# Verificar que el videobridge está escuchando
sudo ss -unlp | grep 10000

# Comprobar logs del videobridge
sudo journalctl -u jitsi-videobridge2 -f

No hay audio o video para algunos participantes:

# Verificar la configuración de NAT en el videobridge
sudo nano /etc/jitsi/videobridge/sip-communicator.properties
# Añadir si estás detrás de NAT:
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=IP_PRIVADA
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=IP_PUBLICA

sudo systemctl restart jitsi-videobridge2

Error "Conference not found" al unirse:

# Revisar logs de Jicofo
sudo journalctl -u jicofo -f

# Verificar que Prosody está funcionando
sudo prosodyctl status

# Revisar configuración de Prosody
sudo prosodyctl check config

Alto consumo de CPU:

# Jitsi recomienda 1 vCPU por cada 50 participantes
# Ver el uso de CPU del videobridge
top -p $(pgrep -f jitsi-videobridge)

# Limitar el número de participantes por sala en config.js
resolution: 360,  // Reducir la resolución de video
channelLastN: 10, // Solo mostrar los 10 más activos

Conclusión

Jitsi Meet es la solución de videoconferencia autoalojada más completa disponible, con un instalador que simplifica la configuración inicial hasta el punto de estar operativo en menos de 30 minutos con un dominio y certificado SSL válidos. La configuración de autenticación es el paso más importante para proteger el servidor de uso no autorizado, especialmente si está expuesto en internet. Para organizaciones que necesitan grabación, Jibri amplía las capacidades aunque requiere recursos adicionales del servidor; considera un servidor separado para Jibri en entornos de producción.