Homarr: Panel de control moderno para servicios autoalojados

Publicado por


homarr
Dashboard

Homarr: Panel de control moderno para servicios autoalojados

Dashboard extensible con más de 80 integraciones, 20.000 iconos, autenticación integrada y configuración visual sin YAML.

Vídeo tutorial en YouTube

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

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

Homarr es una aplicación de panel de control (dashboard) diseñada para entornos de autoalojamiento (self-hosting). Permite centralizar el acceso y la monitorización de servicios como *arr (Sonarr, Radarr, Lidarr), clientes de descargas (qBittorrent, Transmission, Deluge), servidores multimedia (Jellyfin, Plex, Emby), infraestructura (Kubernetes, Proxmox, Unifi) y muchos más. Su interfaz se construye mediante arrastrar y soltar, sin necesidad de editar archivos de configuración YAML. Incluye autenticación basada en credenciales, gestión de secretos cifrados y una biblioteca de más de 20.000 iconos listos para usar. El proyecto está licenciado bajo Apache-2.0 y su código se desarrolla en TypeScript con Next.js 16, React 19 y Mantine UI.

Configuración 100 % visual, sin YAML, con autenticación y cifrado de secretos integrados.

Características principales

Integraciones nativas

Más de 80 integraciones oficiales que cubren clientes *arr, descargas, multimedia, monitorización, infraestructura, nube y herramientas de desarrollo.

Biblioteca de iconos

Más de 20.000 iconos vectoriales incluidos (Tabler, Material Design, Simple Icons, etc.) para personalizar cada entrada del tablero.

Autenticación y seguridad

Sistema de autenticación basado en credenciales (next-auth v5 beta) con cifrado de secretos de integración mediante clave de cifrado dedicada (SECRET_ENCRYPTION_KEY).

Editor visual drag-and-drop

Creación y organización de tableros, grupos y widgets mediante interfaz gráfica; sin edición manual de archivos YAML ni JSON.

Base de datos embebida o externa

Soporte nativo para SQLite (better-sqlite3) como opción por defecto sin dependencias externas, y PostgreSQL (node-postgres) para despliegues de alta concurrencia.

Redis integrado opcional

Instancia Redis interna gestionada automáticamente (REDIS_IS_EXTERNAL=false) o conexión a Redis externo para caché y colas.

CLI integrada

Binario `homarr` disponible en la imagen para migraciones, semillas, gestión de usuarios y tareas de mantenimiento desde línea de comandos.

Internacionalización

Soporte multiidioma mediante next-intl con detección automática y selector manual.

Requisitos del sistema

  • Motor de contenedores compatible con OCI (Docker Engine, Podman, containerd).
  • Volumen persistente para `/appdata` (base de datos SQLite, certificados de confianza, caché de Redis interno).
  • Puerto 7575 TCP accesible desde la red deseada (HTTP plano; se recomienda terminación TLS en proxy inverso).
  • Generación previa de `AUTH_SECRET` y `SECRET_ENCRYPTION_KEY` (64 caracteres hexadecimales cada uno, p. ej. `openssl rand -hex 32`).

Instalación con Docker Compose

Crear archivo de entorno

Copia `.env.example` a `.env` y rellena los valores obligatorios. Nunca subas el `.env` poblado a control de versiones.

cp .env.example .env
# Edita .env y define al menos:
# AUTH_SECRET=<64 hex chars>
# SECRET_ENCRYPTION_KEY=<64 hex chars>
# DB_URL=/appdata/db/db.sqlite (ruta absoluta dentro del contenedor)
# Opcional: BASE_URL=https://homarr.tu-dominio.com

Desplegar con Docker Compose (ejemplo mínimo)

El proyecto no incluye un `docker-compose.yml` de producción en el repositorio raíz; el siguiente ejemplo se deriva del `Dockerfile` y las variables documentadas. Ajusta rutas, red y proxy inverso según tu infraestructura.

version: '3.8'

services:
homarr:
image: ghcr.io/homarr-labs/homarr:latest
container_name: homarr
restart: unless-stopped
ports:
– '7575:7575'
volumes:
– ./appdata:/appdata
– /var/run/docker.sock:/var/run/docker.sock:ro
environment:
– AUTH_SECRET=${AUTH_SECRET}
– SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY}
– DB_URL=/appdata/db/db.sqlite
– DB_DRIVER=better-sqlite3
– DB_DIALECT=sqlite
– REDIS_IS_EXTERNAL=false
– NODE_ENV=production
– LOG_LEVEL=info
# – BASE_URL=https://homarr.tu-dominio.com
# Si usas socket de Podman adicional:
# environment:
# – DOCKER_SOCKET_PATHS=/var/run/docker.sock,/run/user/1000/podman/podman.sock

Iniciar la pila

Levanta el contenedor en segundo plano. La imagen ejecuta migraciones de base de datos y genera `AUTH_SECRET` si falta (pero se recomienda definirlo explícitamente).

docker compose up -d

Acceder al proyecto

Interfaz web

Accede a `http://<host>:7575` (o a la `BASE_URL` configurada tras proxy inverso). En el primer arranque se presenta el asistente de configuración inicial para crear el usuario administrador.

CLI administrativa

Ejecuta comandos dentro del contenedor con `docker exec -it homarr homarr <comando>`. Comandos disponibles: `migrate`, `seed`, `user:create`, `user:reset-password`, `integration:list`, etc.

Casos de uso

  • Portal único de acceso a la suite *arr (Sonarr, Radarr, Lidarr, Readarr, Prowlarr) y clientes de descargas.
  • Monitorización de estado y métricas de Jellyfin, Plex, Emby, Immich, Audiobookshelf, Navidrome.
  • Gestión visual de contenedores Docker/Podman, clústeres Kubernetes, hosts Proxmox y dispositivos Unifi.
  • Enlaces rápidos a servicios internos con iconos personalizados y comprobaciones de salud (health checks).
  • Panel de control para equipos domésticos u organizativos con autenticación y control de acceso basado en roles.

Configuración avanzada

PostgreSQL externo

Para entornos de alta disponibilidad o concurrencia, sustituye SQLite por PostgreSQL definiendo `DB_DRIVER=node-postgres` y `DB_URL=postgres://user:pass@host:port/db`. Ejecuta migraciones con `docker exec -it homarr homarr migrate` tras el cambio.

# En .env
DB_DRIVER=node-postgres
DB_URL=postgres://homarr:secret@postgres:5432/homarr

Redis externo

Desactiva la instancia interna y apunta a un servidor Redis dedicado (útil para clústeres o persistencia separada).

# En .env
REDIS_IS_EXTERNAL=true
REDIS_URL=redis://redis:6379

Certificados de confianza personalizados

Monta un directorio con CAs de confianza y define `LOCAL_CERTIFICATE_PATH` para que Homarr valide conexiones TLS a servicios internos con certificados autofirmados.

# En .env
LOCAL_CERTIFICATE_PATH=/appdata/trusted-certificates
# En docker-compose.yml añade:
# volumes:
# – ./certs:/appdata/trusted-certificates:ro

Habilitar integración Kubernetes

Activa la herramienta de Kubernetes (requiere kubeconfig accesible dentro del contenedor).

# En .env
ENABLE_KUBERNETES=true

Modo demostración

Despliega una instancia de solo lectura con usuario `demo`/`demo`, tablero de ejemplo e integración simulada para evaluación.

# En .env
DEMO_MODE=true
DEMO_READ_ONLY=true

Gestión y mantenimiento

Actualizar imagen

Descarga la etiqueta más reciente y recrea el contenedor preservando el volumen `/appdata`.

docker compose pull
docker compose up -d

Ejecutar migraciones de base de datos

Tras actualizaciones que incluyan cambios de esquema, lanza las migraciones manualmente si no se aplican automáticamente al arranque.

docker exec -it homarr homarr migrate

Crear usuario administrador desde CLI

Útil si se pierde el acceso a la interfaz web o para aprovisionamiento automatizado.

docker exec -it homarr homarr user:create –email [email protected] –password 'contraseña_segura' –role admin

Restablecer contraseña de usuario

Permite recuperar acceso sin borrar la base de datos.

docker exec -it homarr homarr user:reset-password –email [email protected] –password 'nueva_contraseña_segura'

Copias de seguridad

Realiza backup del directorio `/appdata` (contiene `db.sqlite`, certificados, configuración de Redis interno). Para PostgreSQL externo, usa `pg_dump` independiente.

tar -czf homarr-backup-$(date +%F).tar.gz ./appdata

Ver logs de la aplicación

Inspecciona la salida estándar del contenedor (nginx, Next.js, Redis interno, entrypoint).

docker logs -f homarr

Stack técnico

  • TypeScript 7
  • Next.js 16 (App Router, Standalone Output)
  • React 19
  • Bun 1.4 (gestor de paquetes y runtime de build)
  • Node.js 24 (runtime de producción)
  • Mantine UI 9 (componentes, formularios, gráficos, notificaciones)
  • Tailwind CSS (utilidades, vía postcss-preset-mantine)
  • Drizzle ORM (SQLite better-sqlite3 / PostgreSQL node-postgres)
  • NextAuth v5 beta (autenticación credentials)
  • i18n: next-intl
  • Redis: ioredis (interno o externo)
  • Nginx (reverse proxy interno, servir estáticos, terminación HTTP)
  • Docker multi-stage (Alpine 3.24 runner)
  • tRPC 11 (API tipada end-to-end)
  • TanStack Query 5 (estado servidor)
  • Zod 4 (validación de esquemas)
  • Integraciones: @ctrl/qbittorrent, @ctrl/deluge, @ctrl/transmission, @jellyfin/sdk, @immich/sdk, @kubernetes/client-node, @homarr/node-unifi, proxmox-api, tsdav (CalDAV/CardDAV), ical.js, mermaid, shiki, codemirror, xterm

Referencias oficiales

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 *