Novedades en mod_jitsi: Aprovisionamiento Automático de Servidores en Google Cloud

Una de las mayores barreras para implementar videoconferencias en Moodle ha sido la infraestructura. Con la nueva versión del plugin mod_jitsi, hemos revolucionado esto introduciendo el aprovisionamiento automático de servidores Jitsi en Google Cloud Platform.

El Problema que Resolvemos

Tradicionalmente, para tener tu propio servidor Jitsi necesitabas:

  1. Configurar manualmente un servidor Linux
  2. Instalar y configurar Jitsi Meet
  3. Configurar SSL con Let’s Encrypt
  4. Implementar autenticación JWT para control de moderadores
  5. Gestionar DNS y direcciones IP estáticas
  6. Mantener y escalar la infraestructura

Todo esto requería conocimientos técnicos avanzados y tiempo considerable. Ya no más.

La Solución: Aprovisionamiento Automático en GCP

Esquema

Con la nueva funcionalidad BETA, ahora puedes crear un servidor Jitsi completamente funcional con un solo clic desde la interfaz de administración de Moodle.

¿Qué hace el plugin automáticamente?

  1. Provisiona una VM en Google Compute Engine con la configuración óptima
  2. Instala Jitsi Meet mediante script de inicio automatizado
  3. Configura autenticación JWT con appid y secret generados automáticamente
  4. Reserva una IP estática (reutiliza IPs disponibles para optimizar costos)
  5. Configura SSL con Let’s Encrypt si tienes DNS configurado
  6. Notifica cuando está listo mediante callback al servidor Moodle

Todo el proceso toma entre 5-10 minutos y es completamente automatizado.

Arquitectura de la Solución

Flujo de Aprovisionamiento

El diseño se centra en la visibilidad y la recuperación ante fallos:

1. Admin hace clic en "Crear servidor en Google Cloud"
   ↓
2. Se crea INMEDIATAMENTE un registro en jitsi_servers
   - provisioningstatus: 'provisioning'
   - provisioningtoken: token aleatorio de 64 caracteres
   - gcpinstancename, gcpproject, gcpzone
   ↓
3. Se lanza la VM en Google Cloud
   - Script de inicio instala Jitsi
   - Configura JWT automáticamente
   - Reserva IP estática
   ↓
4. La VM envía callback cuando está lista
   - Autenticación mediante provisioningtoken
   - Actualiza provisioningstatus a 'ready' o 'error'
   - Guarda appid, secret, domain
   ↓
5. Servidor listo para usar en actividades Jitsi

Una característica importante del diseño es que el registro del servidor se crea ANTES de provisionar la VM. Esto permite:

  • ✅ Servidores fallidos son visibles en la interfaz
  • ✅ Puedes ver el estado en tiempo real: ‘provisioning’, ‘ready’ o ’error’
  • ✅ Mensajes de error detallados en el campo provisioningerror
  • ✅ Limpiar VMs fallidas directamente desde Moodle sin necesidad de acceder a GCP

Esquema de Base de Datos

La tabla jitsi_servers se ha extendido para soportar GCP:

 1CREATE TABLE mdl_jitsi_servers (
 2    id BIGINT PRIMARY KEY,
 3    domain VARCHAR(255),
 4    type TINYINT,  -- 3 = GCP auto-managed
 5
 6    -- Campos GCP
 7    gcpinstancename VARCHAR(255),
 8    gcpstaticipname VARCHAR(255),
 9    gcpproject VARCHAR(255),
10    gcpzone VARCHAR(255),
11
12    -- Control de estado
13    provisioningstatus VARCHAR(50),  -- 'provisioning', 'ready', 'error'
14    provisioningtoken VARCHAR(255),  -- Para autenticación del callback
15    provisioningerror TEXT,          -- Mensajes de error
16
17    -- JWT autogenerado
18    appid VARCHAR(255),
19    secret TEXT,
20    ...
21);

Configuración Paso a Paso

1. Preparar Google Cloud Platform

Necesitarás:

  • Un proyecto de GCP activo
  • Una cuenta de servicio con los roles:
    • Compute Admin
    • Service Account User
  • El archivo JSON de credenciales de la cuenta de servicio

2. Configurar el Plugin

En Moodle, ve a Administración del sitio > Plugins > Módulos de actividad > Jitsi:

1// Configuración GCP requerida:
2GCP Project ID: tu-proyecto-123456
3GCP Zone: europe-west1-b
4GCP Machine Type: e2-medium
5Service Account JSON: [Pegar contenido del archivo JSON]

3. Crear un Servidor

  1. Ve a Gestión de servidores en la configuración del plugin
  2. Haz clic en “Crear servidor en Google Cloud”
  3. Espera 5-10 minutos
  4. El servidor aparecerá con estado ‘ready’ cuando esté listo

4. Usar el Servidor

El servidor creado estará disponible automáticamente para todas las actividades Jitsi del sitio.

Ventajas Técnicas

Seguridad

  • Autenticación JWT automática: Solo los moderadores autorizados pueden iniciar sesiones
  • Token-based callbacks: Los callbacks de la VM usan tokens únicos por servidor
  • Secrets seguros: Las claves JWT se generan automáticamente y se almacenan cifradas

Escalabilidad

  • IPs estáticas reutilizables: El plugin reutiliza IPs disponibles para reducir costos
  • Múltiples servidores: Crea tantos servidores como necesites

Monitorización

Consulta servidores por estado:

 1-- Servidores aprovisionándose
 2SELECT * FROM mdl_jitsi_servers
 3WHERE provisioningstatus = 'provisioning';
 4
 5-- Servidores con errores
 6SELECT domain, provisioningerror
 7FROM mdl_jitsi_servers
 8WHERE provisioningstatus = 'error';
 9
10-- Servidores listos
11SELECT domain, gcpinstancename, gcpzone
12FROM mdl_jitsi_servers
13WHERE provisioningstatus = 'ready' AND type = 3;

Gestión de Costos

Optimizaciones Implementadas

  1. Reutilización de IPs: El plugin detecta IPs estáticas sin usar y las reasigna
  2. Machine types flexibles: Elige el tamaño de VM según tus necesidades
  3. Cleanup automático: Al borrar un servidor, se elimina la VM de GCP y la IP se libera para reutilización futura

Estimación de Costos (Europa Oeste 1)

VM e2-medium:
- vCPUs: 2
- RAM: 4 GB
- Costo aprox: $24/mes (uso continuo)

IP estática: $3/mes

Total por servidor: ~$27/mes

Tip: Usa preemptible VMs para entornos de desarrollo y ahorra hasta un 80%.

Casos de Uso

Instituciones Educativas

  • Control total: Tu propia infraestructura, sin límites de terceros
  • Privacidad: Los datos nunca salen de tu cuenta de GCP
  • Cumplimiento GDPR: Elige regiones europeas (europe-west1, europe-west3)

Entornos Corporativos

  • Branding: Usa tu propio dominio (meet.tuempresa.com)
  • Integración: Conecta con tu infraestructura GCP existente
  • SLA: Aprovecha las garantías de uptime de Google Cloud

Desarrollo y Testing

  • Entornos efímeros: Crea y destruye servidores de prueba fácilmente
  • Testing de carga: Provisiona múltiples servidores para tests
  • CI/CD: Automatiza la creación de entornos de testing

Limitaciones Actuales (BETA)

⚠️ Esta funcionalidad está en BETA. Ten en cuenta:

  • Requiere conocimientos básicos de GCP
  • La configuración DNS debe hacerse manualmente
  • No incluye monitorización automática de recursos
  • El escalado horizontal es manual (no autoscaling)

Próximos Pasos

Estamos trabajando en:

  • Soporte de grabaciones: Preparar automáticamente los servidores GCP para soportar grabaciones de sesiones
  • Autoescalado: Crear/destruir VMs según demanda
  • Métricas integradas: Monitorización de CPU/RAM desde Moodle
  • Multi-región: Distribución geográfica de servidores

Código Abierto

Todo el código está disponible en GitHub. Las contribuciones son bienvenidas.

Archivos clave:

  • servermanagement.php - Gestión de servidores y provisioning
  • api/ - Google API Client y lógica GCP
  • db/install.xml - Esquema de base de datos

Conclusión

El aprovisionamiento automático en GCP representa un salto cualitativo en la facilidad de despliegue de infraestructura de videoconferencia para Moodle. Lo que antes requería horas de trabajo manual ahora se hace con un clic.

¿Estás listo para probarlo? Clona el repositorio, configura tu proyecto GCP y crea tu primer servidor Jitsi en minutos.

Si tienes preguntas o necesitas ayuda con la configuración, no dudes en abrir un issue en GitHub o contactarme directamente.


Recursos: