Saltar al contenido principal

Configuración de Nginx Proxy Manager

Nginx Proxy Manager (NPM) actúa como punto de entrada único para el tráfico externo. Los contenedores del stack no exponen puertos al host directamente; todo pasa por NPM via la red proxy_network.

Requisitos previos

  • NPM ya instalado y corriendo en la misma máquina (o accesible por la red).
  • Los contenedores sgi-full-frontend y sgi-full-docs deben estar en la red proxy_network (ya configurado en el docker-compose.yml).
  • Dominio(s) apuntando a la IP del servidor con registros DNS A configurados.

Proxy Host para el Frontend (aplicación principal)

Crea un nuevo Proxy Host en NPM con:

CampoValor
Domain Namessgi.escuelamilitar.edu.pe
Schemehttp
Forward Hostname / IPsgi-full-frontend
Forward Port80
Cache Assets
Block Common Exploits

En la pestaña SSL:

  • Selecciona o solicita un certificado Let's Encrypt
  • Activa Force SSL y HTTP/2 Support

Proxy Host para la Documentación

CampoValor
Domain Namesdocs.sgi.escuelamilitar.edu.pe
Schemehttp
Forward Hostname / IPsgi-full-docs
Forward Port80
Cache Assets
Block Common Exploits

Aplica SSL igual que para el frontend.

Red externa proxy_network

El stack define esta red como externa (external: true). Esto significa que NPM y el stack comparten la misma red Docker, lo que permite que NPM resuelva los nombres de contenedor (sgi-full-frontend, sgi-full-docs) directamente.

Para verificar que los contenedores están en la red:

docker network inspect proxy_network | grep -A2 "Name"

Deberías ver sgi-full-frontend y sgi-full-docs listados.

Acceso a Swagger UI en producción

El backend (sgi-full-backend) no está conectado a proxy_network por diseño de seguridad. Para exponer Swagger UI temporalmente (ej. durante desarrollo en el servidor):

  1. Agrega temporalmente el backend a proxy_network en el docker-compose.yml:
backend:
networks:
- sgi_internal
- sgi_app
- proxy_network # temporal
  1. Crea un Proxy Host en NPM apuntando a sgi-full-backend:8080.

  2. Elimina la configuración cuando termines para mantener el backend inaccesible desde el exterior.

Solución de problemas

ProblemaPosible causaSolución
NPM no encuentra el contenedorEl contenedor no está en proxy_networkVerifica con docker network inspect proxy_network
Error 502 Bad GatewayEl contenedor destino no está corriendoVerifica con docker compose ps
Certificado SSL no renuevaPuerto 80 bloqueado por firewallAbre el puerto 80 en el firewall del servidor