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,nasyoctoprintapuntan a otros hosts de la LAN (192.168.1.10,.11,.3).Nota (certificado): ~~
mirenygorka.gorkarevilla.comymirenygorka-dev.gorkarevilla.comusaban~~ el certificadonpm-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.