[{"data":1,"prerenderedAt":146},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-jitsi-meet-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-jitsi-meet-en-un-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":90,"ctaBody":91,"ctaButton":92,"ctaUrl":93,"relatedPosts":94},78,"alojar-jitsi-meet-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-jitsi","host-jitsi-on-your-own-vps","استضافة-jitsi-على-خادم-vps-الخاص-بك","Alojar Jitsi en su propio VPS","Despliegue Jitsi Meet en su VPS con Docker, coturn TURN server y SSL. Guía completa: config .env, solución de ICE failed, audio ausente y pantalla compartida.",8,0,false,"2026-04-03T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-jitsi-poster.svg","Jitsi Meet es una solución de videoconferencia de código abierto que funciona directamente en el navegador, sin instalación del lado del participante. Autoalojarlo en un VPS le da salas sin límite, sin límite de duración ni recopilación de datos. El despliegue es rápido — la configuración del servidor TURN (coturn), en cambio, es lo que hace fracasar la mayoría de las instalaciones: sin él, el video funciona en la red local pero se detiene en cuanto un participante está detrás de un NAT corporativo o de un operador con CGN. Esta guía cubre la instalación completa, la configuración avanzada de coturn, el monitoreo del puente de video y la solución de los errores más frecuentes.",[35,39,49,52,74,77,81,84,87],{"type":36,"title":37,"body":38},"h2","Jitsi autoalojado vs Zoom: lo que cambia de verdad","Los servicios de videoconferencia de consumo (Zoom, Google Meet, Teams) imponen límites de duración en los planes gratuitos, cuotas de participantes, y conservan sus grabaciones en sus propios servidores. Jitsi Meet, autoalojado, elimina estas restricciones: salas sin límite, duración sin límite, ninguna cuenta requerida para unirse a una reunión, flujos de video que permanecen en su infraestructura. Es especialmente pertinente para una organización preocupada por la confidencialidad de sus reuniones, para un despacho que trata datos sensibles, o para integrar la videoconferencia en una aplicación de terceros (Jitsi ofrece una **API iframe** estable). El coste de funcionamiento se reduce a la factura del VPS — ninguna suscripción por puesto, ningún sobrecoste de software.",{"type":40,"title":41,"items":42},"ul","Beneficios concretos de un Jitsi autoalojado",[43,44,45,46,47,48],"Reuniones sin límite de duración ni de número de salas — ningún temporizador que corte la reunión.","Ninguna cuenta requerida para los participantes: basta un enlace para unirse.","API iframe para integrar la videoconferencia directamente en su aplicación o en su sitio web.","Cifrado del transporte (DTLS-SRTP) y control total sobre las eventuales grabaciones.","Personalización completa de la interfaz: logotipo, colores, nombre de dominio de las salas.","Ninguna telemetría enviada a terceros — los flujos de video no salen de su VPS.",{"type":36,"title":50,"body":51},"Requisitos previos con cifras antes de empezar","Jitsi se dimensiona por el **ancho de banda**, no por la CPU. Para reuniones de hasta 10 participantes: 2 vCPU, **4 GB de RAM como mínimo**, tráfico saliente generoso (100 Mbps recomendados). Por encima de 20 participantes simultáneos, cuente con 8 GB de RAM y vigile la carga de red del JVB. Tres puertos deben ser accesibles desde internet: **TCP 443** (HTTPS y TURN\u002FTLS), **TCP 80** (renovación de Let's Encrypt), **UDP 10000** (medios JVB). Añada **TCP 3478** si expone coturn en su puerto nativo. Se necesitan Docker 24+ y Compose V2, un nombre de dominio `meet.sudominio.com` con un registro A que apunte a la IP pública del VPS, y una IP pública **dedicada y estable** — una IP compartida complica seriamente la configuración de coturn.",{"type":53,"title":54,"steps":55},"steps","Despliegue paso a paso: Docker, .env, coturn y primera prueba",[56,59,62,65,68,71],{"title":57,"body":58},"Obtener docker-jitsi-meet","Clone el repositorio oficial: `git clone https:\u002F\u002Fgithub.com\u002Fjitsi\u002Fdocker-jitsi-meet`. Copie `env.example` a `.env`, luego ejecute `.\u002Fgen-passwords.sh` — este script genera todos los secretos internos (Prosody, Jicofo, JVB). No se salte este paso: los valores por defecto no son secretos. La rama `stable-11146-2` (agosto 2026) es la última estable; evite `main` en producción — los componentes internos cambian sin previo aviso.",{"title":60,"body":61},"Configurar PUBLIC_URL y DOCKER_HOST_ADDRESS","En `.env`, dos variables son críticas: `PUBLIC_URL=https:\u002F\u002Fmeet.sudominio.com` (utilizada por el cliente web para construir las URL de las salas) y `DOCKER_HOST_ADDRESS=\u003CIP_PUBLICA_DEL_VPS>` (la dirección que el JVB anuncia a los clientes para establecer la conexión de medios directa). Sin `DOCKER_HOST_ADDRESS`, el JVB anuncia una dirección interna de Docker y ningún cliente externo puede alcanzarlo.",{"title":63,"body":64},"Activar Let's Encrypt en .env","Añada en `.env`: `ENABLE_LETSENCRYPT=1`, `LETSENCRYPT_DOMAIN=meet.sudominio.com`, `LETSENCRYPT_EMAIL=admin@sudominio.com`. Compruebe que el puerto 80 está realmente abierto antes de arrancar — Let's Encrypt utiliza un desafío HTTP-01 que requiere una respuesta en ese puerto. Para la renovación automática, el contenedor web de docker-jitsi-meet llama a certbot mediante un cron interno: verifique que el volumen `~\u002F.jitsi-meet-cfg\u002Fweb\u002Fletsencrypt` está montado y persiste entre reinicios.",{"title":66,"body":67},"Configurar coturn (servidor TURN)","Es la etapa que la mayoría de las guías pasan por alto y la que hace fracasar la instalación. En `.env`, active: `ENABLE_TURN=1`, `TURN_HOST=meet.sudominio.com`, `TURN_PORT=443`, `TURN_TRANSPORT=tls`. El puerto 443 en TLS permite atravesar los cortafuegos más restrictivos, que bloquean los puertos no estándar pero dejan pasar todo lo que se parece a HTTPS.\n\nAñada después: `TURN_CREDENTIALS=un_secreto_fuerte`, `TURN_TLS_CERT=\u002Fetc\u002Fletsencrypt\u002Flive\u002Fmeet.sudominio.com\u002Ffullchain.pem`, `TURN_TLS_KEY=\u002Fetc\u002Fletsencrypt\u002Flive\u002Fmeet.sudominio.com\u002Fprivkey.pem`. Si coturn se ejecuta en un contenedor separado, monte estos archivos como volumen.\n\nÚltimo punto que a menudo se olvida: coturn bloquea por defecto los rangos RFC1918 (192.168.x.x, 10.x.x.x, 172.16.x.x). Si su VPS tiene una interfaz de red interna en esos rangos, añada `no-multicast-peers` y compruebe que `denied-peer-ip` no incluye la dirección del JVB.",{"title":69,"body":70},"Arrancar la stack y comprobar el JVB","Ejecute `docker compose up -d`. Espere 30 segundos, luego: `docker compose logs jvb 2>&1 | grep -E 'register|connected|error'`. Debe ver una línea que indique que el JVB se ha registrado en Jicofo. Si ve `Failed to register` o `Connection refused`, Prosody aún no está listo — vuelva a lanzarlo al cabo de un minuto. Compruebe después que coturn responde: `nc -zv meet.sudominio.com 443` (TCP) y `nc -zvu meet.sudominio.com 10000` (UDP).",{"title":72,"body":73},"Primera prueba de video desde dos redes diferentes","Abra `https:\u002F\u002Fmeet.sudominio.com` desde su equipo habitual y desde un segundo dispositivo en una red diferente (un teléfono con datos móviles, por ejemplo). Si ambos participantes se ven y se oyen, el TURN funciona. Una prueba desde dos equipos en la misma red local **no valida coturn** — tiene éxito en modo punto a punto sin solicitar nunca el relé.",{"type":36,"title":75,"body":76},"Configuración avanzada: grabación, autenticación y límites","**Grabación de las reuniones.** Jitsi integra Jibri para la grabación local o el streaming RTMP. Jibri requiere un segundo VPS o, como mínimo, 4 vCPU adicionales, ya que captura el renderizado del navegador en tiempo real. Active `ENABLE_RECORDING=1` en `.env` y despliegue un contenedor Jibri separado que apunte a su Jicofo. **Autenticación de los organizadores.** Por defecto, cualquiera puede crear una sala. Active `AUTH_TYPE=internal` para exigir una cuenta del lado del organizador dejando que los invitados se unan libremente. Cree las cuentas de anfitrión con `docker exec \u003Cprosody-container> prosodyctl --config \u002Fconfig\u002Fprosody.cfg.lua register admin meet.sudominio.com contrasena`. **Limitar los participantes anónimos.** Añada `ENABLE_LOBBY=1` para que un moderador valide cada entrada antes de acceder a la sala. Combinado con `AUTH_TYPE=internal`, esto da un control completo sobre quién accede a qué.",{"type":78,"title":79,"body":80},"tip","Endurecimiento: fail2ban en el servicio TURN","coturn expone un servicio accesible desde internet. Instale fail2ban y cree un filtro sobre los intentos de autenticación TURN fallidos: los logs de coturn escriben `ERROR: 401, realm` en cada fallo. Una jail de fail2ban con `maxretry=10` y `bantime=600` basta para desalentar los escaneos automáticos sin afectar a sus usuarios legítimos. Compruebe que fail2ban vigila `\u002Fvar\u002Flog\u002Fcoturn.log` (ruta por defecto si coturn se ejecuta de forma nativa) o monte ese archivo desde el contenedor.",{"type":36,"title":82,"body":83},"Solución de problemas: los cuatro errores más frecuentes","**Sin sonido o video bloqueado en «connecting» — coturn + UDP 10000.** Es la avería más frecuente. Compruebe en este orden: (1) `ufw status` — ¿están abiertos los puertos TCP 443 y UDP 10000? (2) `docker compose logs coturn | grep -i error` — ¿arranca coturn sin error de certificado? (3) Desde una máquina externa: `curl -v telnet:\u002F\u002Fmeet.sudominio.com:3478` — ¿responde coturn? (4) En los logs del navegador (F12 → Consola): ¿ve `ICE failed` o `failed to gather candidates`? Si es así, coturn no es accesible desde el exterior. Compare `TURN_HOST` en `.env` con la IP real del VPS. **Conexión rechazada en TCP 443.** Si el certificado Let's Encrypt no pudo emitirse (puerto 80 cerrado en el primer arranque), el contenedor web intenta servir en HTTPS con un certificado autofirmado que el navegador rechaza. Solución: abra el puerto 80, elimine el volumen `~\u002F.jitsi-meet-cfg\u002Fweb` y vuelva a lanzar `docker compose up -d`. **Compartir pantalla rechazado por el navegador.** Compartir la pantalla exige un contexto seguro (HTTPS válido). Si ve `getUserMedia is not supported`, el certificado no es válido o el dominio no está en HTTPS. Compruebe `PUBLIC_URL` — debe empezar por `https:\u002F\u002F` con un dominio cuyo certificado sea válido, no una IP en bruto. **Error «ICE failed» persistente pese a un coturn operativo.** Compruebe la variable `DOCKER_HOST_ADDRESS`: debe contener la IP pública del VPS, no la IP interna del contenedor Docker (172.17.x.x). Si su VPS está detrás de un NAT cloud (raro pero existente), necesita la IP NAT externa, no la IP de la interfaz de red.",{"type":36,"title":85,"body":86},"Monitoreo: vigilar el ancho de banda y los participantes","El puente de video JVB expone una API de estadísticas en tiempo real en `http:\u002F\u002Flocalhost:8080\u002Fcolibri\u002Fstats`. Este endpoint JSON informa del número de conferencias activas, participantes, ancho de banda entrante y saliente en bits\u002Fs, y pérdida de paquetes. Para una vigilancia continua, active el soporte de Prometheus en `.env` (`JVB_ENABLE_STATS=1`, `PROSODY_ENABLE_METRICS=1`) y conecte una pila Prometheus + Grafana: hay un panel oficial de Jitsi disponible en Grafana Labs (ID 11925) que cubre CPU, memoria, ancho de banda y métricas de calidad de video.\n\nSin Prometheus, una vigilancia mínima se logra con un cron que consulta `\u002Fcolibri\u002Fstats` y alerta cuando el rendimiento supera un umbral: `docker exec jvb curl -s http:\u002F\u002Flocalhost:8080\u002Fcolibri\u002Fstats | python3 -c \"import json,sys; s=json.load(sys.stdin); print(s.get('bit_rate_download',0), s.get('bit_rate_upload',0))\"`.\n\nPara estimar la capacidad antes de la saturación: un JVB maneja cómodamente 200 a 250 participantes interactivos a calidad de video moderada en un VPS bien conectado. A partir de ahí, las métricas `packet_loss_fraction` y `rtt_aggregate` suben y la calidad percibida cae antes de que la CPU sature — esa es la señal para añadir otra instancia JVB.",{"type":36,"title":88,"body":89},"Su Jitsi está en marcha — gestione el ancho de banda","Jitsi funciona en modo SFU: el puente de video (JVB) retransmite cada flujo hacia cada participante, por lo que el ancho de banda saliente crece proporcionalmente al número de participantes multiplicado por el número de flujos. Para 10 participantes a 720p, cuente con 20 a 40 Mbps salientes en continuo. Active `lastN=5` (últimos N videos activos) para limitar los flujos del lado del cliente en las reuniones grandes, y vigile `docker stats jvb` para anticipar la saturación. Por encima de una veintena de participantes simultáneos regulares, despliegue varias instancias JVB en VPS distintos detrás de un único Jicofo: es la arquitectura de escalado horizontal nativa de Jitsi. Para despliegues multi-organización o multidominio, Jitsi admite múltiples entradas `PUBLIC_URL` mediante el mecanismo de tenant de Prosody: cada organización dispone de su propio espacio de salas aislado en la misma instalación, sin infraestructura adicional.","Lance su servidor Jitsi en un VPS Cloud ServOrbit","Un VPS Cloud con IP pública dedicada, ancho de banda generoso y acceso root le permite desplegar Jitsi Meet, coturn y Jibri sin límite de reuniones. Sus videoconferencias permanecen en su infraestructura.","Lanzar mi VPS Cloud","\u002Fvps-cloud",[95,112,128],{"id":96,"slug":97,"slugs":98,"title":102,"excerpt":103,"readTime":104,"views":18,"isPinned":19,"publishedAt":105,"updatedAt":21,"category":106,"categories":107,"featuredImage":30,"bgImage":31,"posterImage":109,"relatedSolution":110},71,"alojar-nextcloud-en-su-propio-vps",{"fr":99,"en":100,"ar":101,"es":97},"heberger-nextcloud","hosting-nextcloud-on-your-own-vps","استضافة-nextcloud-على-خادمك-الـvps-الخاص","Alojar Nextcloud en VPS: guía completa NC 34 y seguridad","Despliegue Nextcloud 34.0.2 en su VPS con Docker y Redis. Guía completa: apps ausentes en NC 34.0.0, restricción PostgreSQL oc_filecache_extended y CVE de 2FA.",11,"2026-04-10T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[108],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":111},"nextcloud",{"id":113,"slug":114,"slugs":115,"title":119,"excerpt":120,"readTime":17,"views":18,"isPinned":19,"publishedAt":121,"updatedAt":21,"category":122,"categories":123,"featuredImage":30,"bgImage":31,"posterImage":125,"relatedSolution":126},72,"alojar-ghost-en-un-vps",{"fr":116,"en":117,"ar":118,"es":114},"heberger-ghost","hosting-ghost-on-your-own-vps","استضافة-ghost-على-خادمك-الـvps-الخاص","Alojar Ghost en un VPS: guía completa 2026","Despliegue Ghost v6 en su VPS con Caddy, MySQL, Ghost CLI y Stripe Tax: instalación, reverse proxy TLS, actualización y errores de arranque frecuentes.","2026-04-09T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[124],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":25,"appSlug":127},"ghost",{"id":129,"slug":130,"slugs":131,"title":135,"excerpt":136,"readTime":137,"views":18,"isPinned":19,"publishedAt":138,"updatedAt":139,"category":140,"categories":141,"featuredImage":30,"bgImage":31,"posterImage":143,"relatedSolution":144},73,"alojar-wordpress-en-un-vps",{"fr":132,"en":133,"ar":134,"es":130},"heberger-wordpress","host-wordpress-on-your-own-vps","استضافة-wordpress-على-خادم-vps-الخاص-بك","Alojar WordPress en su propio VPS","Aloje WordPress en su VPS para un rendimiento y un control máximos: Docker, MariaDB, caché, reverse proxy y SSL.",3,"2026-04-08T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[142],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":25,"appSlug":145},"wordpress",1789664999269]