Heimdall convierte una pestaña del navegador en la portada de tu servidor: un panel con todos tus servicios a un clic. En esta guía lo levantas con un único docker-compose.yml usando la imagen de LinuxServer, añades tus primeras aplicaciones (incluidos los accesos mejorados que muestran estado en vivo), lo publicas con HTTPS detrás de un proxy inverso y lo comparas con Homer para saber cuándo elegir cada uno. La misma explicación está disponible en inglés.

Puntos clave

  • Heimdall es un panel de aplicaciones de código abierto (licencia MIT) mantenido por el grupo LinuxServer.io, con más de 150 millones de descargas en Docker Hub entre todas sus imágenes.
  • Está escrito en PHP con el framework Laravel 11 y guarda su configuración en una base de datos SQLite dentro del volumen /config, así que no necesitas un contenedor de base de datos aparte.
  • El montaje recomendado usa la imagen lscr.io/linuxserver/heimdall; la versión estable actual es la 2.8.1, publicada el 9 de julio de 2026.
  • Ofrece tres tipos de acceso: enlaces genéricos, aplicaciones de fundación (unas 506 plantillas con icono y color automáticos) y accesos mejorados (unos 145) que consultan la API del servicio para mostrar su estado.
  • Fija una versión concreta de la imagen (por ejemplo 2.8.1) en lugar de :latest; así decides tú cuándo saltas de versión y evitas sorpresas al reiniciar el contenedor.

¿Qué es Heimdall y para qué sirve?

Heimdall es un panel de aplicaciones (application dashboard) pensado para reunir en una sola página, ordenada y agradable a la vista, los enlaces a todos los servicios que tienes repartidos por tu servidor o tu red local. La idea es sencilla: en lugar de recordar puertos e IP como 192.168.1.10:8096, entras en Heimdall y pulsas el icono de cada aplicación. Muchos lo usan como página de inicio del navegador, con un buscador integrado que apunta a Google, Bing o DuckDuckGo.

Lo desarrolla y mantiene el grupo LinuxServer.io, muy conocido en el mundo del self-hosting por sus imágenes de contenedor cuidadas. Heimdall está construido sobre PHP 8.4 y Laravel 11, y su filosofía es la contraria a la de un navaja suiza: prioriza la sencillez y el buen diseño frente a acumular funciones. Toda su información vive en tu servidor, dentro de una base de datos SQLite que se crea sola en el volumen /config, sin depender de ninguna nube ajena.

Si vienes de otras guías de esta serie, encaja de forma natural como portada de tu homelab, junto a servicios como los que ya montamos con Docker. Es una alternativa más visual y de configuración por interfaz web frente a paneles orientados a fichero como Homepage.

¿Cómo es el docker-compose.yml de Heimdall?

Antes de escribir el Compose necesitas una máquina Linux con Docker y el plugin Compose instalados; si aún no los tienes, sigue primero la guía para instalar Docker en Ubuntu 24.04. Heimdall es una de las instalaciones más simples de toda la serie, porque es un único contenedor sin base de datos externa. Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml:

services:
  heimdall:
    image: lscr.io/linuxserver/heimdall:2.8.1
    container_name: heimdall
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Europe/Madrid
      ALLOW_INTERNAL_REQUESTS: "false"
    volumes:
      - heimdall_config:/config
    ports:
      - "8090:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:80/ || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 5

volumes:
  heimdall_config:

Repasa un par de detalles importantes. PUID y PGID fijan el usuario y el grupo con los que el contenedor escribe en el volumen; en la mayoría de instalaciones el primer usuario de Linux es 1000:1000, y puedes comprobarlo con el comando id. El contenedor sirve en el puerto 80 (y 443 para HTTPS), pero como el 80 del anfitrión suele estar ocupado, aquí lo publicamos en el 8090. La variable ALLOW_INTERNAL_REQUESTS controla si Heimdall puede consultar direcciones IP privadas: déjala en false por seguridad y ponla en true solo cuando uses accesos mejorados contra servicios de tu red local. Toda la configuración persiste en el volumen heimdall_config, montado en /config.

Con el archivo listo, arranca la pila en segundo plano y observa el registro del contenedor:

docker compose up -d
docker compose ps
docker compose logs -f heimdall

Cuando el estado del contenedor aparezca como healthy, abre http://192.168.1.10:8090 en el navegador (cambia la IP por la de tu servidor). Verás la portada de Heimdall vacía, lista para añadir tu primera aplicación. No hay usuario ni contraseña por defecto: el acceso es abierto, así que no expongas el puerto directamente a Internet sin protegerlo, algo que resolvemos más abajo con el proxy inverso.

¿Cómo añadir aplicaciones y accesos mejorados?

Heimdall distingue tres formas de añadir un enlace, de menos a más inteligente. Entender la diferencia es la clave para sacarle partido:

  • Aplicaciones genéricas: un simple enlace al que pones nombre, color e icono a mano. Sirve para cualquier web o servicio.
  • Aplicaciones de fundación (foundation apps): plantillas ya preparadas para servicios conocidos, con su icono y su color oficiales. Heimdall trae unas 506, así que al escribir el nombre (por ejemplo Portainer o Nextcloud) se rellenan solos.
  • Accesos mejorados (enhanced apps): aplicaciones de fundación a las que, además, les das una URL de API y una clave. Con eso Heimdall consulta el servicio y muestra información en vivo en la propia baldosa: espacio libre, número de descargas, estado del sistema, etc. Hay alrededor de 145 disponibles.

Para crear la primera, pulsa el botón Application list de la barra lateral y luego Add. Escribe el nombre del servicio: si existe como aplicación de fundación, Heimdall te ofrece el icono y el color automáticamente. Rellena la URL (por ejemplo http://192.168.1.10:9000 para Portainer) y guarda. Si el servicio admite acceso mejorado, activa la opción Enable, elige el tipo y pega la clave de API que genera ese servicio; a partir de ahí la baldosa mostrará datos actualizados. Recuerda que para que los accesos mejorados alcancen servicios de tu red interna debes poner ALLOW_INTERNAL_REQUESTS en true.

¿Cómo publicarlo con un proxy inverso?

Servir Heimdall por HTTP plano en la red local está bien para empezar, pero como no tiene inicio de sesión propio, nunca deberías exponer su puerto directamente a Internet. La forma correcta de sacarlo fuera es ponerlo detrás de un proxy inverso que gestione el certificado TLS y, si quieres, una capa de autenticación. Tienes dos opciones muy usadas en esta serie: Nginx Proxy Manager, con su interfaz web para crear el proxy y pedir el certificado de Let’s Encrypt con un par de clics, o Traefik, que se configura por etiquetas en el propio Compose.

Si usas Traefik, quita la sección ports del servicio heimdall, conéctalo a la red del proxy y añádele estas etiquetas:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.heimdall.rule=Host(`inicio.midominio.com`)"
      - "traefik.http.routers.heimdall.entrypoints=websecure"
      - "traefik.http.routers.heimdall.tls.certresolver=le"
      - "traefik.http.services.heimdall.loadbalancer.server.port=80"

Como Heimdall no pide contraseña, conviene añadir además una autenticación básica en el proxy (o un SSO por delante) para que no cualquiera vea tu lista de servicios. Con el certificado en marcha, tu panel quedará accesible en https://inicio.midominio.com con candado y sin puertos raros a la vista.

¿En qué se diferencia Heimdall de Homer?

Heimdall y Homer resuelven el mismo problema (un panel de accesos), pero desde filosofías opuestas. Homer es un panel completamente estático: un config.yml que Homer convierte en HTML y JavaScript, sin proceso de servidor detrás, con licencia Apache 2.0. Es ligerísimo y arranca en un abrir y cerrar de ojos, pero cada cambio implica editar el fichero YAML a mano y no muestra estado en vivo.

Heimdall, en cambio, es una aplicación dinámica de PHP y Laravel con editor web: añades y ordenas las baldosas desde el navegador, sin tocar archivos, y guarda todo en SQLite. A cambio consume algo más de memoria y arranca un poco más despacio. La regla práctica: elige Homer si quieres el panel más ligero posible y no te importa editar YAML; elige Heimdall si prefieres configurarlo con el ratón y quieres accesos mejorados con estado en tiempo real. Si buscas algo intermedio con arrastrar y soltar, echa un vistazo a Dashy.

Preguntas frecuentes

¿Heimdall necesita una base de datos aparte?

No. A diferencia de otras aplicaciones de la serie, Heimdall no requiere un contenedor de MariaDB o PostgreSQL: usa una base de datos SQLite que se crea sola dentro del volumen /config. Por eso el docker-compose.yml define un único servicio. Para hacer una copia de seguridad completa basta con respaldar ese volumen, que también guarda los iconos que hayas subido.

¿Cómo protejo Heimdall si no tiene inicio de sesión?

Heimdall no incluye usuarios ni contraseñas: quien llegue a su URL ve el panel. Por eso no debes exponer su puerto directamente a Internet. La solución es ponerlo detrás de un proxy inverso como Nginx Proxy Manager con HTTPS y añadir una autenticación básica o un SSO por delante. En red local sin salida a Internet, el acceso abierto suele ser aceptable.

¿Por qué mi acceso mejorado no muestra datos?

Casi siempre es por la variable ALLOW_INTERNAL_REQUESTS. Los accesos mejorados hacen una petición desde el contenedor de Heimdall hacia la API del servicio; si ese servicio está en una IP privada (tu red local), Heimdall bloquea la petición por seguridad a menos que pongas ALLOW_INTERNAL_REQUESTS: "true". Revisa también que la URL de la API y la clave sean correctas y que el servicio sea alcanzable desde el contenedor.

Conclusión

Con un único docker-compose.yml tienes la portada de tu servidor: un panel elegante que reúne todos tus servicios, con iconos automáticos y estado en vivo para los que lo admiten. La clave está en fijar la versión de la imagen, ajustar PUID/PGID y decidir con cuidado la variable ALLOW_INTERNAL_REQUESTS. El siguiente paso lógico es sacar el panel a Internet con seguridad detrás de Nginx Proxy Manager o Traefik, y compararlo con alternativas como Homepage o Dashy para quedarte con el que mejor encaje en tu homelab.

Fuentes

  1. Sitio oficial de Heimdall
  2. Imagen Docker de Heimdall en LinuxServer
  3. Repositorio de Heimdall en GitHub

Ruta: Paneles y notificaciones self-hosted con Docker