Saltar a contenido

svc-nginx-proxy-manager

A. Identidad

  • service_id: svc-nginx-proxy-manager
  • nombre: Nginx Proxy Manager
  • estado: activo al 2026-05-31
  • owner: Gabi
  • criticidad: alta
  • fecha de alta: preexistente a OpenClaw
  • ultima revision: 2026-06-01

B. Proposito

  • resumen funcional: proxy reverso, publicacion HTTPS y gestion de certificados.
  • rol dentro del VPS: punto unico de entrada publica y terminacion TLS.
  • por que existe: publica servicios por dominio sin exponerlos directamente al host si no hace falta.

C. Ubicacion

  • path VPS: /docker/nginx-proxy-manager
  • path repo/docs: docs/governance/services/svc-nginx-proxy-manager.md
  • compose file: /docker/nginx-proxy-manager/docker-compose.yml
  • .env real: pendiente de validar
  • archivos criticos:
  • /docker/nginx-proxy-manager/docker-compose.yml
  • /docker/nginx-proxy-manager/data
  • /docker/nginx-proxy-manager/letsencrypt
  • database.sqlite dentro de data/

D. Docker

  • stack: nginx-proxy-manager
  • container names:
  • nginx-proxy-manager
  • image/tag: jc21/nginx-proxy-manager:latest
  • restart policy: unless-stopped
  • healthcheck: pendiente de validar si existe healthcheck Docker declarativo
  • networks:
  • proxy-network
  • nginx-proxy-manager_default
  • volumes:
  • bind mounts sobre /docker/nginx-proxy-manager/data
  • bind mounts sobre /docker/nginx-proxy-manager/letsencrypt
  • bind mounts:
  • /docker/nginx-proxy-manager/data
  • /docker/nginx-proxy-manager/letsencrypt
  • exposed ports:
  • 80/tcp
  • 81/tcp
  • 443/tcp
  • published ports:
  • 80:80
  • 81:81
  • 443:443
  • internal ports:
  • 80/tcp
  • 81/tcp
  • 443/tcp

E. Red

  • redes Docker:
  • proxy-network para hablar con servicios publicados
  • nginx-proxy-manager_default como red interna del stack
  • red publica/proxy: si, es el proxy publico del VPS
  • redes internas: nginx-proxy-manager_default
  • quien puede hablar con quien:
  • Internet llega a NPM por 80/443
  • operadores llegan al admin por 81
  • NPM habla con OpenClaw por proxy-network
  • puertos internos:
  • 80/tcp
  • 81/tcp
  • 443/tcp
  • puertos externos:
  • 80/tcp
  • 81/tcp
  • 443/tcp
  • firewall: la exposicion depende de los puertos publicados permitidos en el host
  • observaciones de red: es el puente entre Internet y los servicios publicados

F. NPM / Proxy / Dominio

  • dominio: sirve openclaw.alpuntodeventa.com.ar y www.portainer.alpuntodeventa.com.ar y doc.alpuntodeventa.com.ar; dominio propio del admin no observado
  • proxy host: si, es el servicio que los administra
  • forward hostname: openclaw-gateway para el host publico confirmado de OpenClaw
  • forward port: 18789 para OpenClaw
  • SSL: si, Let's Encrypt activo
  • websocket: validado PASS al 2026-06-01 para el proxy publico de OpenClaw; handshake wss, TLS, Origin, connect.challenge, connect y hello-ok ya quedaron evidenciados en TEST-WEBSOCKET-001
  • headers especiales: inyecta X-Forwarded-* al backend
  • HSTS: si para OpenClaw publico
  • renovacion de certificado: automatica desde NPM mientras DNS y challenge sigan validos

G. Datos y persistencia

  • datos criticos:
  • configuracion de proxy hosts
  • certificados SSL
  • metadata administrativa en data/
  • volumenes:
  • no usa volumenes Docker nombrados conocidos al 2026-05-31
  • carpetas bind:
  • /docker/nginx-proxy-manager/data
  • /docker/nginx-proxy-manager/letsencrypt
  • que se puede regenerar:
  • contenedor
  • red default del stack
  • que NO se puede perder:
  • configuracion de proxy hosts
  • certificados y metadata SSL
  • base administrativa de NPM

H. Backups

  • ruta backup: /root/openclaw-backups/daily/<timestamp>/npm-stack.tgz
  • frecuencia: diario 03:00
  • retencion: diarios 30 dias, semanales 12, logs 90 dias
  • restore probado: si, documentado
  • RPO: 24 horas
  • RTO: 30-45 minutos en mismo VPS

I. Usos registrados

  • usage_id: use-npm-openclaw-public
  • app/servicio consumidor: svc-openclaw
  • proposito: publicacion HTTPS de OpenClaw
  • base/schema si aplica: no aplica
  • usuario tecnico si aplica: no aplica
  • red usada: proxy-network
  • permisos: reach HTTP interno hacia openclaw-gateway:18789
  • criticidad: alta
  • impacto si falla: OpenClaw sigue corriendo pero deja de ser accesible por dominio
  • backup/restore asociado: npm-stack.tgz + RESTORE-NPM.md

  • usage_id: use-npm-portainer-public

  • app/servicio consumidor: svc-portainer
  • proposito: publicacion HTTPS real de Portainer por dominio
  • base/schema si aplica: no aplica
  • usuario tecnico si aplica: no aplica
  • red usada: proxy-network
  • permisos: reach HTTPS interno hacia portainer:9443
  • criticidad: media
  • impacto si falla: se pierde acceso por dominio a Portainer
  • backup/restore asociado: npm-stack.tgz + RESTORE-NPM.md

  • usage_id: use-npm-knowledge-public

  • app/servicio consumidor: knowledge-portal
  • proposito: publicacion HTTPS real del Knowledge Portal por dominio
  • base/schema si aplica: no aplica
  • usuario tecnico si aplica: no aplica
  • red usada: proxy-network
  • permisos: reach HTTP interno hacia knowledge-portal:8085
  • criticidad: media
  • impacto si falla: el portal sigue corriendo pero deja de ser accesible por dominio
  • backup/restore asociado: npm-stack.tgz + RESTORE-NPM.md

J. Dependencias

  • depende de:
  • DNS publico
  • Let's Encrypt
  • proxy-network
  • servicios que dependen de este:
  • svc-openclaw
  • cualquier servicio publicado por dominio desde este proxy
  • orden de arranque: primero NPM, luego validacion de proxy hosts y certificados
  • impacto si cae: los servicios publicados pueden seguir sanos internamente, pero se rompe el acceso por dominio y la terminacion TLS

K. Operacion

  • como validar salud:
  • docker ps
  • curl -I http://127.0.0.1:81
  • curl -I https://openclaw.alpuntodeventa.com.ar/
  • comandos utiles:
  • docker logs nginx-proxy-manager
  • docker exec nginx-proxy-manager curl -I http://openclaw-gateway:18789/
  • revision de data/nginx/proxy_host/*.conf
  • logs:
  • logs del contenedor nginx-proxy-manager
  • archivos de configuracion generados en data/nginx/proxy_host/
  • como reiniciar: reiniciar solo el stack NPM
  • como detener: detener solo NPM sabiendo que corta acceso publico
  • como recuperar: usar RESTORE-NPM.md

L. Seguridad

  • secretos: no documentar valores; los certificados y metadata sensible viven en letsencrypt/ y data/
  • usuarios tecnicos: admin de NPM pendiente de detallar sin exponer credenciales
  • exposicion publica: si, 80/81/443
  • hardening:
  • centraliza TLS
  • evita publicar directamente OpenClaw
  • separa trafico interno por proxy-network
  • riesgos:
  • es punto unico de entrada publica
  • concentra certificados y metadata de proxy
  • el puerto 81 requiere especial cuidado por exposicion administrativa

M. Estado y decisiones

  • decisiones tomadas:
  • mantener NPM como reverse proxy central
  • usar Let's Encrypt
  • publicar OpenClaw detras de openclaw-gateway:18789
  • por que esta asi: reduce complejidad operativa y centraliza certificados y dominios
  • pendientes:
  • validar si el admin de NPM tiene dominio propio
  • revalidar el flujo websocket autenticado completo con un dispositivo Control UI aprobado si se necesita cerrar el warning actual
  • riesgos aceptados:
  • dependencia operativa de NPM para toda publicacion publica