StrapiHeadless CMSAWSDockerDevOpsArchitecture

Strapi Headless CMS sur AWS : Notre Stack Auto-hébergée

Comment KODY déploie Strapi en headless CMS auto-hébergé sur AWS avec Docker, S3 et Let's Encrypt — zéro dépendance SaaS, coûts maîtrisés.

19 mars 2026
Strapi Headless CMS sur AWS : Notre Stack Auto-hébergée

En bref

  • 1Strapi + PostgreSQL + API custom tournent dans Docker Compose sur une EC2, avec médias et cache externalisés sur S3 — zéro coût de plateforme SaaS.
  • 2Le client garde la main sur son contenu via un backoffice sur mesure, sans jamais toucher au code ni dépendre d'un abonnement tiers.
  • 3Let's Encrypt + Certbot assurent le renouvellement SSL automatique tous les 90 jours, CloudWatch surveille, IAM Everywhere sécurise les accès.

Strapi Headless CMS auto-hébergé sur AWS : notre stack sans compromis

Un client formule la demande la plus légitime qui soit : pouvoir modifier son site lui-même, sans appeler un développeur à chaque retouche de texte. Simple en apparence. Structurant dans les choix techniques qui suivent.

On aurait pu aller vite avec un CMS tout-en-un. On a choisi d'aller juste.

Le problème avec les CMS SaaS "clé en main"

Les plateformes comme Contentful, Sanity ou Prismic résolvent le problème à court terme. Mais elles introduisent une dépendance structurelle : hébergement imposé, tarification à l'usage qui s'envole dès que le projet prend de l'ampleur, peu de flexibilité sur la modélisation du contenu.

Pour un client qui veut une solution durable — pas un abonnement de plus à gérer — ce n'est pas la bonne réponse.

Notre choix : Strapi headless, auto-hébergé sur AWS

Strapi est un CMS headless open source. Il expose le contenu via une API REST ou GraphQL, que le front consomme indépendamment. Le client a un backoffice pour gérer ses textes, images, articles — sans jamais ouvrir un fichier de code.

On l'héberge nous-mêmes, sur notre infrastructure AWS. Voici comment.

L'architecture en détail

La couche applicative : Docker Compose sur EC2

Tout le cœur applicatif tourne dans une EC2 au sein d'un VPC Amazon, orchestré par Docker Compose :

  • Strapi — le CMS headless, avec son backoffice et son API de contenu
  • PostgreSQL — la base de données, containerisée au même niveau
  • API Lister — notre API custom, également containerisée

Les trois services communiquent entre eux en réseau Docker interne. Aucun port base de données n'est exposé à l'extérieur.

# docker-compose.yml (structure simplifiée)
services:
  strapi:
    image: strapi/strapi
    depends_on:
      - postgres
    environment:
      DATABASE_CLIENT: postgres
      DATABASE_HOST: postgres

  postgres:
    image: postgres:15
    volumes:
      - pgdata:/var/lib/postgresql/data

  api-lister:
    build: ./api-lister
    depends_on:
      - strapi

Le reverse proxy : Nginx + SSL automatique

Devant l'EC2, une instance EC2 dédiée au reverse proxy fait tourner Nginx. Elle gère :

  • La redirection HTTP → HTTPS
  • Le routage vers les services internes
  • La page d'attente (WaitingPage.js) affichée si l'EC2 principale est en cours de démarrage

Le certificat SSL est fourni par Let's Encrypt via Certbot, avec renouvellement automatique tous les 90 jours. Le certificat est stocké dans un bucket S3 dédié pour la persistance entre redéploiements.

# Renouvellement automatique (cron ou systemd timer)
certbot renew --quiet --deploy-hook "nginx -s reload"

Le démarrage à la demande : API Gateway + Lambda

Pour éviter de laisser l'EC2 tourner 24h/24 inutilement, les requêtes entrantes passent par :

  1. Amazon API Gateway — reçoit la requête
  2. AWS Lambda — évalue si l'EC2 est active, la démarre si besoin (StartInstances)
  3. L'EC2 prend le relais une fois disponible

Ce pattern réduit les coûts d'infrastructure de manière significative pour des projets à trafic intermittent.

Les médias et le cache : externalisés sur S3

Les assets ne sont jamais servis directement depuis l'EC2 :

  • S3 Media librairie — stocke les images et fichiers uploadés via Strapi
  • S3 Cache — stocke les réponses API mises en cache par l'application

Les deux buckets sont servis via AWS Amplify, qui joue le rôle de CDN léger. L'EC2 pousse (Push Media, Push Cache), Amplify tire (get media, get cache).

Sécurité et observabilité

  • AWS IAM Everywhere — chaque service n'a accès qu'aux ressources dont il a besoin (principe du moindre privilège)
  • CloudWatch GetLogs — les logs de tous les containers remontent vers CloudWatch pour monitoring et alerting

Ce que ça change concrètement pour le client

AvantAprès
Modification de contenu → ticket devBackoffice Strapi en autonomie
Abonnement SaaS à l'usageCoût fixe, prévisible
Données chez un tiers USInfra AWS eu-west, données souveraines
Dépendance à une plateformeStack 100% open source

Ce qu'il faut retenir

Cette architecture ne convient pas à tous les projets. Pour un site vitrine simple, un CMS SaaS reste pertinent. Mais dès que le client a des besoins métier spécifiques, des volumes de contenu significatifs, ou une contrainte de souveraineté des données — l'auto-hébergement sur AWS avec Strapi devient la solution la plus robuste et la plus économique à moyen terme.

Le client reprend la main sur son contenu. KODY garde la main sur l'architecture. C'est ça, réduire les frictions sans réduire les ambitions.


Tu veux déployer cette stack pour ton projet ? Parlons-en →

Questions fréquentes

Strapi est open source et auto-hébergeable : pas de coût à l'usage, pas de vendor lock-in, et une personnalisation totale du backoffice et des modèles de contenu. Sur AWS, vous maîtrisez l'infra et les données restent souveraines.

Articles connexes

Vous avez aimé cet article ?