Projets · Ce site

Sous le capot de bertrand-didier.tech.

Un site statique écrit avec Astro, versionné sur GitHub, publié automatiquement sur mon serveur à chaque modification. Le tout monté en une journée, le 1er novembre 2026. Voici comment les pièces s'emboîtent.

Construit avec Claude Code

du git push à la mise en ligne
≈ 20 s
conteneurs Docker pour le site, l'API et les projets sensibles
4
coût ajouté pour les cours de bourse
0 €
des pages servies en HTTPS
100 %

Schéma 1

Le trajet d'une visite.

Un seul serveur répond à trois adresses. Choisissez une requête pour suivre son chemin, du navigateur jusqu'au bon conteneur.

Requête :
VousNavigateurbertrand-didier.tech
HostingerDNSnom → adresse du serveur
VPS Hostinger · Ubuntu 24.04 · Docker
AiguillageTraefikHTTPS, certificats Let's Encrypt
bertrand-didier.technginxles fichiers produits par Astro
…/api/Service marchésNode.js 22, cours en mémoire
sous-domaine réservéWordPresspages composées en PHPMySQL

    Schéma 2

    De mon éditeur au site en ligne.

    Je ne copie jamais de fichiers à la main. Chaque modification poussée sur la branche main déclenche une chaîne automatique, toujours la même.

    0,0 stemps réel, en accéléré

      Mon MacGitHubMon serveur

      Durées mesurées sur les déploiements du jour (entre 18 et 23 secondes au total). Si une étape échoue, le site en ligne reste sur la version précédente.

      Schéma 3

      Les cours de bourse, sans abonnement.

      Le tableau des marchés (actions, indices et OAT 10 ans) est alimenté par un petit service maison. Il interroge Yahoo Finance et CNBC à rythme fixe et garde le résultat en mémoire. Les visiteurs lisent cette copie, si bien que le nombre d'appels aux sources ne dépend pas du trafic.

      00:00une heure simulée
      Le service vers Yahoo Finance et CNBCcours chaque minute · historique 1 an toutes les 30 min
      Les visiteurs vers le servicechaque page ouverte relit le cache toutes les minutes, onglet visible uniquement
      0appels aux sources externes
      0lectures servies depuis le cache (trafic d'exemple)

      938 appels par heure aux sources (15 cours par minute, plus 19 appels d’historique toutes les 30 minutes), qu'il y ait un visiteur ou mille. Les visites montrées ici sont un trafic d'exemple. Les données sont différées et données à titre indicatif.

      Les briques

      Ce qui fait tourner le site.

      RôleOutilPourquoi ce choix
      Nom de domaine et DNSHostingerLe domaine y était déjà. Trois noms pointent vers le serveur : le domaine nu, www et le sous-domaine des projets sensibles.
      ServeurVPS Hostinger, Ubuntu 24.04Un serveur à moi, qui héberge aussi les projets sensibles et mon laboratoire IA.
      ConteneursDockerChaque service vit dans sa boîte et se redémarre sans toucher aux autres.
      Aiguillage et HTTPSTraefik v3 + Let's EncryptIl lit le nom de domaine et le chemin de chaque requête, et renouvelle seul les certificats.
      SiteAstro 7Produit du HTML statique, rapide et sans base de données. Le contenu tient dans un seul fichier.
      Serveur webnginxSert les fichiers produits par Astro, en lecture seule.
      GraphiqueuPlotUne bibliothèque de graphiques très légère (une cinquantaine de Ko).
      Service marchésNode.js 22Une centaine de lignes, sans aucune dépendance à installer.
      Accès privéWordPress + MySQLL'ancien site WordPress, déplacé sur son sous-domaine : une partie dédiée à des projets sensibles, non visibles par le grand public.
      Code et historiqueGit + GitHubChaque modification est tracée et peut être annulée.
      PublicationGitHub Actions + rsync sur SSHConstruit le site et n'envoie que les fichiers modifiés.
      PortraitScript Node.js + sharpLe portrait est calculé à partir de ma photo, puis recoloré.
      BinômeClaude CodeÉcriture du code, configuration du serveur et des déploiements, en dialogue.

      Journal du 1er novembre

      Une journée, un détour, un site en ligne.

      1. Départ

        Un domaine, un serveur, un WordPress

        Le domaine bertrand-didier.tech affichait un site WordPress, déjà installé dans un conteneur sur mon VPS Hostinger.

      2. Détour

        L'hébergement web, une impasse

        Première idée : publier le site depuis Git sur l'hébergement web Hostinger. Mon offre étant de type « AI Builder », elle n'accepte pas de code personnel, ce que le support a confirmé.

      3. Décision

        Tout sur le VPS

        Le WordPress déménage sur son propre sous-domaine et accueille les projets sensibles, non visibles par le grand public ; le domaine principal accueille le nouveau site. Traefik aiguille les deux.

      4. Chaîne

        GitHub, Astro et le déploiement automatique

        Création du dépôt, du site Astro et du workflow GitHub Actions. Un compte dédié sur le serveur reçoit les fichiers, avec une clé SSH qui ne sert qu'à ça.

      5. Données

        Le tableau de marchés

        Le service Node.js met les cours en cache et le graphique uPlot affiche une année en base 100, avec l'OAT 10 ans sur l'axe de droite.

      6. Design

        Trois passes

        Un bandeau avec la Philharmonie de nuit, plusieurs essais de portrait, puis une refonte éditoriale claire : grande typographie, accent brique, et un portrait recoloré qui reste fidèle à la photo.

      Avec Claude

      Un binôme, Claude Code.

      Tout le site a été construit en dialogue avec Claude Code, l’assistant de développement d’Anthropic. Il écrit, configure et vérifie ; je fixe le cap, je relis et je valide.

      heures de travail sur le code
      5
      commits dans l’historique Git
      19
      déploiements réussis, sans échec
      19
      lignes de code et de configuration
      ≈ 2 100

      Ce que fait Claude

      • Écrit le code : pages Astro, styles, service des cours de bourse, workflow de déploiement.
      • Configure le serveur à distance : conteneurs Docker, règles Traefik, déménagement du WordPress.
      • Diagnostique les problèmes, comme la clé du serveur qui avait changé après sa réinstallation ou le graphique qui ne suivait pas la largeur de la fenêtre.
      • Propose le design et l’ajuste à chaque retour, jusqu’au portrait, calculé par un script.
      • Vérifie chaque mise en ligne dans un navigateur, sur ordinateur et sur mobile.

      Ce que je garde

      • Le cap : ce que le site doit montrer et dans quel ordre.
      • Les choix : VPS plutôt qu’hébergement web, design, portrait, contenus.
      • Les gestes sensibles : ajout des clés et des secrets, faits à la main et jamais confiés à l’assistant.
      • La relecture et la décision de publier.

      Chiffres relevés dans le dépôt Git et l’historique GitHub Actions à la sortie de la version 1.1.

      Sécurité

      Les précautions prises.

      Aucun mot de passe ne circule dans la chaîne de publication, et aucun secret n'est écrit dans le code.

      • HTTPS partout

        Traefik obtient et renouvelle automatiquement les certificats Let's Encrypt pour les trois adresses.

      • Clés SSH, pas de mots de passe

        Le compte de déploiement n'a pas de mot de passe. Sa clé est restreinte et ne donne accès qu'au dossier du site.

      • Serveur authentifié

        GitHub vérifie l'empreinte du serveur avant chaque envoi : une machine qui se ferait passer pour lui serait refusée.

      • Secrets chiffrés

        La clé de déploiement est stockée dans les secrets chiffrés de GitHub, jamais dans le dépôt.

      • Lecture seule

        nginx ne peut que lire les fichiers du site. Le service marchés n'est joignable que sur le chemin /api/.

      • Pas de données personnelles

        Le site ne publie ni adresse e-mail ni téléphone : le contact passe par LinkedIn.

      Et ensuite

      Les prochaines rubriques.