Cómo configurar un nombre de dominio personalizado para Jitsi Meet Docker

La ruta más corta para un dominio personalizado para Jitsi Meet Docker es apuntar un nombre de host DNS al host de Docker, configurarlo PUBLIC_URLcon la URL HTTPS final, configurar TLS de confianza para ese mismo nombre de host y asegurarse de que los medios WebRTC aún puedan llegar a Jitsi Videobridge. Para una instalación directa a Internet, la configuración oficial de Docker admite la automatización de certificados integrada a través de ENABLE_LETSENCRYPT, LETSENCRYPT_DOMAIN, y LETSENCRYPT_EMAIL.

Esta guía utiliza meet.example.comcomo ejemplo concreto el proyecto estándar docker-jitsi-meet y lo asume . Reemplace el nombre de host, la dirección de correo electrónico y la dirección IP (solo para documentación) del ejemplo con sus propios valores. La configuración descrita aquí se verificó con el manual oficial de Jitsi Docker y el proyecto actual env.exampleel 7 de octubre de 2026.

Lo que necesitas antes de cambiar el dominio

Un dominio personalizado funciona mejor cuando el nombre de host se decide antes de solicitar el certificado. Por ejemplo, si los usuarios deben abrir https://meet.example.com, el DNS, PUBLIC_URLy el certificado TLS deben usar meet.example.com. Mezclar jitsi.example.comen un lugar y meet.example.comen otro es una causa común de advertencias de certificado o redirecciones al host incorrecto.

  • Un dominio que usted controla.
  • Un servidor con Docker Engine y Docker Compose.
  • Una dirección IP pública o un proxy inverso que ya posea los puertos 80 y 443.
  • Acceso al firewall para los puertos web y el tráfico multimedia de Jitsi.
  • El docker-jitsi-meetdirectorio existente y su .envarchivo.

El manual oficial de Jitsi Docker indica que PUBLIC_URLdebe configurarse con el dominio real para una implementación en producción. También documenta los puertos 80/TCP, 443/TCP y 10000/UDP como los puertos externos principales para la configuración directa estándar. Consulte la guía de autoalojamiento de Jitsi Docker .

Paso 1: Apunte el nombre de host personalizado al servidor Jitsi.

Cree un registro A para el nombre de host que desea utilizar. En este ejemplo, meet.example.comapunta a la dirección IPv4 pública del servidor. Si su servidor tiene conectividad IPv6 estable, también puede agregar un registro AAAA que apunte a su dirección IPv6 pública.

Type: A
Name: meet
Value: YOUR_PUBLIC_IPV4
TTL: 300

No copie 203.0.113.10la ilustración en una implementación real; esa dirección está reservada para documentación. Si utiliza un proveedor de DNS con modo proxy/CDN, comience con la resolución DNS estándar, a menos que haya confirmado que el proxy admite el patrón de tráfico de Jitsi que pretende utilizar.

Pantalla de administración de DNS con un registro A para meet.example.com que apunta a una dirección IP del servidor.
Ejemplo de configuración DNS para el subdominio meet. Reemplace la dirección mostrada con la IP pública real de su host Jitsi.

Paso 2: Establezca los valores de PUBLIC_URL y HTTPS en .env

Abra el .envarchivo en el directorio donde lo clonó o extrajo docker-jitsi-meet. Para una implementación directa donde el contenedor web de Jitsi escuchará públicamente en los puertos 80 y 443, las configuraciones importantes son:

PUBLIC_URL=https://meet.example.com
HTTP_PORT=80
HTTPS_PORT=443
ENABLE_HTTP_REDIRECT=1
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.example.com
LETSENCRYPT_EMAIL=admin@example.com
LETSENCRYPT_ACME_SERVER=letsencrypt

PUBLIC_URLNo es solo cosmético. Jitsi lo usa al crear una configuración efectiva, por lo que dejarlo en localhost o en un nombre de host antiguo puede producir enlaces rotos y un comportamiento inconsistente. El ejemplo de proyecto actual también señala que si usa deliberadamente un puerto HTTPS no estándar, ese puerto pertenece a PUBLIC_URL.

Actualmente, la muestra oficial identifica a ZeroSSL como el servidor ACME predeterminado y permite usar LETSENCRYPT_ACME_SERVER="letsencrypt"Let's Encrypt cuando se desea específicamente. Si su instalación actual ya obtiene un certificado de confianza correctamente, mantenga la configuración de ACME que coincida con su entorno de trabajo en lugar de cambiar de proveedor sin motivo.

Editor de terminal que muestra las variables PUBLIC_URL, HTTP_PORT, HTTPS_PORT y Let's Encrypt para meet.example.com
Los valores clave del archivo .env deben usar el mismo nombre de host público que los usuarios escribirán en sus navegadores.

Paso 3: Abra los puertos del firewall necesarios.

Para la implementación de Docker con acceso directo a Internet descrita anteriormente, permita los puertos 80/TCP, 443/TCP y 10000/UDP. Mantenga también abierto el puerto de administración SSH. En un host Ubuntu que utilice UFW, un ejemplo mínimo es:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw status verbose

Los puertos web sirven para el sitio y el desafío de certificados. El puerto multimedia predeterminado de Jitsi Videobridge es UDP 10000. Una página puede cargarse perfectamente, pero las reuniones pueden fallar o perder audio/video si el puerto multimedia está bloqueado, por lo que verificar solo HTTPS no es suficiente.

Si su host está detrás de NAT, revise también JVB_ADVERTISE_IPS. El manual oficial explica que esta variable controla la dirección que Jitsi Videobridge anuncia para los medios y es necesaria en muchas implementaciones de LAN o NAT. Un ejemplo típico de Internet pública es:

JVB_ADVERTISE_IPS=YOUR_PUBLIC_IPV4
Terminal que muestra las reglas de UFW que permiten los puertos TCP 80 y 443 y el puerto UDP 10000.
La verificación del firewall debe incluir el puerto multimedia UDP de Jitsi Videobridge, no solo los puertos del sitio web.

Paso 4: Reinicie la pila de Docker con el nuevo dominio.

Guarda .envlos archivos y vuelve a crear los contenedores para que se apliquen los cambios del entorno:

docker compose down
docker compose up -d
docker compose ps

Una solución simple restartno es la mejor opción después de cambiar las variables de entorno, ya que la definición del contenedor existente aún puede contener el entorno anterior. Recrear la pila hace que los nuevos PUBLIC_URLvalores de puerto y la configuración del certificado sean explícitos.

Si parte de una copia nueva del proyecto, siga primero los pasos de inicio rápido oficiales, incluida la generación de las contraseñas necesarias y la creación de los directorios de configuración. Las versiones recientes de contenedores Jitsi ejecutan los servicios como un usuario sin privilegios y requieren almacenamiento con permisos de escritura y directorios temporales, por lo que una instalación completamente nueva debe seguir los comandos de directorio del manual actual en lugar de un tutorial antiguo de terceros.

Terminal Docker Compose que muestra los contenedores Jitsi web, Prosody, Jicofo y JVB iniciados.
Tras modificar el archivo .env, vuelva a crear la pila y confirme que los contenedores principales de Jitsi se están ejecutando.

Paso 5: Confirme el DNS y HTTPS desde fuera del servidor.

Una vez que el DNS se haya propagado, compruebe que el nombre de host se resuelva a la dirección pública esperada:

dig +short meet.example.com

A continuación, pruebe el punto final HTTPS:

curl -I https://meet.example.com

Una respuesta exitosa demuestra que DNS, TCP 443 y el servicio web funcionan correctamente. Sin embargo, esto no demuestra que la comunicación multipartita funcione, por lo que se trata de una verificación intermedia y no de la meta final.

Si digdevuelve una dirección antigua, espere a que finalice el TTL de DNS o corrija el registro. Si DNS es correcto pero curlse agota el tiempo de espera, revise los grupos de seguridad en la nube, el firewall del host, las reglas del enrutador/NAT y compruebe si otro servicio ya está utilizando el puerto 443.

Terminal ejecutando dig para meet.example.com y curl -I contra su URL HTTPS con una respuesta 200
La resolución DNS y una solicitud de encabezado HTTPS exitosa proporcionan una primera verificación rápida del nombre de host personalizado.

Paso 6: Comprobar la emisión del certificado y los registros web.

Si el navegador sigue mostrando una advertencia de certificado, inspeccione los registros del contenedor web en lugar de eliminar repetidamente la configuración y solicitar otro certificado:

docker compose logs --tail=200 web

Busque errores de validación ACME, fallos de enlace de puerto o discrepancias en el nombre de host. El manual de Jitsi advierte sobre los límites de velocidad de la autoridad de certificación y recomienda conservar el almacenamiento de configuración que contiene los certificados emitidos. Durante las pruebas de configuración repetidas, el entorno de pruebas puede ser útil, pero después de dejar de usarlo, el manual indica que es posible que sea necesario eliminar el material de certificados antiguo del almacenamiento web antes de solicitar un certificado de producción.

Si ya dispone de un certificado de confianza de otra fuente, Jitsi también permite montar una cadena completa y una clave privada existentes en el servicio web, en lugar de habilitar el flujo ACME integrado. Siga el ejemplo de montaje de certificados en la sección oficial de certificados existentes .

Registros web de Docker Compose que muestran una solicitud de certificado y mensajes de inicio de nginx para meet.example.com.
Utilice los registros del contenedor web para diagnosticar problemas de certificado o de inicio de nginx en lugar de solicitar repetidamente nuevos certificados.

Paso 7: Abra el dominio personalizado en un navegador.

Acceda https://meet.example.coma la página desde un navegador moderno. Debería ver la página de inicio de Jitsi bajo el nombre de host que haya seleccionado, con un indicador TLS válido. Cree una sala de prueba con un nombre provisional.

Utilice HTTPS para reuniones reales. La guía oficial de Docker advierte específicamente que el acceso HTTP directo puede provocar fallos en las API WebRTC del navegador, como el acceso al micrófono y la cámara. Por lo tanto, HTTPS forma parte de la configuración funcional, no es simplemente una medida de seguridad.

El navegador muestra una página de inicio de Jitsi Meet en https://meet.example.com con un campo de nombre de reunión.
La página de destino debe cargarse desde el nombre de host HTTPS final antes de que comiences las pruebas multimedia.

Paso 8: Pruebe una llamada real, no solo la página de inicio.

Conéctese a la misma sala desde dos dispositivos o redes diferentes, si es posible. Confirme que cada participante pueda enviar y recibir audio y video. Es importante realizar una prueba con dos navegadores, ya que una instalación puede mostrar el sitio web correctamente aunque la dirección de Videobridge o la ruta UDP sean incorrectas.

En instalaciones con NAT, un síntoma común es que la primera conexión parece normal, pero la transmisión multimedia falla a medida que se unen más participantes. En ese caso, revise JVB_ADVERTISE_IPSla configuración de NAT pública y el puerto UDP 10000. El manual de Jitsi indica explícitamente que la dirección multimedia de Videobridge sigue siendo relevante incluso cuando el tráfico HTTP es gestionado por un proxy inverso.

Llamada desde el navegador Jitsi Meet en meet.example.com que muestra dos participantes y los controles de la reunión.
Una llamada exitosa entre dos participantes es una prueba integral mejor que simplemente confirmar que la página de inicio de Jitsi se carga correctamente.

Cuándo deberías usar un proxy inverso en su lugar

La configuración directa descrita anteriormente es apropiada cuando el contenedor web de Jitsi puede gestionar los puertos públicos 80 y 443. Si el mismo servidor ya ejecuta Nginx, Apache, Caddy, Traefik u otro proxy en esos puertos, no intente vincular Jitsi a ellos simultáneamente.

Para un proxy inverso en el mismo host, la guía oficial de Jitsi Docker recomienda deshabilitar HTTPS dentro del contenedor de Jitsi, evitar la exposición pública de sus puertos web internos y reenviar las solicitudes al ingress HTTP del contenedor. El proxy también debe admitir el reenvío de WebSocket para /xmpp-websocket. Un entorno típico del lado de Jitsi es:

DISABLE_HTTPS=1
ENABLE_HTTP_REDIRECT=0
ENABLE_LETSENCRYPT=0
PUBLIC_URL=https://meet.example.com

Luego, finalice el certificado de confianza en su proxy inverso. Esto es más adecuado cuando un proxy administra certificados para varias aplicaciones. No es motivo para cambiar la URL visible externamente PUBLIC_URL; los usuarios deberían seguir viendo el dominio HTTPS final.

Solución de problemas de dominios personalizados

El dominio antiguo sigue apareciendo después de editar .env.

Recrea los contenedores con docker compose downseguido de docker compose up -d. Además, verifica que hayas editado el .envarchivo utilizado por el proyecto Compose que estás iniciando.

La validación del certificado HTTPS falla.

Confirme que los registros DNS A/AAAA apuntan al servidor que recibe el desafío y que el puerto público 80 es accesible al usar el flujo de certificado directo integrado. Verifique docker compose logs webel error ACME exacto antes de realizar otra solicitud.

La página se carga, pero los participantes no tienen audio ni vídeo.

Verifique UDP 10000 y, para implementaciones NAT, configure correctamente JVB_ADVERTISE_IPS. Recuerde que el proxy inverso gestiona el tráfico web; no reemplaza la ruta de medios de Videobridge.

El navegador funciona, pero la aplicación móvil rechaza el servidor.

Verifique la cadena de certificados. El manual de Jitsi Docker indica que las aplicaciones móviles no funcionan con el certificado autofirmado predeterminado. Utilice un certificado de confianza pública o un diseño de infraestructura donde la aplicación reciba una cadena de certificados de confianza.

Lista de verificación final

  • meet.example.comSe resuelve en el discurso público previsto.
  • PUBLIC_URL=https://meet.example.comcoincide exactamente con la URL del navegador.
  • El certificado TLS es de confianza y cubre meet.example.com.
  • Los puertos 80/TCP y 443/TCP son accesibles para la configuración directa.
  • El protocolo UDP 10000 llega al host de Jitsi Videobridge.
  • JVB_ADVERTISE_IPSEs correcto cuando el servidor está detrás de NAT o necesita direcciones anunciadas explícitamente.
  • docker compose psmuestra los contenedores necesarios en ejecución.
  • Una prueba con dos participantes envía audio y vídeo correctamente.

Una vez superadas esas comprobaciones, el dominio personalizado no solo apunta a Jitsi, sino que también está configurado para los aspectos que realmente importan en una reunión real: HTTPS, señalización y transporte de medios.

Referencias oficiales

Dejar un comentario

Cómo configurar un nombre de dominio personalizado para Jitsi Meet Docker

Cómo configurar un nombre de dominio personalizado para Jitsi Meet Docker

Configure un dominio personalizado para Jitsi Meet Docker con DNS, PUBLIC_URL, HTTPS, Let's Encrypt, puertos de firewall, configuración NAT y verificación de extremo a extremo.

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 errors after SSL renewal by checking the correct URL and port, proxy routing, service status, deployed certificates, and logs.

Solucionar la advertencia de Nextcloud "PHP OPcache no está configurado correctamente"

Solucionar la advertencia de Nextcloud "PHP OPcache no está configurado correctamente"

Aprende a diagnosticar y solucionar la advertencia de configuración de PHP OPcache de Nextcloud revisando la API PHP activa, los límites de tamaño, los comentarios y la configuración de revalidación.

Solucionar errores de migración de la base de datos Kopano después de una actualización de la versión de MySQL

Solucionar errores de migración de la base de datos Kopano después de una actualización de la versión de MySQL

Solucione los problemas de migración de la base de datos de Kopano después de una actualización de MySQL o MariaDB revisando las copias de seguridad, las versiones del servidor, los modos SQL, el conjunto de caracteres, el estado del esquema y los registros.

Cómo configurar la autenticación LDAP y Active Directory en Nextcloud

Cómo configurar la autenticación LDAP y Active Directory en Nextcloud

Conecte Nextcloud a LDAP o Active Directory con transporte seguro, filtros de usuarios y grupos, atributos de inicio de sesión y una implementación probada.

Fix Element Android Notifications Without Google Services: UnifiedPush Guide

Fix Element Android Notifications Without Google Services: UnifiedPush Guide

Fix Element Android notifications on de-Googled phones by configuring UnifiedPush, Android permissions, battery settings, and reliable verification tests.

Solucionar la advertencia de Nextcloud "Faltan algunos índices en la base de datos"

Solucionar la advertencia de Nextcloud "Faltan algunos índices en la base de datos"

Solucione la advertencia de Nextcloud sobre índices de base de datos faltantes con el comando oficial occ. Primero, haga una copia de seguridad, previsualice los cambios, ejecute la reparación y verifique el resultado.

Cómo configurar el inicio de sesión único (SSO) con Keycloak en Element Web

Cómo configurar el inicio de sesión único (SSO) con Keycloak en Element Web

Configure el inicio de sesión único (SSO) de Keycloak para Element Web conectando OIDC a Synapse, estableciendo la URL de devolución de llamada exacta, asignando las reclamaciones de usuario y probando el cierre de sesión.

Solucionar el error de arranque de Zimbra "El servidor LDAP no responde": una guía práctica de recuperación.

Solucionar el error de arranque de Zimbra "El servidor LDAP no responde": una guía práctica de recuperación.

Aprenda a diagnosticar y solucionar los fallos de inicio de Zimbra causados ​​por un servidor LDAP que no responde, incluyendo comprobaciones de servicio, DNS, puertos, certificados, URL de LDAP y validación de recuperación.

Cómo configurar el almacenamiento de objetos S3 para ownCloud Infinite Scale

Cómo configurar el almacenamiento de objetos S3 para ownCloud Infinite Scale

Configure el almacenamiento de objetos compatible con S3 para ownCloud Infinite Scale utilizando el controlador s3ng, los metadatos POSIX, la política de buckets, la validación y las comprobaciones de seguridad para la producción.