diff --git a/README.md b/README.md index dabf87f..7cc1291 100644 --- a/README.md +++ b/README.md @@ -32,23 +32,79 @@ NGINX Proxy Manager es una herramienta de gestión de proxy inverso fácil de us - **Volúmenes**: - `npm_data`: Datos de configuración, base de datos y logs - `npm_letsencrypt`: Certificados SSL de Let's Encrypt -- **Red**: `npm_network` dedicada para el stack +- **Red**: `proxy` (externa, compartida con otros servicios) ## Pasos de despliegue -### 1. Clonar el repositorio +### Opción 1: Docker Compose (Línea de comandos) + +#### 1. Crear red proxy + +```bash +docker network create proxy +``` + +#### 2. Clonar el repositorio ```bash git clone https://git.ictiberia.com/groales/npm cd npm ``` -### 2. Levantar el stack +#### 3. Levantar el stack ```bash docker compose up -d ``` +### Opción 2: Desplegar desde Portainer (Recomendado) + +#### 1. Crear red proxy + +Desde Portainer: **Networks** → **Add network** +- **Name**: `proxy` +- **Driver**: `bridge` +- **Deploy** + +O desde línea de comandos: +```bash +docker network create proxy +``` + +#### 2. Conectar Portainer a la red proxy + +**Containers** → `portainer` → **Duplicate/Edit** +- En **Network** → **+ Connect to network** → Seleccionar `proxy` +- **Deploy** + +O añadir a `docker-compose.override.yaml` de Portainer: +```yaml +services: + portainer: + networks: + - proxy + +networks: + proxy: + external: true +``` + +#### 3. Desplegar stack de NPM + +**Stacks** → **Add stack** +- **Name**: `nginx-proxy-manager` +- **Build method**: + - **Git Repository**: + - Repository URL: `https://git.ictiberia.com/groales/npm` + - Repository reference: `refs/heads/main` + - Compose path: `docker-compose.yaml` + - O **Web editor**: Pegar contenido de `docker-compose.yaml` +- **Deploy the stack** + +#### 4. Verificar despliegue + +**Stacks** → `nginx-proxy-manager` → Ver logs del contenedor + ### 3. Verificar el estado ```bash @@ -89,6 +145,32 @@ Abre tu navegador en: **http://IP-del-servidor:81** ✅ En pocos segundos tendrás un proxy HTTPS funcionando con certificado válido. +### Ejemplo: Proxy a Portainer (Contenedores en Red Compartida) + +Si Portainer y NPM están en la misma red `proxy`: + +1. **Crear Proxy Host** en NPM: + - **Domain Names**: `portainer.tudominio.com` + - **Scheme**: `https` (Portainer usa HTTPS) + - **Forward Hostname/IP**: `portainer` (nombre del contenedor) + - **Forward Port**: `9443` + - **Cache Assets**: ❌ + - **Block Common Exploits**: ✅ + - **Websockets Support**: ✅ (necesario para Portainer) + +2. **Pestaña SSL**: + - ✅ **Request a new SSL Certificate** + - ✅ **Force SSL** + - ✅ **HTTP/2 Support** + - Email: `tu@email.com` + - ✅ **I Agree to Let's Encrypt ToS** + +3. **Save** + +Accede a: `https://portainer.tudominio.com` 🎉 + +💡 **Ventaja**: No necesitas exponer el puerto 9443 de Portainer, NPM gestiona todo el tráfico HTTPS. + ## Configuración avanzada ### Variables de entorno @@ -118,24 +200,48 @@ ports: ### Integración con redes Docker -Para proxy a contenedores en otras redes Docker: +Este stack usa la red `proxy` (externa) para compartir conectividad con otros servicios Docker. + +#### Conectar otros servicios a la red proxy + +**Opción 1: Desde Portainer** + +Para cada stack/contenedor que quieras exponer via NPM: + +1. **Containers** → Seleccionar contenedor → **Duplicate/Edit** +2. **Network** → **+ Connect to network** → `proxy` +3. **Deploy** + +**Opción 2: En docker-compose.yaml** ```yaml services: - app: + mi_servicio: # ... configuración existente ... networks: - - npm_network - - otra_red_docker + - mi_red_interna + - proxy # Añadir red proxy networks: - npm_network: - name: npm_network - otra_red_docker: - external: true + mi_red_interna: + name: mi_red_interna + proxy: + external: true # Red creada previamente ``` -Luego en NPM usa el **nombre del contenedor** como Forward Hostname (ej: `portainer`). +#### Configurar Proxy Host en NPM + +Una vez el servicio esté en la red `proxy`: + +- **Forward Hostname**: Usar **nombre del contenedor** (ej: `portainer`, `jellyfin`, `nextcloud`) +- **Forward Port**: Puerto **interno** del contenedor (no necesitas publicarlo con `-p`) + +**Ejemplo**: Si tienes Jellyfin corriendo: +- Container name: `jellyfin` +- Puerto interno: `8096` +- En NPM: Forward Hostname = `jellyfin`, Port = `8096` + +💡 **Ventaja**: No expones puertos innecesarios al host, todo el tráfico pasa por NPM. ## Documentación adicional diff --git a/docker-compose.yaml b/docker-compose.yaml index 15f63e5..e2d1a86 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -22,5 +22,5 @@ volumes: name: npm_letsencrypt networks: - npm_network: - name: proxy + proxy: + external: true