Homepage, pour un beau tableau de bord (dashboard)

C’est sur une discussion reddit que j’ai vu une belle image de « dashboard », et renseignements pris, il s’agissait de Homepage. Cela m’a paru sympa, et pratique pour avoir une vue globale des différents services/applications qui tournent sur mon réseau local et/ou sur mon hébergeur.

Disponible en container Docker (mais aussi pour Unraid ou Kubernetes), Homepage est facile à installer. Il suffit ensuite d’y déclarer ses services, avec pas mal de choses bien pensées qui facilitent leur supervision : que ce soit un container Docker, ou une application pour laquelle un widget est disponible (une centaine d’applications sont listées). Si aucune de ces deux conditions ne sont réunies, il sera toujours possible d’afficher un simple lien et la disponibilité du service.

On peut aussi y ajouter de simples liens vers des sites de son choix via le fichier bookmarks.yalm, une barre de recherche pointant sur le moteur de son choix, ou encore les ressources de la machine (cpu, mémoire, disk). Bref, de quoi se configurer un beau tableau de bord !

Une fois installé et configuré, cela peut donner un truc comme ça :

Voyons ça de plus près…

Installation

À noter tout de même l’avertissement de sécurité :

Homepage n’inclut pas de couche d’authentification, mais permet via ses widgets d’accéder à des informations personnelles. Il est donc recommandé de ne pas l’exposer sans être protégé par un proxy incluant authentification, SSL, etc.. ou derrière un VPN. En ce qui me concerne, rien ne sera exposé, je prévois de ne l’utiliser qu’en local.

J’ai choisi l’installation en mode Docker, via un container. La documentation est ici.

J’en ai profité pour utiliser l’interface d’OMV 7 pour créer le fichier compose. Il suffit d’aller dans Services – Fichiers, puis de créer le fichier en question :

Le contenu du fichier est comme suit, en ayant créé le dossier homepage dans AppData auparavant, comme indiqué :

---
# https://github.com/benphelps/homepage
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - 3000:3000
    volumes:
      - /srv/dev-disk-by-label-DATA/AppData/homepage:/app/config # Make sure your local config directory exists
      - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
    restart: unless-stopped

Important: la ligne concernant docker.sock va permettre d’accéder directement aux containers lors de la configuration des services de type docker.

Il ne reste plus qu’à cliquer sur le bouton « Up » dans l’interface d’OMV. Le service est désormais accessible à l’adresse d’OMV sur le port 3000 (ou celui de votre choix défini ci-dessus).

Configuration

La documentation se trouve ici. C’est assez simple et bien expliqué. On déclare et configure les services dans un fichier services.yaml, les liens dans un fichier bookmarks.yalm, les réglages généraux sont dans un fichier settings.yaml, etc… Tous ces fichiers se trouvent dans /srv/dev-disk-by-label-DATA/AppData/homepage (selon fichier compose ci-dessus).

# pwd
/srv/dev-disk-by-label-DATA/AppData/homepage
# ls
bookmarks.yaml  custom.js    kubernetes.yaml  services.yaml       settings.yaml
custom.css      docker.yaml  logs             services.yaml.good  widgets.yaml

Il y a beaucoup de possibilités, il suffit de parcourir toutes les options et d’appliquer les exemples fournis. Ou de chercher en cas de besoin spécifique.

Les Widgets

Le plus intéressant, ce sont donc les widgets disponibles pour une centaine de services (dans mon cas OMV, Portainer, Plex, Nextcloud, qBittorrent, Pihole), souvent à travers un « web service » ou une API. Exemple pour Nextcloud :

Champs « freespace », « activeusers », numfiles » et « numshares ».

NOTE: pour afficher ces champs par défaut (sans avoir à cliquer sur le service), ajouter showStats: true dans le fichier settings.yaml (sinon le définir au niveau de chaque service). Par défaut, tous les champs disponibles seront affichés, sinon on les définit avec la propriété fields.

Docker socket

D’autres informations seront renvoyées par l’accès au container via la socket Docker.

Nextcloud

On obtient donc ceci :

Et voilà la définition complète pour mon serveur Nextcloud dans le fichiers services.yaml :

    - Nextcloud:
        icon: nextcloud.png
        href: https://nextcloud.xxxxx.yyyy.fr/ 
        description: Serveur Nextcloud
        server: my-docker
        container: nextcloud2023
        widget:
          type: nextcloud
          url: https://nextcloud.xxxxx.yyyy.fr/
          key: SZzC2-sFH3Q-jY2Eg-AaFMk-zzzzz

Pour générer la clef (key) ou le « NC-Token », il faut aller dans l’interface Nextcloud, Paramètres personnels – Sécurité, puis en bas de la page cliquer sur « Créer un nouveau mot de passe d’application ». Après s’être identifié, un token vous est proposé qu’il faudra copier car une fois cliqué sur Terminé, il ne sera plus jamais affiché.

Il faut ensuite le définir au niveau système ; pour ce faire, j’accède au mode console du container grâce à Dockge :

Puis je tape la commande suivante :

root@0e47f46ce787:/# occ config:app:set serverinfo token --value vvvvv-wwwww-xxxxx-yyyyy-zzzzz
Config value token for app serverinfo set to vvvvv-wwwww-xxxxx-yyyyy-zzzzz
root@0e47f46ce787:/# 

Et voilà, le container Nextcloud est configuré ! Je vous laisse découvrir la liste des widgets disponibles et leur syntaxe sur la page de documentation. Il y a aussi des widgets de type « info » capables d’afficher les ressources système ou les infos météo, ou ajouter une barre de recherche…

Portainer

Pour Portainer, il faudra faire deux choses :

Identifier l’environnement : via l’interface, aller dans environnement, puis le sélectionner (« local » par défaut) et observer l’URL du navigateur. Dans mon cas, c’était http://192.168.1.30:9000/#!/endpoints/2, l’ID à utiliser est donc 2.

I va aussi falloir générer une clef. Toujours dans l’interface de Portainer, cliquer en haut à droite sur « my account », puis dans « Access tokens » choisir « Add Access token ». Une fois le token affiché, on le copie et on l’ajoute au service défini dans services.yaml. Qui est comme suit :

    - Portainer:
        icon: portainer.png
        href: http://192.168.1.30:9000/
        description: Portainer, gestion de container Docker
        server: my-docker
        container: portainer
        widget: 
          type: portainer
          url: http://192.168.1.30:9000
          env: 2
          key: ptr_accesskeyaccesskeyaccesskeyaccesskey

Ping et statusStyle

On peut aussi vérifier la disponibilité d’un service non docker avec une fonction de ping (OMV, Pihole, Volumio) et statusStyle pour le format d’affichage. Exemple avec Pihole :

    - Pihole:
        icon: pi-hole.png
        href: http://192.168.1.17:8080/admin
        description: Pihole, bloqueur de pubs et DHCP Serveur
        ping: http://192.168.1.17:8080
        statusStyle: "dot"
        widget:
          type: pihole
          url: http://192.168.1.17:8080/
          #version: 6 # required if running v6 or higher, defaults to 5
          key: yourpiholeapikey # optional      
Après avoir mis à jour mon Pihole à la dernière version soit la 5.18.2 (juin 2024), j’ai du renseigner l’API key, sinon je n’obtenais pas les valeurs.
On la trouve facilement via l’interface de Pihole, dans Settings-API, bouton « Show API token ».
La version 6 n’est pour l’instant disponible qu’en status « beta ».

Les icônes

Autre truc sympa : les icônes sont automatiquement retrouvées depuis Dashboard Icons, il ne suffit plus dès lors qu’à un indiquer le nom du fichier comme nextcloud.png, et Homepage se débrouille du reste. Les autres options (material design, local, etc…) sont détaillées ici.

Conclusion

C’est vraiment très pratique de pouvoir tout avoir sur une page, de visualiser si les services sont bien Up, de pouvoir accéder d’un click au service de son choix pour un besoin quelconque.

Pour ma part, j’ai viré la barre de recherche présente par défaut, laissé les infos système en haut de page, et ajouté mes containers, ainsi qu’OMV, Pihole et Dockge. Dommage que ce dernier ne fasse pas partie de la liste des 100 services pour lesquels un widget a été prévu, je n’ai donc que les infos fournies par la socket Docker. Enfin j’ai ajouté des liens vers les services qui tournent sur mon hébergeur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *