Blog

La stack derrière gramsstyling.com : Medusa v2 et Next.js sur Cloudflare Workers

Comment nous avons remplacé une pile de plugins WooCommerce par une architecture headless : Medusa en moteur, une vitrine Next.js sur Cloudflare Workers, la logique métier en modules réutilisables.

Cet article est le volet technique de notre étude de cas sur la sortie de G.R.A.M.S Styling de WooCommerce. La migration est en cours : la stack décrite ici est construite, chargée avec les vraies données, et tourne derrière Cloudflare Access jusqu’au lancement.

Avant et après

Sous WooCommerce, un seul serveur PHP faisait tout : il générait chaque page, faisait tourner la base de données et hébergeait des dizaines de plugins pour les devises, la livraison, les options produit, le cache, la recherche, les e-mails, la synchronisation marketplace et bien plus. Chaque fonctionnalité était le code de quelqu’un d’autre, avec un seul processus et une seule table d’options en base pour tout le monde, et chaque visiteur attendait ce serveur.

La nouvelle architecture sépare trois choses. La vitrine tourne sur Cloudflare Workers, au plus près du visiteur, et sert des pages en cache. Le moteur e-commerce, Medusa, tourne sur un petit serveur et ne répond qu’aux requêtes qui en ont besoin : paniers, paiement, comptes, administration. Tout ce qui est propre à cette boutique est écrit sous forme de modules Medusa, versionnés et testés comme n’importe quel autre code. Le schéma ci-dessus montre les deux installations côte à côte.

Le moteur e-commerce : Medusa v2

Medusa nous a donné les briques dont une boutique a besoin, et rien d’autre : régions et devises, paniers, commandes, expéditions, clients, une interface d’administration et un système de modules pour étendre le tout. Il tourne sous forme de stack Docker Compose avec Postgres et Redis, gérée par Coolify sur un serveur 2 vCPU. Un workflow GitHub Actions construit et analyse l’image à chaque merge, et le serveur se contente de la récupérer : un déploiement prend environ une minute et demie. La base de données est exportée toutes les heures et copiée hors site, et la restauration a été testée.

Le comportement propre à la boutique repose sur un ensemble de modules sous licence MIT, que nous avons écrits pour qu’ils soient réutilisables sur d’autres boutiques Medusa :

La vitrine : Next.js 16 sur Cloudflare Workers

La vitrine est une application Next.js App Router déployée comme Cloudflare Worker, avec des pages mises en cache en périphérie et revalidées en arrière-plan, si bien que le moteur e-commerce ne voit qu’une petite part du trafic. L’URL porte le marché (/uk, /eu, /us, et des variantes linguistiques comme /eu-fr), avec canonical et hreflang par marché. Le middleware gère les redirections depuis l’ancienne boutique, la suggestion de région selon le pays, le cookie de langue et les en-têtes de sécurité.

Le blog est un site statique distinct, reconstruit automatiquement quand un rédacteur enregistre un article dans l’administration Medusa. Le tableau des ateliers est une page statique derrière Cloudflare Access.

Comment les données ont migré

Chaque enregistrement importé depuis WooCommerce conserve son identifiant d’origine dans ses métadonnées, si bien que la comparaison entre l’ancienne et la nouvelle boutique peut être relancée à tout moment : produits, variantes, prix, poids, clients, commandes, paiements, remboursements et numéros de suivi ont été vérifiés par identifiant, et la dernière exécution n’a montré aucun écart sur les prix. Les commandes passées sur l’ancienne boutique avant le lancement sont importées une à une.

Ce que nous referions

C’est l’architecture que nous proposons désormais à toute entreprise qui a besoin d’une boutique à portée mondiale, rapide grâce au réseau edge et ciblée par marché, avec la qualité d’une boutique de niveau Shopify et sans pourcentage prélevé sur chaque vente. Le headless était le bon choix pour ce catalogue. Les règles d’expédition, les options et les finitions du propriétaire n’entraient dans aucune plateforme hébergée, et les écrire sous forme de petits modules a permis de tester chacun séparément. Placer la vitrine sur Workers a supprimé toute une catégorie de travail d’hébergement. Et conserver les anciens identifiants a fait de chaque audit un script plutôt qu’une supposition.

À lire ensuite

ServicesBlogMarketplaceRéalisationsClientsContact