Teniendo ya varios servicios en nuestro Homelab, empieza a ser complicado memorizarlos todos, incluso aunque les demos nombre de dominio con herramientas como Pi Hole.
Ha llegado el momento de que configuremos un servicio que nos permita tener una interfaz en la que gestionar y agrupar todas nuestras aplicaciones, esto se conoce como Dashboard, y para este cometido vamos a usar Homepage.
Requisitos
Para proceder con esta guía necesitarás:
- Un servidor donde instalar Homepage.
- Docker funcionando en dicho servidor. Si no lo tienes, puedes seguir esta guía.
- Acceso por terminal o SFTP al servidor de Docker.
Instalación
Se trata de una aplicación de software abierto y gratuita, que podemos instalar de manera sencilla usando Docker. Os voy a dejar tanto la opción de desplegarlo mediante comandos; como haciendo uso de Docker compose para los que lo tengamos habilitado o usemos Portainer.
Usando comandos
Lo primero que suelo hacer, es configurar los volúmenes. En el caso de esta aplicación es algo esencial, ya que será muy conveniente que posteriormente podamos acceder a él. Para estos comandos vamos a dar por hecho que nuestro usuario es user.
Volumen de configuración
Como va a ser un bind volume, es decir, un volumen vinculado, deberemos asegurarnos de que la ruta que queremos vincular existe. En mi caso quiero usar /home/user/homepage/config, así que la creamos ejecutando:
mkdir /home/user/homepage/config
Una vez creada la ruta, deberemos crear el volumen en si. Lanzamos el comando:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/homepage/config \
--opt o=bind \
homepage-config
Esto nos debería generar un nuevo volumen vinculado a la ruta que hemos creado anteriormente. Podemos comprobar que el volumen existe ejecutando:
docker volume inspect homepage-config
Volumen de multimedia
Ahora deberemos repetir esto mismo para otro volumen, en el que podremos subir nuestros iconos y multimedia si fuese necesario, por lo que creamos primero su carpeta:
mkdir /home/user/homepage/media
Ahora su volumen:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/homepage/media \
--opt o=bind \
homepage-media
Y por último comprobamos su correcta creación:
docker volume inspect homepage-media
Lanzado del contenedor
Ya sólo queda la parte final, lanzar nuestro contenedor, para esto haremos uso de docker run, agregando las especificaciones necesarias. Como siempre, recuerda adaptarlo a tus necesidades:
docker run -d \
--name homepage \
--restart unless-stopped \
-p 3000:3000 \
-v homepage-config:/app/config \
-v homepage-media:/app/public/images \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e HOMEPAGE_ALLOWED_HOSTS="*" \
ghcr.io/gethomepage/homepage:latest
Mediante Docker Compose
Este proceso es más rápido, ideal para entornos con Portainer o similares. Lo primero será crear las rutas necesarias. Se está dando por hecho que el usuario es user, recuerda modificarlo a tus necesidades:
mkdir -p /home/user/homepage/{config,media}
A continuación os dejo el fichero docker-compose.yaml para este servicio. ¡Adaptadlo a vuestros requerimientos y entorno!
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
restart: unless-stopped
container_name: homepage
ports:
- 3000:3000
volumes:
- homepage-config:/app/config
- homepage-media:/app/public/images
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
HOMEPAGE_ALLOWED_HOSTS: "*"
volumes:
homepage-config:
driver: local
driver_opts:
type: none
device: /home/user/homepage/config
o: bind
homepage-media:
driver: local
driver_opts:
type: none
device: /home/user/homepage/media
o: bind
Configuración de Homepage
Tras haber instalado Homepage eligiendo el camino que nos haya interesado, podremos acceder a su interfaz, en un navegador accedemos a la IP de nuestro servidor, junto con el puerto por defecto de Homepage, el 3000, algo como http://127.0.0.1:3000/.
Nos aparecerá esto:

Ahora viene lo interesante, configurar a nuestro gusto la interfaz de Homepage. Para esto, deberemos acceder mediante SFTP o SSH a nuestro servidor Docker, e ir a la unidad de homepage-configque hemos bindeado, ya que ahí encontraremos, entre otros, los siguientes ficheros de configuración:
| Fichero | Cometido |
|---|---|
services.yaml |
Fichero principal, donde se definirán los servicios que queremos mostrar, y cómo organizarlos y agruparlos. |
bookmarks.yaml |
Fichero donde podremos configurar qué otras webs queremos tener. Aparecerán como pie de página en el dashboard. |
settings.yaml |
Configuraciones adicionales necesarias. |
widgets.yaml |
Aquí podremos configurar algunos widgets del propio Homepage, como el que nos muestra el espacio en disco y el uso de recursos de donde se está alojando Homepage. |
Cada uno de estos tiene su propia estructura, así que iremos yendo uno a uno:
Configuración de services.yaml
Como se ha mencionado anteriormente, se trata del fichero que más vamos a manipular, ya que, cada vez que tengamos un nuevo servicio en nuestro homelab, será aquí donde lo demos luego de alta para visualizarlo en nuestro dashboard.
Tiene la siguiente estructura, dejando como ejemplo una entrada para Proxmox y otra para Portainer:
- Grupo 1:
- Proxmox:
href: https://proxmox.homelab.local:8006
icon: proxmox.png
description: Servidor de virtualización Proxmox
siteMonitor: https://proxmox.homelab.local
widget: #Es opcional, hay servicios que no lo tienen.
type: proxmox #Cambiará dependiendo de tu servicio.
url: https://proxmox.homelab.local:8006
username: #Usuario de api, algo como: userapi@pam!homepage
password: #Contraseña de la API, es un UUID8.
node: #Nombre de tu nodo.
- Grupo 2:
- Portainer:
href: https://portainer.homelab.local:9443/
icon: portainer.png
description: Servidor de contenedores Docker con Portainer
siteMonitor: https://portainer.homelab.local:9443
widget:
type: portainer
url: https://portainer.homelab.local:9443
env: #El ID del entorno a monitorizar.
key: #Key generada para la AIP.
Podríamos tener varios servicios en cada grupo, y por supuesto los grupos que deseemos.
Configuración de settings.yaml
Aquí definiremos configuraciones más generales, como el nombre que aparece en la pestaña, el icono o el fondo de nuestro dashboard. También podremos especificar el layout.
Adjunto un ejemplo:
title: Homelab Dashboard
headerStyle: boxedWidgets
theme: dark
color: blue
cardBlur: sm
layout:
Servers:
style: row
columns: 3
icon: mdi-server-#FFFFFF
Unifi:
icon: unifi.png
Networking:
icon: mdi-network-#FFFFFF
Security:
icon: mdi-shield-lock-#FFFFFF
Management:
icon: mdi-auto-fix-#FFFFFF
Monitoring:
icon: mdi-list-status-#FFFFFF
Automation:
icon: mdi-cog-play-#FFFFFF
Services:
style: row
columns: 3
icon: mdi-home-#FFFFFF
Other:
header: false
style: row
columns: 1
Configuración de bookmarks.yaml
Pensado para tener un acceso rápido a diferentes webs o páginas que queramos tener siempre accesibles.
En mi caso, lo he utilizado para guardarme las URLs de mi blog y mi GitHub, aunque planeo ampliarlo poco a poco a medida que vaya necesitando. Aquí tenéis el ejemplo:
---
- Webpages:
- Runesoft Blog:
- icon: si-ghost-#FFFFFF
href: https://blog.runesoft.net
- GitHub:
- icon: si-github-#FFFFFF
href: https://github.com/RubenMorPov
Al igual que el fichero de services.yaml, se pueden agrupar los vínculos como prefiramos.
Configuración de widgets.yaml
En este último fichero, podremos configurar el comportamiento de los widgets que vienen de forma general por defecto con Homepage, como puede ser el calendario, el tiempo, o la información de los dispositivos del host en el que lo alojamos.
En mi caso, lo he dejado como está:
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/info-widgets/
- resources:
cpu: true
memory: true
disk: /
- search:
provider: duckduckgo
target: _blank
Resultado Final
Tras ciertas configuraciones y customizaciones, podremos terminar teniendo un dashboard bastante cómodo, con todo lo que necesitemos a nuestro alcance y bien organizado, como este ejemplo que os dejo aquí:

Conclusión
Con esta guía hemos aprendido en qué consiste un dashboard para nuestro Homelab, y configurado uno con Homepage, para tener todo más organizado.
También se han cubierto los diferentes archivos de configuración para dejarlo lo más a nuestro gusto posible.
Referencias
- Documentación oficial: Home - Homepage
- Vídeo del que obtuve la idea, de Christian Lempa: https://www.youtube.com/watch?v=j9kbQucNwlc&pp=ygUSaG9tZXBhaGUgZGFzaGJvYXJk