Toutes les notes

Un site personnel, entièrement en code

Comment ce site est construit, servi et déployé, et pourquoi le Worker qui le sert ne contient aucune ligne de script.

Un site personnel n’a besoin de presque rien. C’est une bonne raison de le faire proprement : si la chaîne complète tient dans un dépôt, on peut la lire en dix minutes.

Un Worker sans script

Cloudflare Workers sait servir des fichiers statiques directement, sans qu’aucun code ne s’exécute. La configuration complète du Worker est donc celle-ci :

{
  "name": "portfolio",
  "assets": {
    "directory": "./dist",
    "html_handling": "auto-trailing-slash",
    "not_found_handling": "404-page"
  }
}

Astro produit dist/, wrangler deploy l’envoie, et c’est tout. Pas de fonction à maintenir, pas de démarrage à froid, et les en-têtes de sécurité vivent dans un fichier _headers versionné avec le reste.

Qui possède quoi

La seule décision d’architecture un peu intéressante est la frontière entre deux outils qui savent tous les deux parler à Cloudflare.

  • Wrangler possède le Worker et ses domaines personnalisés. Ce sont des choses qui changent avec le code du site.
  • Terraform possède la zone : TLS minimal, HSTS, redirection de www vers le domaine nu. Ce sont des choses qui ne changent presque jamais et qu’on veut relire avant de les toucher.

Aucune ressource n’est gérée par les deux. C’est la règle qui évite qu’un terraform apply défasse ce qu’un déploiement vient de faire.

Une politique de sécurité de contenu sans exception

Astro calcule l’empreinte de chaque script et de chaque feuille de style qu’il émet et écrit la politique correspondante dans la page. Il n’y a donc ni unsafe-inline, ni liste blanche de domaines tiers : le site ne charge rien qui ne vienne de lui-même, polices comprises.

La révision dans le cartouche

Le pied de page est dessiné comme le cartouche d’un plan technique, et sa case « Révision » contient le commit qui a produit la page. C’est un détail, mais il résume l’idée : ce que vous lisez correspond à un état précis du dépôt.