Usando HomePage. El Dashboard - 1

· 7 min · @Self-Hosting · #unRAID #Docker

Después de escuchar el podcast de uGeek, donde hablaba de los dashboards y en especial del que él usaba, Homer, me decidí a probarlo a ver qué tal funcionaba la cosa, porque la idea de tener todo lo que más utilizo al alcance de la mano o la información más importante de tu servidor siempre disponible, pues es interesante. Así que me decidí a instalar y probar Homer.

Al principio no necesitaba nada más, pero poco a poco, cuanto más te adentras en el mundo de los dashboards, ves las infinitas posibilidades que tienes a tu alcance y que en el caso de Homer no me las daba. Así que me decidí a buscar otros que pudieran ampliar la información que me podían mostrar y no encontraba el más adecuado hasta que leí el artículo de Carlos M., donde hablaba de HomePage y de las múltiples opciones que tenía. Y puedo decir que sí, tiene muchas opciones de configuración que te pueden ayudar a visualizar toda la información que puedas necesitar.

◇ Instalación Homepage

Como además, Homer también tiene esta posibilidad, se podía usar a través de Docker. ¿Qué más se podía pedir? Así que me dispuse a crear el container de HomePage. En mi caso, todo lo tengo concentrado en un fichero yaml que contiene todos los dockers que uso:

homepage:
  image: ghcr.io/gethomepage/homepage:latest
  container_name: homepage
  restart: unless-stopped
  ports:
    - 2000:3000
  environment:
    PUID: 1000
    PGID: 1000
  volumes:
    - ${STORAGE}/config/homepage:/app/config
    - /var/run/docker.sock:/var/run/docker.sock
  labels:
    - diun.enable=true

Así se quedó, con un par de opciones más: Transmission, Navidrome, Jellyfin y el uso de CPU, memoria y HDD del servidor. Con esto ya lo tenía todo. Pero, como dice el refrán, siempre deseas lo que tienen los otros… Y así sucedió…

Aquí tengo que hacer un inciso, porque aparte de tener el dashboard de HomePage, otra de las muchas cosas que siempre quiero controlar es el estado de los 2 servidores que tengo ahora mismo (el servidor local y el servidor de Oracle), y esto lo podía controlar a través del docker Glances, que conocí después de leer el artículo que hizo Lorenzo, donde hablaba de él. Una versión resumida de este artículo es que Glances es una especie de htop pero vitaminado.

Así que también lo instalé, porque con él podía obtener toda la información (accediendo a ella a través de la web) de los 2 servidores:

glances:
  image: nicolargo/glances:latest-full
  container_name: glances
  restart: unless-stopped
  pid: host
  privileged: true
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock
    - ${STORAGE}/config/glances/glances.conf:/glances/conf/glances.conf
  environment:
    - TZ=Europe/Madrid
    - GLANCES_OPT=-C /glances/conf/glances.conf -w
  ports:
    - 61208:61208

Sin saberlo, tenía todo lo necesario para obtener mucha más información de la que me estaba facilitando HomePage hasta el momento, y que yo desconocía que se podía obtener, hasta que en el canal de Telegram de HomeLabs.club empezaron a hablar de ello y de las múltiples posibilidades que había, junto con una captura de pantalla de toda la información que se podía obtener. Y yo tenía a mi disposición toda esa información, pero desconocía cómo obtenerla.

Después de pedir ayuda o si me podían facilitar los archivos de configuración que usaban, me los pudieron servir como base para así yo poder hacer mi configuración. Hay que remarcar que para configurar HomePage se necesitan 5 archivos yaml, donde:

settings.yaml

#
# La configuración básica del dashboard (color de fondo, idioma, disposición de la información, etc.)
#
title: HomePage
language: ca

color: slate
headerStyle: boxed
hideVersion: true
useEqualHeights: true

layout:
  servidorLocal:
    header: false
    style: columns
    columns: 3

  Oracle:
    header: false
    style: columns
    columns: 3

  Dockers:
    header: false
    style: row
    columns: 3

  Media:
    header: false
    style: row
    columns: 2

services.yaml

#
# Se configuran los servicios que queremos visualizar por pantalla
#
- servidorLocal:
  - Network:
      widget:
        type: glances
        url: [url]
        metric: network:eth0
        chart: false
  - Memory:
      widget:
        type: glances
        url: [url]
        metric: memory
        chart: false
  - Process:
      widget:
        type: glances
        url: [url]
        metric: process
        
- Oracle:
  - Network:
      widget:
        type: glances
        url: [url]
        metric: network:eth0
        chart: false
  - Memory:
      widget:
        type: glances
        url: [url]
        metric: memory
        chart: false
  - Process:
      widget:
        type: glances
        url: [url]
        metric: process
        
- Dockers:
  - Transmission:
      icon: transmission
      href: [url]
      description: Servidor Transmission
      container: transmission
      widget:
        type: transmission
        url: [url]
        username: [usuario]
        password: [password]

  - aMule:
      icon: https://raw.githubusercontent.com/amule-project/amule/master/amule.png
      href: [url]
      description: Servidor aMule
      container: amule

  - Jackett:
      icon: jackett.png
      href: [url]
      description: Servidor Indexers
      container: jackett
      widget:
        type: jackett
        url: [url]

  - PiHole:
      icon: pi-hole.png
      href: [url]
      description: Servidor PiHole
      container: pihole
      widget:
        type: pihole
        url: [url]
        key: [key]

  - SpeedTest:
      icon: https://cdn.icon-icons.com/icons2/3053/PNG/512/speedtest_macos_bigsur_icon_189707.png
      href: [url]
      container: speedtest
      widget:
        type: speedtest
        url: [url]

  - Scrutiny:
      icon: https://repository-images.githubusercontent.com/289524449/fc01e480-e6ab-11ea-9e20-53257df6f326
      href: [url]
      container: scrutiny
      widget:
        type: scrutiny
        url: [url]

- Media:
  - Jellyfin:
      icon: jellyfin.png
      href: [url]
      description: Servidor Multimedia
      container: jellyfin
      widget:
        type: jellyfin
        url: [url]
        key: [key]

  - Navidrome:
      icon: navidrome
      href: [url]
      description: Servidor Música
      container: navidrome
      widget:
        type: navidrome
        url: [url]
        user: [usuario]
        token: [token]
        salt: [salt]

Lo que podéis hacer (yo lo tengo montado, más información en este artículo) es tener montado vuestro propio buscador y hacer todas las búsquedas en él y así confundir en todo lo posible al Gran Hermano.

widgets.yaml

#
# Donde se puede configurar el buscador o visualizar información del servidor
#
- glances:
    url: [url]
    label: servidorLocal
    cpu: true
    mem: true
    uptime: true

- glances:
    url: [url]
    label: Oracle
    cpu: true
    mem: true
    uptime: true

- search:
    provider: custom
    url: [url]
    focus: true
    target: _blank

- datetime:
    locale: nl
    text_size: xs
    format:
      dateStyle: short
      timeStyle: short
      hourCycle: h23

bookmarks.yaml

#
# Links a las páginas web más utilizadas
#
- Blogs:
  - Personal:
      - href: [url]
        icon: github-light.png
  - uGeek:
      - href: [url]
        icon: blogger.png
  - Lazaro:
      - href: [url]
        icon: blogger.png
  - EruenPlay:
      - href: [url]
        icon: youtube.png

- Social:
  - Mastodon:
      - href: [url]
        icon: mastodon.png
  - Telegram:
      - href: [url]
        icon: telegram.png
  - RiseUp:
      - href: [url]
        icon: mailu.png

Teóricamente, con esta configuración tendría que funcionar todo correctamente y realizar la integración con Docker, pero no era así. En mi caso, no veía ningún tipo de información relacionada con los dockers. Y todo lo que encontraba era que esto tenía que funcionar sí o sí.

Entonces me puse a buscar información del motivo por el cual en mi caso no me funcionaba; también lo pregunté en el canal, pero todo el mundo me decía que tenía que funcionar correctamente y sin ningún problema. Hay que tener en cuenta una cosa: en el canal de Telegram, cuando exponía mi problema, todos los que me decían que tenía que funcionar correctamente lo tenían instalado en Unraid y seguramente Unraid hace alguna cosa para que funcione automáticamente, cosa que si lo haces manualmente y sin Unraid, no funciona.

Después de buscar, encontré en la documentación que hacía referencia a Docker en HomePage que, para que la integración funcionase correctamente, se tenía que instalar un proxy que es el que realiza la comunicación entre Docker y HomePage.

Para ello se necesitaba el siguiente container:

dockerproxy:
  image: ghcr.io/tecnativa/docker-socket-proxy:latest
  container_name: dockerproxy
  environment:
    - CONTAINERS=1
    - SERVICES=1
    - TASKS=1
    - POST=0
  ports:
    - 127.0.0.1:2375:2375
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
  restart: unless-stopped

Una vez que ya lo tienes en funcionamiento, solamente tienes que configurar en el archivo docker.yaml de la siguiente manera:

docker.yaml

my-docker:
  host: dockerproxy
  port: 2375

Una vez esto, solamente tenemos que añadir en el archivo services.yaml la opción server de la siguiente manera:

- Dockers:
  - Transmission:
      icon: transmission
      href: [url]
      description: Servidor Transmission
      server: my-docker
      container: transmission
      widget:
        type: transmission
        url: [url]
        username: [usuario]
        password: [password]

Al final sí, ya lo tenía todo funcionando correctamente. Pero cuando comenté la solución en el canal de Telegram, me dijeron que no hacía falta tener un container más para que todo funcionase, sino que solamente hacía falta crear el siguiente fichero override.conf de la siguiente manera:

sudo mkdir -p /etc/systemd/system/docker.service.d

/etc/systemd/system/docker.service.d/override.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock

Luego solamente nos queda reiniciar el servicio del daemon de Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker.service
sudo netstat -lntp | grep dockerd

Si todo ha ido bien, ya podemos detener el container dockerproxy y modificar el archivo docker.yaml de HomePage de la siguiente manera:

docker.yaml

my-docker:
  host: [IP_SERVIDOR]
  port: 2375

Con esto ya lo tendríamos todo en funcionamiento, y para que veáis cómo lo tengo en mi caso:

Pero eso sí, como dice el refrán: para gustos, colores. Vosotros podéis hacerlo a vuestro gusto.

◇ Referencia