Avec la multiplication des applications hébergées sur mon infrastructure (stockage cloud Nextcloud, multimédia Plex/Komga, métriques Grafana, documentation), j’avais besoin d’une page d’accueil unique, claire et rapide à charger pour centraliser tous les accès. C’est l’objectif d’OnlyHub.
Pourquoi un générateur statique ?
Plutôt que d’installer un tableau de bord complexe dépendant d’une base de données ou de services tiers, j’ai choisi de concevoir ce portail avec Hugo :
- Performance brute : le site est constitué de pages HTML/CSS pré-générées, servies instantanément avec un temps de réponse imperceptible.
- Configuration simplifiée en YAML : chaque service, catégorie d’outils, icône et statut est déclaré dans un fichier de configuration structuré. Ajouter un nouveau conteneur ou réorganiser les liens prend moins de deux minutes.
- Ressources minimales : l’hébergement consomme moins de 15 Mo de mémoire vive sur le serveur.
Chaîne de livraison continue (CI/CD)
flowchart LR
accTitle: Chaîne de livraison continue d'OnlyHub
accDescr: Le contenu versionné déclenche la construction d'une image, puis Argo CD déploie OnlyHub sur K3s derrière Traefik.
subgraph CI ["Intégration continue"]
direction TB
Source["Contenu OnlyHub
Markdown, YAML et icônes"] -->|push sur main| Actions["GitHub Actions"] Actions --> Build["Build Docker
Hugo puis Nginx Alpine"] end subgraph CD ["Livraison continue"] direction TB GHCR[("GHCR
image versionnée")] -.->|nouveau digest| Argo["Argo CD
Image Updater"] Argo -->|rolling update| Prod["OnlyHub sur K3s
derrière Traefik"] end CI -->|publication de l'image| CD
Markdown, YAML et icônes"] -->|push sur main| Actions["GitHub Actions"] Actions --> Build["Build Docker
Hugo puis Nginx Alpine"] end subgraph CD ["Livraison continue"] direction TB GHCR[("GHCR
image versionnée")] -.->|nouveau digest| Argo["Argo CD
Image Updater"] Argo -->|rolling update| Prod["OnlyHub sur K3s
derrière Traefik"] end CI -->|publication de l'image| CD
Le déploiement du portail est entièrement automatisé selon les principes GitOps :
- Commit & Push : chaque modification des fichiers de contenu ou de la configuration est poussée sur le dépôt GitHub.
- GitHub Actions : un workflow automatise le build avec Hugo, minifie les fichiers statiques et construit une image de conteneur minimale basée sur Nginx Alpine.
- Déploiement continu : l’image est publiée sur le registre de conteneurs (GHCR). Le service est ensuite mis à jour en production sans aucune interruption de service (zero-downtime).
- Exposition sécurisée : le trafic passe par le reverse-proxy Traefik avec terminaison TLS et renouvellement automatique des certificats SSL Let’s Encrypt.
Accès
Le portail est en ligne à cette adresse : https://onlymore.net
