18/03/2026

Faites tourner les Cloudflare Workers directement chez vous

Par admin

Faites tourner les Cloudflare Workers directement chez vous

Pour faire tourner du JavaScript côté serveur, y’a pas que Node.js dans la vie. Y’a maintenant
workerd
(prononcez "worker-dee"), qui est le runtime open source de Cloudflare, celui-là même qui fait tourner les Workers en prod (le service tourne depuis 2017, le runtime est open source depuis 2022), et que vous pouvez l’installer sur votre Debian, votre Mac ou même votre PC Windows avec un simple npx.

Mais alors pourquoi s’embêter avec un énième runtime JS ?

Hé bien parce que celui-ci n’est pas un runtime généraliste. C’est un vrai serveur HTTP pur et dur, basé sur le moteur V8 de Chrome, conçu pour recevoir des requêtes et y répondre. Pas de filesystem, pas d’accès disque sauvage… ici, votre code vit dans un isolate V8, bien cloisonné, et communique avec l’extérieur uniquement via des bindings explicites qu’on appelle des "capabilities". En gros, votre Worker ne peut accéder qu’aux ressources qu’on lui a branchées dans son fichier de config
Cap’n Proto
.

Et cela a plein d’avantages ! Par exemple, les attaques SSRF classiques c’est mort ! Et n’oubliez pas que c’est du JavaScript pur, donc y’a pas d’affreux require('fs') ni de child_process qui traîne.

Et le concept qui tue, ce sont les nanoservices. En fait, faut imaginer des microservices, mais qui tournent tous dans le même processus Linux, sur le même thread. Comme ça quand un nanoservice en appelle un autre, y’a zéro latence TCP, c’est un juste appel de fonction local !

Et vous pouvez en faire tourner des centaines sur un seul serveur parce que les API sont implémentées en C++ natif et tous les isolates V8 partagent le même code compilé en mémoire. C’est carrément pas intuitif, mais visiblement, ça tient la route.

Côté rétrocompatibilité, c’est cool puisque chaque Worker déclare une "date de compatibilité" dans son fichier .capnp. Comme ça, vous fixez compatibilityDate = "2024-06-15" et le runtime vous garantit que les API fetch() et WebCrypto se comporteront toujours comme à cette date-là, même si le binaire a été recompilé 200 fois depuis. Des releases sortant tous les jours, cette garantie n’est pas anecdotique !

Cap’n Proto, un format de sérialisation binaire créé par Kenton Varda, le même gars qui est derrière Protocol Buffers chez Google (excusez du peu). C’est un poil déroutant au début si vous êtes habitués au YAML ou au JSON, mais c’est très efficace et hyper rapide. Et pour ceux qui bossent déjà avec
l’écosystème Cloudflare
parce que vous avez l’Amérique qui coule dans les veines, sachez le runtime s’intègre nickel avec l’outil CLI Wrangler pour le dev local.

Par contre, attention, ce n’est PAS un sandbox sécurisé. Cloudflare le dit cash : si vous faites tourner du code potentiellement malveillant, faudra l’isoler dans une VM KVM ou un conteneur Docker. Hé oui les amis, en prod chez Cloudflare, y’a des couches de sécurité supplémentaires (isolation kernel Linux, patching V8 en urgence, segmentation par profil de risque) que le runtime seul ne fournit pas.

Le problème, c’est surtout Spectre et les bugs du moteur V8… car ça reste du code C++ compilé avec clang derrière. Après, pour du self-hosting de vos propres Workers sur votre VPS Ubuntu, c’est largement suffisant.

Maintenant pour tester concrétement c’est mui rapido.

npx workerd serve config.capnp

Vous écrivez un petit hello.js avec un addEventListener("fetch"), et hop, vous avez un serveur HTTP prêt à répondre sur le port 8080 de votre localhost. Et le truc sympa, c’est qu’on peut aussi l’utiliser comme proxy HTTP programmable !

Comme ça, au lieu de configurer des règles nginx ou Apache absconses, vous écrivez du JavaScript standard avec des Request et Response pour intercepter et router vos requêtes. Franchement, pour du reverse proxy avec de la logique métier, c’est quand même plus lisible que du location ~ ^/api/(.*)$. ^^

D’ailleurs, côté API, tout est basé sur les standards W3C : fetch(), URL, WebCrypto, TextEncoder, les classiques quoi. Donc si vous savez écrire du JS pour Firefox ou Chrome, vous savez écrire pour le moteur des Workers. Pas de modules propriétaires bizarres, contrairement à Node.js et tous ses packages http, net, stream

Bref, c’est costaud, c’est gratuit, et ça tourne partout, avec un dossier samples/ plein de configs prêtes à l’emploi.

Allez, je vous libère,
vous pouvez foncer tester ça !!

Source : korben.info