[{"data":1,"prerenderedAt":151},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-jitsi-meet-en-un-vps-ma-es":6,"promo-bar-likely":150},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-jitsi-meet-en-un-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":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.",11,3,false,"2026-04-03T00:00:00+00:00","2026-11-08T01:13:14+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. La documentación de Jitsi recomienda **8 GB de RAM** (4 GB bastan para reuniones pequeñas), unos 4 núcleos dedicados para un servidor básico y, sobre todo, un enlace de red fiable: un flujo 720p consume unos 2,5 Mbit\u002Fs, y un enlace de 100 Mbit\u002Fs no sostiene a una veintena de participantes en alta definición. Vigile la carga de red del JVB. Tres puertos deben ser accesibles desde internet: **TCP 443** (HTTPS), **TCP 80** (desafío de Let's Encrypt y redirección a HTTPS), **UDP 10000** (medios JVB). El puerto TCP 4443, citado por guías antiguas, ya no figura en la lista oficial. Si coturn se ejecuta en el mismo VPS, añada sus puertos: **3478** en UDP y TCP, **5349** en TLS (el 443 ya lo ocupa el contenedor web). Se necesita Docker con Compose V2 (comando `docker compose`), 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","Descargue la última release desde la página de releases de `github.com\u002Fjitsi\u002Fdocker-jitsi-meet` y descomprímala: la guía oficial desaconseja clonar el repositorio, cuya rama principal usa las imágenes `unstable`. Cree las carpetas de configuración que indica la guía (`~\u002F.jitsi-meet-cfg\u002F…`, incluidas `storage` y `tmp`, con escritura para el uid 1000): los contenedores se ejecutan sin root y, si no, se niegan a arrancar. 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 release `stable-11248-3` (noviembre 2026) es la última estable; evite `master` y las imágenes `unstable` en producción — los componentes internos cambian sin previo aviso.",{"title":60,"body":61},"Configurar PUBLIC_URL, los puertos y JVB_ADVERTISE_IPS","En `.env`, fije primero `HTTP_PORT=80` y `HTTPS_PORT=443` (8000 y 8443 por defecto). Después, 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 `JVB_ADVERTISE_IPS=\u003CIP_PUBLICA_DEL_VPS>` (la dirección que el JVB anuncia a los clientes para establecer la conexión de medios directa; sustituye a la antigua `DOCKER_HOST_ADDRESS`). Sin `JVB_ADVERTISE_IPS`, el JVB intenta descubrir su IP pública por STUN; si la dirección anunciada es errónea, las llamadas fallan en cuanto se unen más de dos participantes.",{"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. El contenedor web obtiene y renueva el certificado con acme.sh (servicio de renovación interno) y lo guarda en `~\u002F.jitsi-meet-cfg\u002Fstorage\u002Fweb`: conserve esa carpeta entre reinicios. Añada también `LETSENCRYPT_ACME_SERVER=letsencrypt`: sin ella, acme.sh usa ZeroSSL por defecto.",{"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. docker-jitsi-meet no incluye coturn: instálelo aparte (paquete o contenedor) y declárelo en `.env` para que Prosody entregue a los clientes credenciales temporales: `TURNS_HOST=turn.sudominio.com` y `TURNS_PORT` para TLS, y además `TURN_HOST=turn.sudominio.com`, `TURN_PORT=3478` y `TURN_TRANSPORT=udp,tcp`. 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; exige una IP que el contenedor web no ocupe ya, si no, mantenga 5349.\n\nGenere después un secreto compartido (`openssl rand -hex 32`) y colóquelo en `TURN_CREDENTIALS` en `.env` y en coturn (`use-auth-secret` y `static-auth-secret=\u003Cel mismo secreto>`); nunca `no-auth`, que convertiría su servidor en un relé abierto a cualquiera. El certificado TLS se declara en la configuración de coturn (`cert=` y `pkey=`), no en `.env`. Si coturn se ejecuta en un contenedor separado, monte estos archivos como volumen.\n\nÚltimo punto que a menudo se olvida: coturn no bloquea por defecto los rangos RFC1918 (192.168.x.x, 10.x.x.x, 172.16.x.x): solo rechaza el loopback. Un cliente autenticado puede, por tanto, retransmitir tráfico hacia su red interna. Añada `no-multicast-peers` y líneas `denied-peer-ip` para esos rangos y, si el JVB tiene una dirección interna, autorice solo esa con `allowed-peer-ip`.",{"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 los puertos responden: `nc -zv meet.sudominio.com 443` (web, TCP), `nc -zv turn.sudominio.com 3478` (coturn, TCP) y `nc -zvu meet.sudominio.com 10000` (JVB, UDP; un éxito en UDP solo es orientativo).",{"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 captura el renderizado de un navegador en tiempo real: una instancia solo graba una reunión a la vez, y la documentación de Jitsi pide al menos 8 GB de RAM por instancia en 720p, preferiblemente en un servidor separado. Active `ENABLE_RECORDING=1` en `.env` y arranque el contenedor Jibri incluido: `docker compose -f docker-compose.yml -f jibri.yml up -d`. **Autenticación de los organizadores.** Por defecto, cualquiera puede crear una sala: una instancia pública así configurada se convierte en videoconferencia gratuita para desconocidos, con su ancho de banda. Active `ENABLE_AUTH=1`, `AUTH_TYPE=internal` y `ENABLE_GUESTS=1` para exigir una cuenta del lado del organizador dejando que los invitados se unan libremente. Cree las cuentas de anfitrión con `docker compose exec prosody prosodyctl --config \u002Frun\u002Fprosody\u002Fconfig\u002Fprosody.cfg.lua register admin meet.jitsi \u003Ccontrasena>`: `meet.jitsi` es el dominio XMPP interno, no su nombre público, y la contraseña se genera (`openssl rand -base64 18`) en lugar de reutilizarse. **Limitar los participantes anónimos.** `ENABLE_LOBBY=1` habilita la sala de espera: una vez que el moderador la activa, cada entrada debe validarse antes de acceder a la sala. Combinado con `ENABLE_AUTH=1`, 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 fallos aparecen en el registro de coturn con un código 401; compruebe el formato exacto de su versión antes de escribir la regex del filtro. Una jail de fail2ban con `maxretry=10` y `bantime=600` basta para desalentar los escaneos automáticos sin afectar a sus usuarios legítimos. Fije el registro con `log-file=\u002Fvar\u002Flog\u002Fturnserver.log` en la configuración de coturn (sin esta opción, coturn elige por sí mismo un archivo en \u002Fvar\u002Flog, \u002Fvar\u002Ftmp o \u002Ftmp), haga que fail2ban vigile esa ruta, 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) los registros de coturn (`journalctl -u coturn` en nativo, `docker logs \u003Ccontenedor-coturn>` si no) — ¿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. Compruebe que `TURN_HOST` y `TURNS_HOST` en `.env` resuelven a la IP real del servidor coturn. **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 se detiene tras el mensaje `Failed to obtain a certificate from the Let's Encrypt CA` y ya nada responde en el 443. Solución: abra el puerto 80, compruebe `HTTP_PORT=80` y vuelva a lanzar `docker compose up -d`; no hace falta borrar la configuración, y cada nuevo intento cuenta en los límites de Let's Encrypt. **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 `JVB_ADVERTISE_IPS` (antes `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 kbit\u002Fs, y el RTT medio (`rtt_aggregate`). El puerto 8080 solo se publica en `127.0.0.1`: manténgalo así. Para una vigilancia continua, el JVB ya expone sus métricas en formato Prometheus en `\u002Fmetrics` (mismo puerto privado); del lado de Prosody, active `PROSODY_ENABLE_METRICS=1` en `.env`. Conecte después una pila Prometheus + Grafana: el repositorio incluye `prometheus.yml` y `grafana.yml`, que publican los puertos 9090 y 3000 en todas las interfaces. Limítelos a `127.0.0.1` o a una VPN, porque los puertos publicados por Docker eluden las reglas de ufw.\n\nSin Prometheus, una vigilancia mínima se logra con un cron que consulta `\u002Fcolibri\u002Fstats` y alerta cuando el rendimiento supera un umbral: `curl -s http:\u002F\u002F127.0.0.1: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: la capacidad de un JVB depende ante todo del enlace de red y de las resoluciones enviadas; mídala con su propia carga en lugar de fiarse de una cifra genérica. Cuando el límite se acerca, `rtt_aggregate` sube 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. Un flujo 720p pesa unos 2,5 Mbit\u002Fs según la documentación de Jitsi: multiplique por el número de flujos realmente enviados a cada participante para estimar el caudal saliente. Fije `channelLastN: 5` en `custom-config.js` (carpeta `web` de la configuración) para recibir solo los N últimos 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, tenga en cuenta que una instalación docker-jitsi-meet solo tiene una `PUBLIC_URL`: si cada organización necesita sus propias cuentas y un espacio de salas aislado, prevea una instancia por organización, en su propio subdominio.","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,114,132],{"id":96,"slug":97,"slugs":98,"title":102,"excerpt":103,"readTime":104,"views":105,"isPinned":19,"noindex":19,"publishedAt":106,"updatedAt":107,"category":108,"categories":109,"featuredImage":30,"bgImage":31,"posterImage":111,"relatedSolution":112},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 NC 35, PHP 8.3 y MariaDB 11","Aloje Nextcloud en un VPS: Docker Compose, Redis, copia MariaDB, subidas de más de 40 GB tras Cloudflare y una alternativa a Office 2021.",20,1,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[110],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":113},"nextcloud",{"id":115,"slug":116,"slugs":117,"title":121,"excerpt":122,"readTime":123,"views":105,"isPinned":19,"noindex":19,"publishedAt":124,"updatedAt":125,"category":126,"categories":127,"featuredImage":30,"bgImage":31,"posterImage":129,"relatedSolution":130},72,"alojar-ghost-en-un-vps",{"fr":118,"en":119,"ar":120,"es":116},"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.",10,"2026-04-09T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[128],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":25,"appSlug":131},"ghost",{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":23,"views":141,"isPinned":19,"noindex":19,"publishedAt":142,"updatedAt":143,"category":144,"categories":145,"featuredImage":30,"bgImage":31,"posterImage":147,"relatedSolution":148},73,"alojar-wordpress-en-un-vps",{"fr":136,"en":137,"ar":138,"es":134},"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.",0,"2026-04-08T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[146],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":25,"appSlug":149},"wordpress",true,1794270532794]