Homarr: Panel de control moderno para autoalojamiento

Publicado por


homarr
Dashboard

Homarr: Panel de control moderno para autoalojamiento

Un dashboard moderno y fácil de usar con más de 80 integraciones, 20.000 iconos integrados, autenticación nativa y configuración drag-and-drop sin YAML.

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Homarr: Panel de control moderno para autoalojamiento en el canal GENBYTE:

¿Qué es Homarr: Panel de control moderno para autoalojamiento?

Homarr es una aplicación de panel de control (dashboard) diseñada para entornos de autoalojamiento (self-hosting). Permite centralizar el acceso a servicios, aplicaciones y recursos mediante una interfaz visual configurable. El proyecto está desarrollado en TypeScript, utiliza Next.js 16 como framework web, React 19 para la interfaz de usuario y Mantine como biblioteca de componentes. Se distribuye como imagen Docker multi-arquitectura y expone el puerto 7575. La persistencia de datos se realiza por defecto mediante SQLite (better-sqlite3), con soporte opcional para PostgreSQL. Incluye autenticación basada en credenciales, cifrado de secretos de integración y un CLI integrado para tareas de administración.

Configuración visual drag-and-drop sin edición de archivos YAML, con más de 80 integraciones predefinidas y 20.000 iconos listos para usar.

Características principales

Integraciones nativas

Más de 80 integraciones con servicios populares (Servarr, Docker, Kubernetes, Proxmox, Jellyfin, Immich, qBittorrent, Transmission, Deluge, Unifi, entre otros) para mostrar estado, métricas y acciones directas desde el dashboard.

Catálogo de iconos

Más de 20.000 iconos integrados (Tabler Icons, Lucide, Flag Icons) disponibles para personalizar enlaces, grupos y widgets sin depender de fuentes externas.

Autenticación integrada

Sistema de autenticación basado en credenciales (email/contraseña) listo para usar, con gestión de sesiones segura y soporte para proveedores OAuth mediante NextAuth v5 (beta).

Editor visual drag-and-drop

Configuración completa del dashboard mediante interfaz gráfica: creación de tableros, grupos, widgets y enlaces sin editar archivos de configuración YAML.

Cifrado de secretos

Las credenciales y claves API de las integraciones se almacenan cifradas en la base de datos mediante una clave de cifrado configurable (SECRET_ENCRYPTION_KEY).

CLI de administración

Interfaz de línea de comandos (homarr) incluida en la imagen para migraciones de base de datos, gestión de usuarios, generación de secretos y otras tareas operativas.

Soporte multi-base de datos

SQLite (better-sqlite3) por defecto para despliegues sencillos; PostgreSQL (node-postgres) como alternativa para entornos de alta concurrencia o replicación.

Redis integrado

Instancia Redis embebida para caché y colas de tareas en segundo plano; configurable como externa mediante variable de entorno REDIS_IS_EXTERNAL.

Proxy inverso incluido

Nginx integrado en la imagen para servir la aplicación, gestionar certificados TLS y encabezados de proxy de confianza (trusted proxies).

Internacionalización

Soporte multiidioma mediante next-intl con detección automática de locale y traducciones gestionadas vía Crowdin.

Requisitos del sistema

  • Motor de contenedores compatible con OCI (Docker, Podman)
  • Arquitectura linux/amd64 o linux/arm64 (imagen multi-plataforma)
  • Mínimo 512 MB RAM disponibles para el contenedor
  • Volumen persistente para /appdata (base de datos SQLite, certificados, configuración Redis)
  • Puerto 7575 accesible en el host o red overlay
  • Generación previa de AUTH_SECRET y SECRET_ENCRYPTION_KEY (64 caracteres hexadecimales cada uno)

Instalación con Docker Compose

Despliegue con Docker (imagen oficial)

La imagen oficial se publica en GitHub Container Registry. El siguiente comando crea un contenedor con volumen persistente, variables de entorno obligatorias y publicación del puerto 7575. Los secretos AUTH_SECRET y SECRET_ENCRYPTION_KEY deben generarse previamente con `openssl rand -hex 32`.

docker run -d \
–name homarr \
–restart unless-stopped \
-p 7575:7575 \
-v /ruta/host/appdata:/appdata \
-e AUTH_SECRET='<64_hex_chars>' \
-e SECRET_ENCRYPTION_KEY='<64_hex_chars>' \
-e DB_URL='/appdata/db/db.sqlite' \
-e DB_DRIVER='better-sqlite3' \
-e DB_DIALECT='sqlite' \
-e AUTH_PROVIDERS='credentials' \
-e REDIS_IS_EXTERNAL='false' \
-e NODE_ENV='production' \
ghcr.io/homarr-labs/homarr:latest

Variables de entorno obligatorias

AUTH_SECRET y SECRET_ENCRYPTION_KEY son requeridos al primer arranque. La aplicación rechazará valores vacíos o inválidos. DB_URL debe ser una ruta absoluta dentro del volumen /appdata para que migraciones y aplicación compartan el mismo archivo SQLite.

# Generar secretos
openssl rand -hex 32 # AUTH_SECRET
openssl rand -hex 32 # SECRET_ENCRYPTION_KEY

Acceder al proyecto

Interfaz web

Accede al dashboard en http://<host>:7575 tras el arranque del contenedor. En el primer acceso se solicita crear la cuenta de administrador (email y contraseña).

CLI integrado

Ejecuta comandos administrativos dentro del contenedor: `docker exec -it homarr homarr –help` muestra subcomandos disponibles (migraciones, usuarios, secretos, etc.).

Casos de uso

  • Portal único de acceso a servicios autoalojados (media servers, descargas, monitorización, infraestructura)
  • Panel de control para homelabs con visualización de estado de contenedores Docker, máquinas virtuales Proxmox, clústeres Kubernetes
  • Frontend unificado para stacks *arr (Sonarr, Radarr, Lidarr, Readarr, Prowlarr) con acciones rápidas y métricas
  • Dashboard familiar o de equipo con autenticación y tableros personalizados por usuario
  • Punto de entrada seguro detrás de proxy inverso (Traefik, Nginx Proxy Manager, Caddy) con TLS terminado en el edge

Configuración avanzada

Base de datos PostgreSQL externa

Para usar PostgreSQL en lugar de SQLite, define DB_DRIVER=node-postgres y DB_URL con la cadena de conexión completa. Las migraciones se aplican automáticamente al arranque.

-e DB_DRIVER='node-postgres' \
-e DB_URL='postgres://usuario:contraseña@host:5432/homarr'

Redis externo

Desactiva la instancia embebida y conecta a un servidor Redis externo (útil para alta disponibilidad o clústeres).

-e REDIS_IS_EXTERNAL='true' \
-e REDIS_HOST='redis' \
-e REDIS_PORT='6379' \
-e REDIS_PASSWORD='opcional' \
-e REDIS_DB='0'

Certificados de confianza personalizados

Monta un directorio con certificados CA personalizados y define LOCAL_CERTIFICATE_PATH para que Homarr valide conexiones TLS a servicios internos con PKI propia.

-v /ruta/certs:/certs:ro \
-e LOCAL_CERTIFICATE_PATH='/certs'

Sockets Docker múltiples

Permite conectar a varios runtimes de contenedores (Docker + Podman) simultáneamente mediante DOCKER_SOCKET_PATHS.

-e DOCKER_SOCKET_PATHS='/var/run/docker.sock,/run/user/1000/podman/podman.sock' \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro

Modo demostración

Activa DEMO_MODE=true para sembrar un usuario demo (demo/demo), un tablero de ejemplo y una integración mock. DEMO_READ_ONLY=false permite escritura en el modo demo.

-e DEMO_MODE='true' \
-e DEMO_READ_ONLY='false'

Gestión y mantenimiento

Actualización de imagen

Descarga la nueva etiqueta y recrea el contenedor preservando el volumen /appdata. Las migraciones de base de datos se ejecutan automáticamente al iniciar la versión nueva.

docker pull ghcr.io/homarr-labs/homarr:latest
docker stop homarr && docker rm homarr
# Volver a ejecutar el comando docker run original con los mismos volúmenes y variables

Migraciones de base de datos manuales

Ejecuta migraciones pendientes sin reiniciar la aplicación usando el CLI interno.

docker exec -it homarr homarr db:migrate

Copia de seguridad de la base de datos SQLite

Copia el archivo de base de datos desde el volumen persistente mientras el contenedor está detenido o en modo solo lectura para evitar corrupción.

docker stop homarr
cp /ruta/host/appdata/db/db.sqlite /ruta/backups/homarr-$(date +%F).sqlite
docker start homarr

Rotación de secretos

Genera nuevos AUTH_SECRET y SECRET_ENCRYPTION_KEY, actualiza las variables de entorno y reinicia. Nota: la rotación de SECRET_ENCRYPTION_KEY invalida secretos de integración cifrados previamente; se requerirá reconfigurarlos.

# Generar nuevos secretos
openssl rand -hex 32
# Actualizar variables de entorno en el sistema de orquestación y reiniciar contenedor

Limpieza de caché Redis

Vacía la base de datos Redis embebida o externa para forzar recarga de datos de integraciones.

docker exec -it homarr redis-cli FLUSHALL

Stack técnico

  • TypeScript
  • Next.js 16 (App Router, Server Components)
  • React 19
  • Mantine UI 9 (componentes, formularios, gráficos, notificaciones)
  • Bun 1.4 (gestor de paquetes, runtime de build)
  • Node.js 24.18 (runtime de producción)
  • SQLite (better-sqlite3) / PostgreSQL (node-postgres)
  • Drizzle ORM (consultas tipadas, migraciones)
  • NextAuth v5 / @auth/core (autenticación)
  • Redis (ioredis) – caché y colas
  • Nginx (proxy inverso, TLS, trusted proxies)
  • Docker multi-stage (Alpine 3.24 runner)
  • tRPC (API tipada end-to-end)
  • TanStack Query (estado servidor, persistencia)
  • Zod (validación de esquemas)
  • Tailwind CSS (utilidades, vía postcss-preset-mantine)
  • Vitest / Playwright (tests unitarios, integración, E2E)
  • Turbo (monorepo, build pipeline)
  • Semantic Release (versionado automático, changelog)

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 *