Table of Contents
- Integración con NGINX Proxy Manager
- 📋 Requisitos Previos
- 🚀 Despliegue desde Portainer
- Opción A: Git Repository (Recomendado)
- Opción B: Web Editor
- 2. Verificar Despliegue
- 3. Configurar Proxy Host en NPM
- 4. Acceder
- 🛠️ Despliegue desde CLI
- 📝 Configuración Completa del Override
- 🔒 Seguridad Adicional con Access Lists
- 🔐 Protección con Usuario/Contraseña
- 🌐 Configuración Avanzada
- 🔄 Actualización
- 🐛 Solución de Problemas
- 📚 Siguiente Paso
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
proxycreada (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.
Stacks → Add 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
- Repository URL:
- Deploy the stack
Opción B: Web Editor
Método manual copiando y pegando el docker-compose completo.
Stacks → Add 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
Stacks → heimdall → 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
Dashboard → Proxy Hosts → Add 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
Dashboard → Access Lists → Add 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.com → Pestañ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