2
NPM
groales edited this page 2025-12-03 11:25:53 +01:00

Integración con NGINX Proxy Manager

Esta guía explica cómo desplegar Heimdall con NPM (NGINX Proxy Manager) del repositorio groales/npm.

📋 Requisitos Previos

  • NPM desplegado y funcionando (groales/npm)
  • Red Docker proxy creada (NPM la crea automáticamente)
  • DNS configurado apuntando a tu servidor (ej: heimdall.tudominio.com)
  • Acceso a la UI de NPM (puerto 81)

🚀 Despliegue desde Portainer

Opción A: Git Repository (Recomendado)

Método más simple, usa los archivos directamente del repositorio.

StacksAdd stack

Configuración:

  • Name: heimdall
  • Build method: Git Repository
    • Repository URL: https://git.ictiberia.com/groales/heimdall
    • Repository reference: refs/heads/main
    • Compose path: docker-compose.yml
    • Additional paths: docker-compose.override.npm.yml.example
  • Deploy the stack

Opción B: Web Editor

Método manual copiando y pegando el docker-compose completo.

StacksAdd stack

Configuración:

  • Name: heimdall
  • Build method: Web editor
  • Web editor: Copiar y pegar el siguiente contenido:
services:
  heimdall:
    container_name: heimdall
    image: lscr.io/linuxserver/heimdall:latest
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Europe/Madrid
    volumes:
      - heimdall_config:/config
    networks:
      - proxy

volumes:
  heimdall_config:
    name: heimdall_config

networks:
  proxy:
    external: true
  • Deploy the stack

2. Verificar Despliegue

Stacksheimdall → Ver contenedor

Estado debe ser running

docker logs heimdall

Deberías ver:

[services.d] starting services
[services.d] done.

3. Configurar Proxy Host en NPM

Accede a NPM: http://IP-del-servidor:81

DashboardProxy HostsAdd Proxy Host

Pestaña Details

  • Domain Names: heimdall.tudominio.com
  • Scheme: http ⚠️ (importante: HTTP, no HTTPS)
  • Forward Hostname / IP: heimdall (nombre del contenedor)
  • Forward Port: 80
  • Cache Assets: (opcional, mejora rendimiento)
  • Block Common Exploits: (recomendado)
  • Websockets Support: (no necesario para Heimdall)

Pestaña SSL

  • Request a new SSL Certificate
  • Force SSL (redirige HTTP → HTTPS)
  • HTTP/2 Support
  • Email Address: tu@email.com
  • I Agree to the Let's Encrypt Terms of Service

Save 💾

4. Acceder

Abre tu navegador en: https://heimdall.tudominio.com 🎉

NPM gestiona automáticamente el certificado SSL con Let's Encrypt.

🛠️ Despliegue desde CLI

1. Clonar repositorio

git clone https://git.ictiberia.com/groales/heimdall
cd heimdall

2. Copiar override

cp docker-compose.override.npm.yml.example docker-compose.override.yml

3. Desplegar

docker compose up -d

4. Configurar en NPM

Sigue el paso 3 de la sección anterior (Configurar Proxy Host en NPM).

📝 Configuración Completa del Override

El archivo docker-compose.override.npm.yml.example es muy simple:

services:
  heimdall:
    networks:
      - proxy

networks:
  proxy:
    external: true

¿Por qué tan simple?

Porque NPM no usa labels de Docker. Toda la configuración (dominio, SSL, headers) se hace desde la UI de NPM.

🔒 Seguridad Adicional con Access Lists

NPM permite restringir acceso por IP mediante Access Lists.

Crear Access List

DashboardAccess ListsAdd Access List

Details:

  • Name: Red Local
  • Satisfy Any: (desmarcado = todas las reglas deben cumplirse)

Authorization:

  • Añadir usuario/password (opcional)

Access:

  • Allow: 192.168.1.0/24 (tu red local)
  • Allow: 10.0.0.0/8 (si usas VPN)
  • Deny: 0.0.0.0/0 (denegar todo lo demás)

Save

Aplicar Access List a Heimdall

Proxy Hosts → Editar heimdall.tudominio.com

Pestaña Details:

  • Access List: Seleccionar Red Local

Save

Ahora solo IPs de tu red local pueden acceder a Heimdall.

🔐 Protección con Usuario/Contraseña

En la Access List, pestaña Authorization:

Añadir usuario:

  • Username: admin
  • Password: contraseña_segura
  • Add

Save

Ahora NPM pedirá usuario/contraseña antes de acceder a Heimdall.

🌐 Configuración Avanzada

Headers de Seguridad Personalizados

Proxy Hosts → Editar heimdall.tudominio.comPestaña Advanced

# Security Headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# Opcional: Content Security Policy
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;

Rate Limiting

Limitar peticiones por IP:

# Limitar a 10 peticiones por segundo
limit_req_zone $binary_remote_addr zone=heimdall_limit:10m rate=10r/s;
limit_req zone=heimdall_limit burst=20 nodelay;

🔄 Actualización

docker compose pull
docker compose up -d

La configuración en NPM se mantiene automáticamente.

🐛 Solución de Problemas

Error 502 Bad Gateway

Verificar que Heimdall está corriendo:

docker ps | grep heimdall

Verificar red proxy:

docker network inspect proxy

Tanto NPM como Heimdall deben aparecer en la red.

Verificar en NPM:

  • Forward Hostname: Debe ser heimdall (nombre del contenedor), no IP
  • Forward Port: Debe ser 80
  • Scheme: Debe ser http

SSL no se genera

Verificar DNS:

nslookup heimdall.tudominio.com

Debe resolver a la IP pública de tu servidor.

Verificar puertos:

  • Puerto 80 (HTTP) debe estar accesible desde Internet (Let's Encrypt lo necesita)
  • Puerto 443 (HTTPS) debe estar accesible

Ver logs de NPM:

docker logs npm

Heimdall no aparece en la red proxy

Recrear stack:

docker compose down
docker compose up -d

Verificar override:

docker compose config

Debe mostrar la red proxy con external: true.

📚 Siguiente Paso

Ve a Configuración Inicial para configurar Heimdall.


Repositorio: groales/heimdall
NPM: groales/npm