Mon premier portfolio avait été conçu sous WordPress. Bien que fonctionnel au début, WordPress présentait des inconvénients majeurs pour un simple site vitrine : lourdeur du moteur PHP/MySQL, surface d’attaque permanente liée aux failles de plugins et consommation excessive de mémoire.
J’ai donc fait le choix de repartir sur des bases saines en adoptant un générateur de site statique avec Hugo et en automatisant l’intégralité du cycle de vie du site.
Les avantages du statique pour un profil DevOps
- Performance et réactivité : les pages sont pré-générées lors du build. Le serveur web n’a aucun calcul à effectuer à la requête : le chargement est quasi instantané (< 50 ms).
- Sécurité maximale : sans base de données ni exécution de code côté serveur, la surface d’attaque est nulle.
- Tout sous Git (Git as Single Source of Truth) : le thème, les configurations (
hugo.yml) et les articles en Markdown sont intégralement versionnés dans mon dépôt GitHub.
Pipeline de livraison continue (CI/CD)
flowchart LR
accTitle: Pipeline de livraison continue du portfolio
accDescr: Un push déclenche la génération Hugo et la création d'une image Nginx, publiée dans GHCR puis déployée progressivement sur K3s.
subgraph CI ["Intégration continue"]
direction TB
Source["Code et contenu
Hugo + Markdown"] -->|push sur main| Actions["GitHub Actions"] Actions --> Image["Build Docker multi-stage
Hugo puis Nginx Alpine"] end subgraph CD ["Livraison continue"] direction TB GHCR[("GHCR
image versionnée")] -.->|nouveau digest| Argo["Argo CD"] Argo -->|rolling update| Prod["Portfolio sur K3s
derrière Traefik"] end CI -->|publication de l'image| CD
Hugo + Markdown"] -->|push sur main| Actions["GitHub Actions"] Actions --> Image["Build Docker multi-stage
Hugo puis Nginx Alpine"] end subgraph CD ["Livraison continue"] direction TB GHCR[("GHCR
image versionnée")] -.->|nouveau digest| Argo["Argo CD"] Argo -->|rolling update| Prod["Portfolio sur K3s
derrière Traefik"] end CI -->|publication de l'image| CD
Le déploiement du site repose sur un workflow moderne et entièrement automatisé :
- Build multi-stage avec Docker :
- Étape 1 : l’image
hugomods/hugocompile et minifie l’ensemble des fichiers HTML, CSS et JavaScript. - Étape 2 : les fichiers statiques compilés sont copiés dans une image Nginx Alpine ultra-légère.
- Étape 1 : l’image
- Workflow GitHub Actions : à chaque commit sur la branche
main, l’image Docker est construite, étiquetée et publiée sur le registre de conteneurs GitHub (GHCR). - Déploiement en production : le serveur homelab tire la nouvelle image et redéploie le conteneur sans interruption de service.
- Reverse-proxy Traefik : Traefik intercepte les requêtes sur
rocheralexandre.com, applique la redirection automatique vers HTTPS et gère le renouvellement des certificats SSL Let’s Encrypt.
Accès
Le portfolio est consultable en ligne à cette adresse : https://rocheralexandre.com (vous y êtes déjà !)
