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.

⚠️
Si estás buscando la vía rápida, ve directamente a la instalación mediante Docker compose.

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.

ℹ️
Recuerda modificar los comandos para que se adapten a tu entorno y necesidades, ya que son comandos de ejemplo.

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.

ℹ️
Para una información más detallada, accede a la documentación oficial de servicios de Homepage.

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.
		     
⚠️
El cómo configurar los widgets lo tienes en su documentación oficial, tan solo tendrás que buscar el que te interesa, y te indican los pasos para ello.

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.

ℹ️
Para una información más detallada, accede a la documentación oficial de configuraciones de Homepage.

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.

ℹ️
Para una información más detallada, accede a la documentación oficial de configuraciones de Homepage.

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.

ℹ️
Para una información más detallada, accede a la documentación oficial de widgets de Homepage.

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