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.
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.
-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.
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.
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.
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.
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.
– 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.
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.
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 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.
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.
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.
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)
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/Lissy93/dashy
- Sitio web y documentación oficial: https://dashy.to/docs
- Demo en vivo: https://demo.dashy.to
- Imagen en Docker Hub: https://hub.docker.com/r/lissy93/dashy
- Paquete en GHCR: https://github.com/Lissy93/dashy/pkgs/container/dashy
- Guía de inicio rápido: https://github.com/Lissy93/dashy/blob/master/docs/quick-start.md
- Documentación de despliegue: https://github.com/Lissy93/dashy/blob/master/docs/deployment.md
- Documentación de configuración: https://github.com/Lissy93/dashy/blob/master/docs/configuring.md
- Licencia MIT: https://github.com/Lissy93/dashy/blob/master/LICENSE
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
