Si usted no piensa acceder a su servidor fuera de su red local, puede omitir esta sección.
Configuraremos el stack de Docker de tráfico público; configuraremos el cortafuegos para permitir los puertos necesarios; y levantaremos el stack a través de Portainer; haremos Port Forwarding de los puertos HTTP y HTTPS para Nginx; configuraremos Nginx para redireccionar el trafico a los contenedores; y permitiremos a Nginx actuar como proxy de Home Assistant. El stack consiste de los siguientes contenedores:
- Nginx Proxy Manager: Motor y administrador de Reverse Proxy.
- Ejecutar:
./scripts/create_nginx_folder.sh
para generar el directorio del contenedor en el SSD. - Editar el archivo del stack:
nano ./files/public-traffic-stack.yml
. - Reemplazar
TZ=America/New_York
por el huso horario de su sistema. Puede usar esta lista como referencia: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. - Copiar todo el contenido del archivo al portapapeles. Guardar y salir con
Ctrl + X, Y, Enter
. - Ejecutar:
./scripts/public_traffic_firewalld_services.sh
. Configura Firewalld para los contenedores. El script abre los puertos HTTP y HTTPS para Nginx. - Agregar stack en Portainer desde el navegador.
- Acceder a Portainer a través de https://192.168.1.253:9443. Si sale una alerta de seguridad, puede aceptar el riesgo ya que Portainer usa un certificado de SSL autofirmado.
- Darle clic en "Get Started" y luego seleccionar "local".
- Seleccionar "Stacks" y crear un nuevo stack.
- Ponerle nombre "public-traffic" y pegar el contenido del public-traffic-stack.yml que copió al portapapeles y crear el stack. Desde ahora modificaciones al stack se deben de hacer a través de Portainer y no en el archivo.
- Configurar el router. Cada router es diferente, así que tendrá que consultar su manual para poder hacer los pasos siguientes.
- Redireccionar el puerto (Port Forwarding) 80 y 443 en protocolo TCP al servidor para que Nginx pueda hacer reverse proxy a los servicios internos.
- Configurar proxy hosts en Nginx usando el DDNS.
- Acceder a Nginx a través de http://server.lan:8181.
- Usar
[email protected]
ychangeme
como usuario y contraseña y modificar los detalles y contraseña por una segura. Se recomienda nuevamente el uso de Bitwarden para lo mismo. - Navegar a la pestaña de
SSL Certificates
. - Presionar
Add SSL Certificate
. SeleccionarLet's Encrypt
como proveedor de certificados.- Configurar un certificado SSL de "dominio comodín" con Let's Encrypt. Por ejemplo
*.micasa.duckdns.org
(note el*
al principio del dominio). - Es necesario habilitar
Usar DNS Challenge
. - Seleccionar DuckDNS como proveedor DNS.
- Reemplazar
your-duckdns-token
por el token que generó en DuckDNS.org - Aceptar los términos del servicio y guardar.
- Configurar un certificado SSL de "dominio comodín" con Let's Encrypt. Por ejemplo
- Navegar a la pestaña de "Proxy Hosts" y configurar un proxy host para Jellyfin.
- En la pestaña de
Details
llenar:- "Domain Names": jellyfin.micasa.duckdns.org.
- "Scheme": http.
- "Forward Hostname/IP": jellyfin. Podemos usar el nombre del contenedor gracias a que Docker tiene un DNS interno que mapea el nombre del contenedor al IP interno de Docker.
- "Forward Port": 8096. Usar el puerto interno del contenedor, no el puerto del servidor al que fue mapeado. Revise el puerto de cada contenedor en el stack de Portainer.
- "BlockCommonExploits": activado.
- "Websockets Support": activado. Jellyfin y Home Assistant lo necesitan, los demás servicios no parecen necesitarlo. Si nota algún problema con algún servicio cuando lo accede a través de Nginx (y no desde el puerto directo), pruebe habilitar esta opción.
- En la pestaña de
SSL
llenar:- "SSL Certificate": *.micasa.duckdns.org. Usamos el certificado creado en el paso 4.
- "Force SSL": activado.
- "HTTP/2 Support": activado.
- "HSTS Enabled": activado.
- "HSTS Subdomains": activado.
- En la pestaña de
Avanzado
llenar (Nota: esto es solo necesario para Jellyfin, los otros servicios no requieren nada en la pestañaAvanzado
):# Disable buffering when the nginx proxy gets very resource heavy upon streaming proxy_buffering off; # Proxy main Jellyfin traffic proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_headers_hash_max_size 2048; proxy_headers_hash_bucket_size 128; # Security / XSS Mitigation Headers # NOTE: X-Frame-Options may cause issues with the webOS app add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "0"; add_header X-Content-Type-Options "nosniff";
- Repetir este paso para Bazarr, Home Assistant, Jellyseerr, Prowlarr, Radarr, Sonarr y qBittorrent. No exponga Portainer ni Cockpit con Nginx!
- En la pestaña de
- Configurar Home Assistant para permitir tráfico redireccionado por el Reverse Proxy de Nginx.
- Editar la configuración de Home Assistant:
nano /Apps/homeassistant/configuration.yaml
. - Agregar la siguiente sección al final del archivo. Permitimos proxies de la red
172.21.3.0/24
que es la red denginx
que configuramos en el stack en Portainer.http: use_x_forwarded_for: true trusted_proxies: - 172.21.3.0/24
- Guardar y salir con
Ctrl + X, Y, Enter
.
- Editar la configuración de Home Assistant:
- Recargar la configuración de Home Assistant desde el UI para que surtan efecto los cambios.
- Acceder a Home Assistant a través de http://homeassistant.lan:8123.
- Navegar a
Developer tools
. - Presionar
Restart
.
- Puede probar que Nginx funciona accediendo a un servicio a través del URL con su subdominio. Por ejemplo https://jellyfin.micasa.duckdns.org. Inténtelo desde adentro de su red local para probar el "split horizon DNS" y desde afuera para probar el DDNS.