Saltar a contenido

Nginx Proxy Manager

Reverse proxy de todos los servicios. Es la pieza clave para la migración del routing.

Ficha

Campo Valor
Host lebron (192.168.1.2)
Stack (Portainer) network
Imagen jc21/nginx-proxy-manager:2.15.1
Puertos 80 (HTTP), 443 (HTTPS), 81 (UI admin)
Volúmenes /opt/hass/nginx-proxy-manager/data → /data, /opt/hass/nginx-proxy-manager/letsencrypt → /etc/letsencrypt
URL https://nginx.gorkarevilla.com

Cómo entra el tráfico

El tráfico HTTPS entra por el túnel Cloudflare Lebron y NPM hace de reverse proxy:

flowchart TD
    subgraph EXT["Internet"]
        U["Cliente (navegador / app)"]
    end

    subgraph CF["Cloudflare"]
        DNS["DNS gorkarevilla.com<br/>CNAME → aab5e1dd-….cfargotunnel.com"]
        EDGE["Edge (anycast)<br/>termina TLS<br/>cert Universal *.gorkarevilla.com<br/>SSL mode = strict"]
        TUN["Tunnel 'Lebron'<br/>aab5e1dd-5c98-…"]
    end

    subgraph LAN["Casa · doble NAT · sin puertos entrantes"]
        LB["lebron 192.168.1.2<br/>cloudflared + NPM (80/443)"]
        SVC["Servicios backend<br/>Home Assistant · Grafana · NAS · …"]
    end

    U -->|"1 · HTTPS 443"| EDGE
    DNS -. resuelve .-> EDGE
    EDGE -->|"2 · túnel outbound (QUIC/mTLS, lo abre cloudflared)"| TUN
    TUN -->|"3 · HTTP local (plano)"| LB
    LB -->|"4 · NPM reverse proxy"| SVC

Tramo a tramo: el TLS termina en el edge de Cloudflare; cloudflared (en lebron) abre la conexión saliente; el túnel reenvía por HTTP plano a NPM (http://192.168.1.2); y NPM enruta por hostname al contenedor/VM de destino. Ver Cloudflare para el detalle de túneles.

Certificados

Certificado Dominios Emisor
npm-22 *.gorkarevilla.com Cloudflare Origin CA
npm-21 *.mirenygorka.com Cloudflare Origin CA

npm-20 (*.gorkarevilla.com) está registrado pero ya no se usa.

Mapeos (proxy hosts)

Dominio Destino Puerto Notas
nginx.gorkarevilla.com 192.168.1.2 81 UI de NPM
homeassistant.gorkarevilla.com 192.168.1.2 8123 Home Assistant
portainer.gorkarevilla.com 192.168.1.2 9443 https
pihole.gorkarevilla.com 192.168.1.2 8888 rewrite ^/$ /admin
duplicati.gorkarevilla.com 192.168.1.2 8200
grafana.gorkarevilla.com 192.168.1.2 3000 http2
influxdb.gorkarevilla.com 192.168.1.2 8086
heimdall.gorkarevilla.com 192.168.1.2 1080
zigbee2mqtt.gorkarevilla.com 192.168.1.2 8088
esphome.gorkarevilla.com 192.168.1.2 6052
uptime.gorkarevilla.com 192.168.1.2 3001
kavita.gorkarevilla.com 192.168.1.2 5001
audiobookshelf.gorkarevilla.com 192.168.1.2 13378
shlink.gorkarevilla.com 192.168.1.2 8094 basic auth
shlinkbe.gorkarevilla.com 192.168.1.2 8093
grocy.gorkarevilla.com 192.168.1.2 9283
ai.gorkarevilla.com 192.168.1.2 3030 Open WebUI
n8n.gorkarevilla.com 192.168.1.2 5678
frigate.gorkarevilla.com 192.168.1.2 8971 https, solo listener 80
~~gorkarevilla.com / www~~ 192.168.1.4 8000 ~~steph~~ → Vercel
~~mirenygorka.gorkarevilla.com~~ 192.168.1.4 8001 ~~steph~~ → Vercel, cert npm-21
~~mirenygorka-dev.gorkarevilla.com~~ 192.168.1.4 8002 ~~steph~~ → retirado (sin DNS)
proxmox.gorkarevilla.com 192.168.1.10 8006 https, Proxmox luka
nas.gorkarevilla.com 192.168.1.11 8080 QNAP jokic
octoprint.gorkarevilla.com 192.168.1.3 80 host externo (OctoPrint)

Externos a los stacks Docker: proxmox, nas y octoprint apuntan a otros hosts de la LAN (192.168.1.10, .11, .3).

Nota (certificado): ~~mirenygorka.gorkarevilla.com y mirenygorka-dev.gorkarevilla.com usaban~~ el certificado npm-21 (*.mirenygorka.com), que no cubría *.gorkarevilla.com; funcionaba porque Cloudflare terminaba TLS en el edge. Obsoleto: ambos hosts están ya en Vercel/retirados.

Migración

Fase 1 — se sustituye por Traefik + Gateway API en el cluster. La tabla de mapeos de arriba es la fuente de referencia para generar las rutas HTTPRoute. Los certificados *.gorkarevilla.com se gestionan con cert-manager.