Dashy: Panel de control personalizable autoalojado para tu homelab

Publicado por


dashy
Autoalojado

Dashy: Panel de control personalizable autoalojado para tu homelab

Un dashboard personal autoalojable con monitorización de estado, widgets, temas, paquetes de iconos, editor UI y mucho más.

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Dashy: Panel de control personalizable autoalojado para tu homelab en el canal GENBYTE:

¿Qué es Dashy: Panel de control personalizable autoalojado para tu homelab?

Dashy es una página de inicio diseñada para homelabs que permite organizar y acceder a todos tus servicios autoalojados desde una única interfaz. Se configura mediante un único archivo YAML y ofrece monitorización en tiempo real del estado de cada aplicación, múltiples vistas (espacio de trabajo, minimalista), autenticación opcional con Keycloak o básica, respaldo cifrado en la nube, soporte multiidioma y una amplia personalización visual mediante temas integrados y CSS personalizado. Funciona en contenedores Docker multi-arquitectura (amd64 y arm64), en bare metal con Node.js LTS y en plataformas cloud con despliegue en un clic.

Configuración declarativa en YAML, monitorización de estado integrada, editor visual en la UI y despliegue sencillo con Docker Compose.

Características principales

Múltiples páginas y secciones

Soporte para tantas subpáginas como necesites, cada una con su propio archivo de configuración local o remoto.

Monitorización de estado en tiempo real

Comprobaciones HTTP y ping ICMP por elemento, con indicadores visuales, tiempo de respuesta y código de estado al pasar el ratón.

Widgets dinámicos

Widgets preconstruidos para servicios comunes y posibilidad de crear widgets personalizados para mostrar datos de cualquier API.

Búsqueda instantánea y atajos de teclado

Filtrado por nombre, dominio o etiquetas al escribir, navegación con teclas y teclas de acceso rápido (hotkeys) configurables por elemento.

Temas y editor de color

Varios temas integrados, configurador visual de colores y soporte para CSS personalizado.

Iconos flexibles

Compatible con Favicon automático, Font Awesome, Simple Icons, Material Design, iconos de homelab, emojis, imágenes locales o remotas y generativos.

Autenticación y control de acceso

Autenticación básica con usuarios, contraseñas hash SHA-256 y roles (admin, editor, viewer), además de integración con Keycloak para SSO.

Vistas alternativas

Vista minimalista para startpage del navegador y vista de espacio de trabajo para abrir varias apps simultáneamente en iframes redimensionables.

Métodos de apertura configurables

Abrir en misma pestaña, nueva pestaña, modal, espacio de trabajo, copiar al portapapeles o contexto superior (top).

Editor de configuración en la UI

Edición visual de secciones e items, vista previa en vivo, validación de esquema y guardado en disco o localStorage.

Respaldo y sincronización en la nube (opcional)

Cifrado extremo a extremo (AES) antes de enviar a un worker de Cloudflare con almacenamiento KV.

Soporte multiidioma

Más de 30 idiomas con detección automática y selector en la UI, códigos ISO 639-1.

Despliegue sencillo

Imagen Docker multi-arquitectura en Docker Hub y GHCR, docker-compose listo, binario estático para hosting estático y 1-click en múltiples proveedores cloud.

PWA y acceso offline básico

Instalable como aplicación web progresiva con funcionalidad básica sin conexión.

Enfoque en privacidad y código abierto

100% gratuito, licencia MIT, sin telemetría ni llamadas a casa no documentadas.

Requisitos del sistema

  • Docker y Docker Compose (recomendado)
  • Node.js LTS 22.x, 24.x o >=26.x para instalación en bare metal
  • Al menos 1 GB de RAM y 1 GB de espacio en disco para contenedor o bare metal
  • Arquitectura amd64 o arm64 (Raspberry Pi 3 probado)

Instalación con Docker Compose

Despliegue rápido con Docker (un contenedor)

Ejecuta el contenedor mapeando el puerto 4000 del host al 8080 del contenedor. El directorio montado en /app/user-data debe contener al menos conf.yml.

docker run -d \
-p 4000:8080 \
-v /ruta/a/tu/user-data:/app/user-data \
–name mi-dashboard \
–restart=always \
lissy93/dashy:latest

Despliegue con Docker Compose (recomendado para producción)

Usa el docker-compose.yml oficial. Descomenta la sección volumes y ajusta la ruta local a tu directorio user-data con conf.yml. El healthcheck usa el script interno healthcheck.js.

services:
dashy:
container_name: Dashy
image: lissy93/dashy:latest
ports:
– 4000:8080
volumes:
– ./user-data:/app/user-data
environment:
– NODE_ENV=production
restart: unless-stopped
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck.js']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 30s

Construcción desde código fuente

Clona el repositorio, instala dependencias con yarn, compila y ejecuta el servidor Node. Requiere Node LTS y yarn.

git clone https://github.com/Lissy93/dashy.git
cd dashy
# Edita ./user-data/conf.yml
yarn
yarn build
yarn start

Acceder al proyecto

Acceso web

Una vez levantado el contenedor o el servidor, abre el navegador en http://localhost:4000 (o la IP del host en el puerto 4000). El puerto interno del contenedor es 8080, mapeado a 4000 en el host por defecto.

Casos de uso

  • Página de inicio centralizada para todos los servicios de un homelab
  • Monitorización visual del estado (up/down) de contenedores, VMs y servicios de red
  • Lanzador rápido con búsqueda, atajos de teclado y múltiples métodos de apertura
  • Panel de trabajo (workspace) para operar varias apps en iframes simultáneos
  • Startpage minimalista para navegador con carga rápida y búsqueda web integrada
  • Dashboard multiusuario con control de acceso basado en roles y SSO corporativo
  • Respaldo de configuración cifrado en la nube para recuperación ante desastres o migración entre instancias

Configuración avanzada

Configuración principal (conf.yml)

Archivo YAML único en /app/user-data/conf.yml que define appConfig (ajustes globales), secciones, items, páginas adicionales, autenticación, temas, widgets, idioma, respaldo cloud, etc. La documentación completa está en docs/configuring.md.

appConfig:
statusCheck: true
statusCheckInterval: 60
pingCheck: true
pingCheckInterval: 300
defaultOpeningMethod: newtab
language: es
theme: default
auth:
users:
– user: admin
hash: <SHA256>
type: admin
pages:
– name: Red
path: networking.yml
– name: Trabajo
path: https://ejemplo.com/work.yml

Autenticación con Keycloak (SSO)

Configura un cliente OpenID Connect en Keycloak y añade los parámetros en appConfig.keycloak. Requiere keycloak-js como dependencia (ya incluida). Ver docs/authentication.md#keycloak.

appConfig:
keycloak:
enabled: true
url: https://keycloak.tu-dominio.com
realm: homelab
clientId: dashy
# Opcional: clientSecret, roles, etc.

Widgets personalizados

Crea un componente Vue en src/widgets/CustomWidget.vue, regístralo en src/widgets/index.js y úsalo en conf.yml bajo widgets.type: custom. Ver docs/widgets.md.

widgets:
– type: custom
options:
endpoint: https://api.mi-servicio.com/metricas
refreshInterval: 60

Temas y CSS personalizado

Selecciona tema en appConfig.theme o usa el configurador UI. Para CSS propio, coloca archivo .css en user-data y referéncialo en appConfig.customCss. Ver docs/theming.md.

appConfig:
theme: dark
customCss: /mi-tema.css

Respaldo cloud (opcional)

Activa en UI o en conf.yml appConfig.backup: true. Los datos se cifran con AES (crypto-js) en el navegador antes de enviarse al worker de Cloudflare. Ver docs/backup-restore.md.

appConfig:
backup: true
backupKey: <clave-secreta-para-cifrado>

Gestión y mantenimiento

Actualización de imagen Docker

Descarga la nueva etiqueta y recrea el contenedor manteniendo el volumen user-data.

docker pull lissy93/dashy:latest
docker compose up -d

Healthcheck integrado

El contenedor expone un healthcheck que ejecuta node services/healthcheck.js cada 90 segundos. Docker reiniciará el contenedor si falla 3 veces consecutivas.

healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck.js']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 30s

Validación de configuración

Ejecuta el validador interno para comprobar sintaxis y esquema de conf.yml antes de recargar.

docker exec -it Dashy node services/utils/config-validator

Respaldo manual de configuración

Copia el directorio user-data completo (conf.yml, subconfigs, iconos, fuentes, CSS) a almacenamiento seguro. El editor UI permite exportar e importar configuración.

cp -r /ruta/a/user-data /ruta/backup/$(date +%F)_dashy-backup

Stack técnico

  • Vue 3 (framework frontend)
  • Vite (bundler y dev server)
  • Node.js 22/24/26 (runtime servidor)
  • Express 5 (servidor HTTP)
  • YAML (configuración declarativa)
  • Docker multi-arquitectura (Alpine Linux base)
  • Pinia/Vuex (estado)
  • Vue Router 5 (enrutamiento)
  • Vue I18n (internacionalización)
  • CodeMirror 6 (editor YAML en UI)
  • JSON Forms (formularios dinámicos)
  • CryptoJS (cifrado AES para backup cloud)
  • Keycloak JS / OIDC Client TS (SSO)
  • Pingman (healthchecks ICMP)
  • Simple Icons, Font Awesome, Material Design, Homelab Icons (iconografía)
  • Frappe Charts (gráficos en widgets)
  • PWA via vite-plugin-pwa
  • TypeScript, ESLint, Vitest (calidad y testing)

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *