
Guide Strapi 5 : Installation, API, Plugins et Déploiement (2026)
Strapi est un CMS headless open source construit sur Node.js qui vous donne un contrôle total sur votre API, votre base de données et votre déploiement. Contrairement aux plateformes CMS hébergées où vous louez l'accès à l'infrastructure d'un tiers, Strapi tourne sur vos propres serveurs, génère des endpoints REST et GraphQL à partir de vos schémas de contenu, et vous permet de personnaliser chaque couche du backend avec du JavaScript ou du TypeScript ordinaire.
Ce guide porte spécifiquement sur Strapi 5 -- de votre premier npx create-strapi jusqu'au déploiement en production sur Railway ou Strapi Cloud. Chaque exemple de code est prêt à être copié-collé et a été testé contre Strapi 5.x.
| Champ | Valeur |
|---|---|
| Type | CMS headless open source |
| Langage | JavaScript / TypeScript (Node.js) |
| Version actuelle | Strapi 5 |
| Licence | MIT (Community) / Propriétaire (Enterprise) |
| Bases de données supportées | PostgreSQL, MySQL, MariaDB, SQLite |
| Types d'API | REST + GraphQL (tous deux intégrés) |
| Hébergement | Auto-hébergé ou Strapi Cloud |
| Prix Cloud | Gratuit, puis 18 $/mois et plus |
| Étoiles GitHub | 65 000+ |
| Idéal pour | Les équipes souhaitant la propriété totale du code + la personnalisation de l'API |
Qu'est-ce que Strapi et comment fonctionne-t-il ?
Strapi est un système de gestion de contenu auto-hébergé et API-first qui découple votre backend de contenu de votre frontend. Vous définissez des schémas de contenu via un constructeur visuel ou par le code, et Strapi génère automatiquement des endpoints API CRUD -- à la fois REST et GraphQL -- que n'importe quel framework frontend peut consommer. Le panneau d'administration est une interface React où les éditeurs de contenu créent et gèrent des entrées sans toucher au code, selon la documentation officielle de Strapi.
CMS headless vs CMS traditionnel
Un CMS traditionnel comme WordPress couple votre contenu à votre couche de présentation. Vos articles, pages et médias vivent tous dans le même système qui rend le HTML aux visiteurs. Ça fonctionne très bien jusqu'au moment où vous devez diffuser le même contenu simultanément dans une application mobile, un microsite marketing et un portail de documentation.
Un CMS headless supprime entièrement le frontend. Strapi stocke votre contenu et le sert sous forme de JSON via des endpoints API. Votre site Next.js, votre application React Native et votre tableau de bord IoT puisent tous au même backend Strapi. Vous obtenez une source de vérité unique avec plusieurs consommateurs.
Si vous évaluez des options au-delà de Strapi, notre comparatif des CMS headless passe en revue les principales plateformes côte à côte.
L'architecture de Strapi
La pile de Strapi est simple : un serveur Node.js s'intercale entre votre base de données (PostgreSQL, MySQL ou SQLite) et vos applications frontend. Le panneau d'administration -- une application React monopage -- se connecte à la même API que vos frontends, simplement avec des permissions élevées.
Voici le flux : votre base de données contient le contenu. La couche ORM de Strapi (construite sur Knex.js) l'interroge. La couche API expose des endpoints REST et GraphQL. Vos frontends -- que ce soit Next.js, Nuxt, Astro, Gatsby ou une application mobile -- récupèrent du JSON depuis ces endpoints. Strapi lui-même ne rend jamais de HTML aux utilisateurs finaux.
Le dépôt GitHub de Strapi compte plus de 65 000 étoiles, ce qui en fait l'un des projets CMS open source les plus populaires de la plateforme.
Quelles sont les nouveautés de Strapi 5 ?
Strapi 5 est une réécriture majeure qui remplace l'API Entity Service par une nouvelle API Document Service, passe de Webpack à Vite pour les builds du panneau d'administration, et introduit TypeScript comme langage par défaut pour les nouveaux projets. Ce ne sont pas des mises à jour incrémentales -- l'architecture interne a changé de façon significative, comme détaillé sur la page de présentation de Strapi 5.
Voici les changements les plus importants pour les développeurs, selon le changelog développeur de Strapi 5 :
- API Document Service remplace l'API Entity Service -- signatures de méthodes plus propres, meilleurs types TypeScript, interface unifiée pour les opérations CRUD
- Refonte de Draft & Publish -- système à deux onglets dans le panneau d'administration séparant les états brouillon et publié
- Content History -- visualisez et restaurez les versions précédentes de n'importe quelle entrée directement depuis l'administration
- Fonctionnalité Preview -- prévisualisez le contenu dans votre vrai frontend avant publication, configurée par type de contenu
- Vite remplace Webpack -- les builds du panneau d'administration sont sensiblement plus rapides (nous avons observé ~60 % d'amélioration des temps de build)
- Approche TypeScript-first -- les nouveaux projets sont générés avec TypeScript par défaut
- AI Content-Type Builder -- générez des schémas de contenu à partir de descriptions en langage naturel ou de designs Figma. C'est nouveau en 2026 et aucun autre CMS headless ne le propose encore
- Réponses API simplifiées -- structure JSON plus plate pour REST et GraphQL
- Nouveau Plugin SDK -- API simplifiée pour créer et distribuer des plugins Strapi
| Fonctionnalité | Strapi 4 | Strapi 5 |
|---|---|---|
| API de service | Entity Service | Document Service |
| Bundler | Webpack | Vite |
| Langage par défaut | JavaScript | TypeScript |
| Système de brouillon | Bascule unique | Deux onglets (brouillon/publié) |
| Historique du contenu | Plugin requis | Intégré |
| Prévisualisation frontend | Non disponible | API de prévisualisation native |
| Format de réponse API | Imbriqué profond | Structure plate |
| Génération de schéma | Manuelle uniquement | IA + manuelle |
Comment installer et configurer Strapi 5 ?
Configurer un projet Strapi 5 prend environ deux minutes. Vous avez besoin de Node.js 18 ou version supérieure, et de npm, yarn ou pnpm. Strapi génère un projet complet avec un panneau d'administration, une connexion à la base de données et une couche API à partir d'une seule commande, comme documenté dans le Guide de démarrage rapide Strapi.
Prérequis
- Node.js 18+ (20 LTS recommandé)
- npm 6+, yarn ou pnpm
- Une base de données : SQLite fonctionne immédiatement pour le développement ; PostgreSQL pour la production
Création de votre premier projet
npx create-strapi@latest my-project
# Invites interactives :
# ? Choose your preferred language: TypeScript
# ? Choose your default database client: sqlite
# ? Start with an example structure?: Yes (recommended for first-timers)
cd my-project
npm run developStrapi démarre sur http://localhost:1337. Votre première visite vous invite à créer un compte administrateur. Ensuite, vous êtes dans le panneau d'administration -- prêt à créer des types de contenu.
Vue d'ensemble de la structure du projet
my-project/
├── config/
│ ├── database.ts # Connexion à la base de données
│ ├── server.ts # Hôte, port, clés d'application
│ ├── admin.ts # Config du panneau d'administration
│ └── plugins.ts # Configuration des plugins
├── src/
│ ├── api/ # Vos types de contenu se trouvent ici
│ │ └── article/
│ │ ├── content-types/
│ │ │ └── article/schema.json
│ │ ├── controllers/article.ts
│ │ ├── routes/article.ts
│ │ └── services/article.ts
│ ├── plugins/ # Plugins personnalisés
│ └── index.ts # Bootstrap/lifecycle de l'app
├── public/ # Fichiers statiques
├── .env # Variables d'environnement
└── package.jsonChaque type de contenu obtient son propre dossier sous src/api/ avec un schéma, un contrôleur, une route et un fichier de service. Strapi les génère automatiquement lorsque vous créez un type de contenu via le panneau d'administration, mais vous pouvez aussi les créer à la main.
Création des types de contenu et gestion du contenu
Les Types de contenu sont le cœur de Strapi -- ils définissent votre schéma de données et génèrent automatiquement des endpoints API, des formulaires dans le panneau d'administration et des tables de base de données. Strapi supporte deux types principaux : les Collection Types (comme les articles de blog ou les produits, où vous avez de nombreuses entrées) et les Single Types (comme une page d'accueil ou des paramètres de site, où une seule entrée existe).
Présentation du Content-Type Builder
Le Content-Type Builder dans le panneau d'administration de Strapi vous permet de définir des schémas visuellement. Vous choisissez des types de champs -- Texte, Texte enrichi, Média, Nombre, Booléen, Relation, Composant, Zone dynamique, JSON, et plus -- et Strapi écrit le fichier de schéma pour vous.
Voici à quoi ressemble un schéma de type de contenu Article sous le capot :
{
"kind": "collectionType",
"collectionName": "articles",
"info": {
"singularName": "article",
"pluralName": "articles",
"displayName": "Article"
},
"attributes": {
"title": {
"type": "string",
"required": true
},
"slug": {
"type": "uid",
"targetField": "title"
},
"content": {
"type": "richtext"
},
"coverImage": {
"type": "media",
"allowedTypes": ["images"]
},
"category": {
"type": "relation",
"relation": "manyToOne",
"target": "api::category.category"
},
"publishedAt": {
"type": "datetime"
}
}
}Vous pouvez aussi utiliser le nouveau AI Content-Type Builder pour générer des schémas à partir d'une description en langage courant comme « J'ai besoin d'un blog avec des articles qui ont des titres, des slugs, du contenu en texte enrichi, des images de couverture et des catégories. » Strapi génère le JSON du schéma et crée la table de base de données. C'est vraiment utile pour le prototypage.
Composants et zones dynamiques
Les composants sont des groupes de champs réutilisables. Pensez-y comme des composants React mais pour la structure du contenu. Un composant « SEO » avec les champs metaTitle, metaDescription et canonicalUrl peut être attaché à n'importe quel type de contenu.
Les zones dynamiques vont encore plus loin -- elles permettent aux éditeurs de contenu de choisir parmi une liste de composants pour construire des mises en page flexibles. Une page d'atterrissage peut avoir un composant Hero, puis une grille de fonctionnalités, puis un carrousel de témoignages, tous choisis et ordonnés par l'éditeur. Ce schéma est populaire pour les sites marketing où chaque page a une structure différente.
Gestion du contenu avec Draft & Publish
Strapi 5 a remanié le système Draft & Publish. Au lieu d'une simple bascule, vous avez maintenant deux onglets distincts dans le Content Manager -- un pour votre version brouillon, un pour la version publiée. Les éditeurs peuvent modifier librement le brouillon sans affecter le contenu en ligne. Quand ils sont prêts, ils publient, et le brouillon devient la nouvelle version publiée. Content History vous permet de revenir à n'importe quel état précédent en cas de problème.
Utilisation de l'API Strapi (REST et GraphQL)
Strapi génère automatiquement des endpoints REST et GraphQL pour chaque type de contenu que vous créez. L'API REST est disponible immédiatement -- aucune configuration nécessaire. GraphQL nécessite d'activer le plugin intégré mais prend environ 30 secondes à configurer. Les deux API supportent le filtrage, le tri, la pagination, la sélection de champs et le peuplement des relations, selon la documentation de l'API REST Strapi.
Requêtes REST API
Chaque collection type obtient des endpoints à /api/{pluralName}. Voici comment récupérer des articles avec des filtres et peupler les relations :
// Récupérer les articles publiés, triés par date, avec la catégorie peuplée
const response = await fetch(
'http://localhost:1337/api/articles?' + new URLSearchParams({
'filters[publishedAt][$notNull]': 'true',
'sort': 'publishedAt:desc',
'populate': 'category,coverImage',
'pagination[page]': '1',
'pagination[pageSize]': '10',
'fields[0]': 'title',
'fields[1]': 'slug',
'fields[2]': 'publishedAt'
}),
{
headers: {
'Authorization': `Bearer ${API_TOKEN}`
}
}
);
const { data, meta } = await response.json();
// data : tableau d'articles
// meta.pagination : { page, pageSize, pageCount, total }Strapi 5 a aplati le format de réponse. Dans la v4, vous deviez creuser dans data.attributes.title. Dans la v5, c'est simplement data.title. Un changement mineur, mais un vrai confort au quotidien.
Configuration et requêtes GraphQL
Activez GraphQL en installant le plugin :
npm run strapi install graphqlPuis interrogez sur /graphql :
query GetArticles {
articles(
filters: { publishedAt: { notNull: true } }
sort: "publishedAt:desc"
pagination: { page: 1, pageSize: 10 }
) {
title
slug
publishedAt
category {
name
}
coverImage {
url
alternativeText
}
}
}GraphQL est particulièrement utile quand votre frontend a besoin de relations fortement imbriquées. Au lieu de plusieurs appels REST avec différents paramètres populate, une seule requête GraphQL récupère exactement ce dont vous avez besoin.
Récupérer du contenu Strapi dans Next.js
Voici un exemple pratique de récupération de contenu Strapi dans une page Next.js App Router -- c'est l'une des associations Strapi + framework frontend les plus courantes :
// app/blog/page.tsx
async function getArticles() {
const res = await fetch(
`${process.env.STRAPI_URL}/api/articles?populate=category,coverImage&sort=publishedAt:desc`,
{
headers: {
Authorization: `Bearer ${process.env.STRAPI_TOKEN}`,
},
next: { revalidate: 60 }, // ISR : revalidation toutes les 60 secondes
}
);
if (!res.ok) throw new Error('Failed to fetch articles');
const { data } = await res.json();
return data;
}
export default async function BlogPage() {
const articles = await getArticles();
return (
<main>
{articles.map((article) => (
<article key={article.documentId}>
<h2>{article.title}</h2>
<span>{article.category?.name}</span>
</article>
))}
</main>
);
}Notez documentId dans la v5 -- il remplace le id numérique de la v4. C'est un de ces détails de migration qui peut vous prendre par surprise si vous le ratez.
Contrôleurs, services et routes personnalisés dans Strapi
Les contrôleurs personnalisés sont là où Strapi se distingue vraiment des plateformes CMS headless SaaS comme Contentful ou Sanity. Parce que Strapi tourne sur votre serveur comme une application Node.js, vous pouvez remplacer n'importe quel endpoint auto-généré par votre propre logique métier -- validation des entrées, transformation des données, appels à des API externes, déclencheurs de notifications, tout ce que vous feriez dans une application Express.js. C'est la fonctionnalité qui, à mon sens, pousse les équipes à choisir Strapi plutôt que les alternatives hébergées.
La documentation des contrôleurs Strapi couvre l'API complète. Voici les patterns que j'utilise le plus, basés sur les exemples officiels de services et contrôleurs.
Extension des contrôleurs de base
Strapi fournit une factory createCoreController. Vous l'étendez en surchargeant des actions spécifiques (find, findOne, create, update, delete) tout en conservant le reste du comportement auto-généré :
// src/api/article/controllers/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreController(
'api::article.article',
({ strapi }) => ({
// Surcharge du find par défaut pour ajouter un filtrage personnalisé
async find(ctx) {
// Valider et assainir la requête entrante
const sanitizedQuery = await this.sanitizeQuery(ctx);
// Ajoutez votre logique personnalisée -- par exemple, ne retourner que les articles
// appartenant à l'organisation de l'utilisateur authentifié
const user = ctx.state.user;
if (user?.organization) {
sanitizedQuery.filters = {
...sanitizedQuery.filters,
organization: user.organization.id,
};
}
const { results, pagination } = await strapi
.service('api::article.article')
.find(sanitizedQuery);
const sanitizedResults = await this.sanitizeOutput(results, ctx);
return this.transformResponse(sanitizedResults, { pagination });
},
})
);Écriture de services personnalisés
Les services contiennent la logique métier réutilisable que les contrôleurs (et d'autres services) peuvent appeler. Gardez vos contrôleurs légers et vos services denses :
// src/api/article/services/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreService(
'api::article.article',
({ strapi }) => ({
// Méthode personnalisée : publier l'article et notifier les abonnés
async publishAndNotify(documentId: string) {
const article = await strapi.documents('api::article.article').update({
documentId,
data: { publishedAt: new Date() },
status: 'published',
});
// Appel à un service de notification externe
const subscribers = await strapi
.service('api::subscriber.subscriber')
.find({ filters: { active: true } });
await Promise.allSettled(
subscribers.results.map((sub) =>
fetch(process.env.NOTIFICATION_WEBHOOK, {
method: 'POST',
body: JSON.stringify({
email: sub.email,
article: article.title,
}),
})
)
);
return article;
},
})
);Ajout de routes personnalisées
Enregistrez des routes personnalisées aux côtés des routes CRUD auto-générées :
// src/api/article/routes/custom-article.ts
export default {
routes: [
{
method: 'POST',
path: '/articles/:id/publish-notify',
handler: 'article.publishAndNotify',
config: {
policies: ['admin::isAuthenticatedAdmin'],
},
},
],
};Puis ajoutez le gestionnaire à votre contrôleur :
async publishAndNotify(ctx) {
const { id } = ctx.params;
const article = await strapi
.service('api::article.article')
.publishAndNotify(id);
return this.transformResponse(article);
}Ce type de personnalisation backend est tout simplement impossible avec Contentful ou Sanity -- vous auriez besoin d'une fonction serverless ou d'une couche middleware séparée. Avec Strapi, tout est dans une seule base de code.
Écosystème de plugins et création du vôtre
Le marketplace de plugins de Strapi compte 500+ plugins couvrant tout, des métadonnées SEO aux paiements Stripe. Certains sont officiels (maintenus par l'équipe Strapi), d'autres sont créés par la communauté. La qualité varie -- comme pour les packages npm -- alors vérifiez les étoiles GitHub, les commits récents et la compatibilité avec Strapi 5 avant d'installer.
Plugins essentiels
Ceux-ci sont fournis avec Strapi ou s'installent en une commande :
- GraphQL -- ajoute l'endpoint
/graphqlet le GraphQL Playground - i18n -- support de l'internationalisation avec des variantes de contenu basées sur les locales
- Users & Permissions -- authentification, rôles, accès API public/authentifié
- Upload -- médiathèque avec stockage local, AWS S3 ou providers Cloudinary
- Email -- email transactionnel via SendGrid, Mailgun, Amazon SES ou SMTP
Plugins communautaires à explorer : @strapi/plugin-seo (balises meta et cartes sociales), strapi-plugin-sitemap (sitemaps XML auto-générés), et strapi-plugin-content-versioning (contrôle de version granulaire au-delà du Content History intégré).
Créer un plugin personnalisé (Strapi 5 SDK)
Strapi 5 a introduit un nouveau Plugin SDK qui simplifie le développement de plugins. Le tutoriel officiel sur les plugins parcourt le processus complet, mais l'essentiel est :
- Exécutez
npx @strapi/sdk-plugin init my-pluginpour générer la structure - Définissez les types de contenu, contrôleurs et interface d'administration de votre plugin
- Compilez avec
npm run buildet publiez sur npm
Le choix entre créer un plugin et écrire un contrôleur personnalisé dépend de la réutilisabilité. Si la logique est spécifique au projet, utilisez un contrôleur. Si vous souhaitez la partager entre projets ou avec la communauté, packagisez-la en tant que plugin.
Configuration de la base de données : PostgreSQL, MySQL ou SQLite ?
Strapi supporte PostgreSQL, MySQL, MariaDB et SQLite nativement. SQLite est fourni comme base de données par défaut pour les nouveaux projets parce qu'il ne nécessite aucune configuration -- idéal pour le développement et le prototypage. Pour la production, PostgreSQL est le choix recommandé et celui que l'équipe Strapi teste le plus assidûment.
Voici une configuration PostgreSQL prête pour la production :
// config/database.ts
export default ({ env }) => ({
connection: {
client: 'postgres',
connection: {
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', ''),
ssl: env.bool('DATABASE_SSL', false) && {
rejectUnauthorized: env.bool('DATABASE_SSL_REJECT', true),
},
},
pool: {
min: env.int('DATABASE_POOL_MIN', 2),
max: env.int('DATABASE_POOL_MAX', 10),
},
},
});Si vous hésitez entre les options de base de données, notre comparatif PostgreSQL vs MySQL couvre les différences en profondeur.
| Base de données | Idéale pour | Support Strapi | Prête pour la production ? |
|---|---|---|---|
| PostgreSQL | Charges de production, requêtes complexes, champs JSON | Principale (la plus testée) | Oui |
| MySQL 8+ | Équipes déjà sur une infrastructure MySQL | Support complet | Oui |
| MariaDB | Alternative compatible MySQL | Support complet | Oui |
| SQLite | Développement local, prototypage, CI/CD | Support complet | Non (écriture unique, pas d'accès concurrent) |
Pour les applications à forte densité de contenu avec plus de 10 000 entrées, PostgreSQL avec connection pooling (PgBouncer) gère bien la charge. SQLite commence à montrer des problèmes de contention d'écriture à quelques centaines de requêtes concurrentes -- acceptable pour un admin de blog, problématique pour une API à fort trafic.
Déploiement de Strapi en production
Le déploiement en production est là où la plupart des guides Strapi s'arrêtent -- et là où la plupart des développeurs bloquent. Strapi a besoin d'un serveur Node.js persistant (ce n'est pas un site statique), d'une base de données, d'un stockage de médias et d'une configuration d'environnement appropriée. Vous avez deux voies : Strapi Cloud (géré) ou l'auto-hébergement sur des plateformes comme Railway, Render ou DigitalOcean, comme décrit dans la documentation de déploiement Strapi.
Strapi Cloud (géré)
Strapi Cloud est l'option d'hébergement officielle. Elle gère le provisionnement du serveur, la gestion de la base de données, le CDN et les sauvegardes. Voici les paliers :
| Palier | Prix | Projets | Appels API | Sièges | Stockage |
|---|---|---|---|---|---|
| Gratuit | 0 $/mois | 1 | 10 K/mois | 1 | 500 Mo |
| Essential | 18 $/mois | 1 | 500 K/mois | 3 | 25 Go |
| Pro | 90 $/mois | Illimité | 2 M/mois | 10 | 100 Go |
| Scale | 450 $/mois | Illimité | 10 M/mois | 25 | 500 Go |
Strapi Cloud est le chemin le plus rapide vers la production. Mais il est encore en maturation par rapport à l'hébergement de Contentful ou Sanity -- moins de régions, contrôles d'accès moins granulaires, et le palier gratuit est assez restrictif. Pour les projets personnels ou les MVP, le palier gratuit fonctionne. Pour les applications en production servant du vrai trafic, vous aurez probablement besoin d'Essential ou Pro.
Auto-hébergement sur Railway ou Render
D'après notre expérience, Railway est le chemin le plus rapide vers une instance Strapi auto-hébergée en production. Vous connectez votre dépôt GitHub, définissez les variables d'environnement, et Railway s'occupe du reste. Pour une comparaison détaillée des plateformes, consultez notre comparatif Railway vs Render.
Voici la configuration d'environnement de production :
# .env.production
NODE_ENV=production
HOST=0.0.0.0
PORT=1337
# Clés d'application (générez des valeurs uniques !)
APP_KEYS=key1,key2,key3,key4
API_TOKEN_SALT=your-api-token-salt
ADMIN_JWT_SECRET=your-admin-jwt-secret
JWT_SECRET=your-jwt-secret
TRANSFER_TOKEN_SALT=your-transfer-token-salt
# Base de données (Railway fournit DATABASE_URL automatiquement)
DATABASE_CLIENT=postgres
DATABASE_HOST=${PGHOST}
DATABASE_PORT=${PGPORT}
DATABASE_NAME=${PGDATABASE}
DATABASE_USERNAME=${PGUSER}
DATABASE_PASSWORD=${PGPASSWORD}
DATABASE_SSL=true
# Stockage des médias (compatible S3)
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
AWS_BUCKET=your-strapi-uploadsSi vous préférez les conteneurs, vous pouvez dockeriser Strapi et déployer n'importe où -- consultez notre guide sur les options de conteneurisation. Railway supporte également Nixpacks pour les builds automatiques sans Dockerfile.
Liste de contrôle avant la mise en production
Avant de passer en ligne, vérifiez ces points :
- Compilez le panneau d'administration : Exécutez
npm run build-- cela compile le React admin pour la production - Gestionnaire de processus : Utilisez PM2 pour maintenir Strapi en fonctionnement et redémarrer automatiquement en cas de plantage
- Health check : Strapi expose
/_health(retourne HTTP 204) -- pointez votre load balancer dessus - Stockage des médias : Passez du stockage local à S3 ou Cloudinary -- le stockage local ne persiste pas sur la plupart des plateformes PaaS
- Reverse proxy : Mettez Nginx ou Caddy devant Strapi pour la terminaison SSL et la mise en cache des fichiers statiques
- Variables d'environnement : Ne committez jamais de secrets. Utilisez la gestion native des variables d'environnement de la plateforme
Strapi vs Sanity vs Contentful : lequel choisir ?
Choisir entre Strapi, Sanity et Contentful dépend de trois choses : si vous avez besoin d'auto-hébergement, comment votre équipe collabore sur le contenu, et vos contraintes budgétaires. Les trois sont des plateformes CMS headless de niveau production, mais elles font des compromis fondamentalement différents. Pour une couverture plus approfondie, consultez notre guide Sanity CMS et notre guide Contentful.
| Critère | Strapi | Sanity | Contentful |
|---|---|---|---|
| Open Source | Oui (MIT) | Non (propriétaire) | Non (propriétaire) |
| Auto-hébergement | Oui (requis ou Cloud) | Non (hébergé uniquement) | Non (hébergé uniquement) |
| Collaboration temps réel | Non | Oui (style Google Docs) | Limitée |
| Langage de requête | REST + GraphQL | GROQ + GraphQL | REST + GraphQL |
| Palier gratuit | Community Edition (illimité) | 500 K requêtes API/mois | 5 utilisateurs, 25 K enregistrements |
| Logique backend personnalisée | Accès Node.js complet | Fonctions serverless uniquement | Webhooks uniquement |
| Gouvernance enterprise | En développement | Solide | La plus solide |
| Courbe d'apprentissage | Moyenne (connaissances Node.js utiles) | Moyenne (GROQ est unique) | Faible à moyenne |
Cadre de décision -- choisissez selon votre contrainte réelle :
| Si vous avez besoin de... | Choisissez | Parce que |
|---|---|---|
| Propriété totale du code + auto-hébergement | Strapi | Seule option open source avec accès backend complet |
| Collaboration éditoriale temps réel | Sanity | Édition multijoueur style Google Docs |
| Conformité enterprise (SOC2, HIPAA) | Contentful | Outils de gouvernance et d'audit les plus matures |
| Budget le plus serré (petite équipe) | Strapi Community | Gratuit indéfiniment, auto-hébergé |
| Gestion de contenu sans code | WordPress | Toujours le plus simple pour les non-développeurs |
| Logique API personnalisée sans services externes | Strapi | Contrôleurs, services et routes dans une seule base de code |
Chez Techsy, nous construisons des architectures CMS headless avec Strapi, Sanity et Contentful. Si vous avez besoin d'aide pour choisir le bon CMS pour votre projet ou souhaitez une configuration Strapi prête pour la production, obtenez une consultation gratuite.
Avantages, inconvénients et quand ne PAS utiliser Strapi
Après avoir testé Strapi 5 sur trois projets clients, voici un bilan honnête. Strapi est excellent pour les équipes qui veulent un contrôle backend total, mais ce n'est pas l'outil adapté à tout le monde.
Avantages :
- Propriété totale du code -- vos données, votre serveur, vos règles
- Licence MIT sans dépendance fournisseur
- TypeScript-first dans la v5 avec une forte inférence de types
- Endpoints REST et GraphQL auto-générés à partir des schémas de contenu
- Communauté active : 65 000+ étoiles GitHub, Discord avec 20 000+ membres
- 500+ plugins dans le marketplace
- Les contrôleurs personnalisés vous offrent la flexibilité backend niveau Express.js
- Strapi Cloud propose une option gérée si vous ne souhaitez pas vous auto-héberger
Inconvénients :
- L'auto-hébergement nécessite du travail ops -- comptez 10 à 20 heures/mois pour les mises à jour, la surveillance et les sauvegardes
- Pas de collaboration temps réel (deux éditeurs peuvent écraser les modifications de l'autre)
- La migration de Strapi 4 vers 5 est laborieuse : Entity Service vers Document Service, nouveaux formats de réponse, lacunes de compatibilité des plugins
- Strapi Cloud est encore en maturation par rapport aux plateformes hébergées de Contentful ou Sanity
- Adoption enterprise plus faible que Contentful -- moins de certifications de conformité
- La personnalisation du panneau d'administration, bien que possible, nécessite une connaissance approfondie des API internes de Strapi
Quand ne PAS utiliser Strapi :
- Besoin de collaboration temps réel -- votre équipe éditoriale travaille simultanément sur le contenu ? Utilisez Sanity. Strapi n'a pas d'édition multijoueur.
- Besoin de gouvernance enterprise et SOC2 -- organisation soumise à des exigences de conformité strictes ? Contentful a une décennie d'avance sur les outils de gouvernance.
- Équipe non technique, sans support développeur -- Strapi nécessite un développeur pour l'installation, le déploiement et la maintenance. Si votre équipe est uniquement composée de marketeurs, envisagez un CMS SaaS ou WordPress.
- Architecture serverless-first -- Strapi a besoin d'un serveur persistant. Si vous construisez entièrement sur des edge functions et du serverless, Sanity ou Contentful s'adaptent mieux.
FAQ
Qu'est-ce que Strapi et comment fonctionne-t-il ?
Strapi est un CMS headless open source construit sur Node.js. Vous définissez des types de contenu via un constructeur visuel ou par le code, et Strapi génère automatiquement des endpoints API REST et GraphQL. Les applications frontend récupèrent le contenu sous forme de JSON depuis ces endpoints. Le panneau d'administration fournit une interface React pour que les éditeurs de contenu gèrent les entrées sans écrire de code.
Strapi est-il gratuit ?
Oui. Strapi Community Edition est gratuit et open source sous licence MIT. Vous pouvez l'auto-héberger sur votre propre serveur sans limites d'utilisation, restrictions de sièges ni plafonds d'appels API. Strapi Cloud (l'option d'hébergement géré) propose un palier gratuit avec 10 000 appels API par mois, avec des plans payants à partir de 18 $/mois pour des limites plus élevées.
Quelle est la différence entre Strapi et Contentful ?
Strapi est open source et auto-hébergé, vous donnant un accès complet au code et la propriété des données. Contentful est une plateforme SaaS propriétaire avec une gouvernance enterprise plus solide, des certifications de conformité et un ensemble d'outils éditoriaux plus large. Choisissez Strapi pour le contrôle du code et la flexibilité budgétaire. Choisissez Contentful pour les besoins de conformité enterprise et les équipes éditoriales plus importantes qui ont besoin d'une infrastructure gérée.
Strapi est-il adapté aux débutants ?
Strapi est accessible aux débutants si vous avez des connaissances de base en Node.js et JavaScript. Le panneau d'administration et le Content-Type Builder sont visuels et intuitifs -- aucun code requis pour la modélisation du contenu. Le déploiement et la logique backend personnalisée nécessitent une expérience en développement. Pour les débutants absolus sans expérience de programmation, WordPress ou un CMS SaaS entièrement géré seraient des points de départ plus faciles.
Quelle base de données Strapi utilise-t-il ?
Strapi supporte PostgreSQL, MySQL, MariaDB et SQLite. Les nouveaux projets utilisent SQLite par défaut pour un développement sans configuration. PostgreSQL est recommandé pour les charges de production -- c'est la base de données la plus testée avec Strapi et elle gère bien les accès concurrents, les requêtes complexes et les types de champs JSON. Vous configurez la connexion à la base de données dans config/database.ts.
Comment déployer Strapi en production ?
Vous pouvez déployer Strapi sur Strapi Cloud (hébergement géré à partir de 18 $/mois), ou l'auto-héberger sur des plateformes comme Railway, Render, DigitalOcean ou AWS. L'auto-hébergement nécessite de configurer un serveur Node.js, une base de données PostgreSQL, des variables d'environnement, un stockage de médias (S3 ou Cloudinary) et un gestionnaire de processus comme PM2. Exécutez npm run build avant le déploiement pour compiler le panneau d'administration.
Strapi est-il meilleur que WordPress ?
Strapi et WordPress résolvent des problèmes différents. Strapi est un CMS headless qui sert des API JSON à n'importe quel frontend -- idéal pour les développeurs qui construisent des applications personnalisées, une diffusion de contenu multi-plateformes ou des sites à forte composante JavaScript. WordPress est un CMS traditionnel qui rend des pages HTML -- mieux adapté aux utilisateurs non techniques qui veulent des thèmes, des constructeurs drag-and-drop et un vaste écosystème de plugins sans écrire de code.
Quels sont les inconvénients de Strapi ?
Les principaux inconvénients sont la charge opérationnelle de l'auto-hébergement (mises à jour, surveillance, sauvegardes), l'absence de collaboration temps réel pour les équipes éditoriales, les frictions de migration entre les versions majeures (de la v4 à la v5, des modifications de code ont été nécessaires), et une offre enterprise moins mature que Contentful. Strapi Cloud atténue la charge d'hébergement mais rattrape encore son retard en termes de fonctionnalités et de disponibilité mondiale.
Strapi peut-il gérer des applications à grande échelle ?
Oui. Strapi peut gérer des applications à grande échelle avec une infrastructure adéquate : PostgreSQL avec connection pooling, mise à l'échelle horizontale derrière un load balancer, CDN pour les ressources médias et Redis pour la mise en cache. Des entreprises comme IBM, NASA et Toyota utilisent Strapi en production. Le goulot d'étranglement est généralement les performances de la base de données et la configuration de l'hébergement, pas Strapi lui-même.
Qu'est-ce que Strapi Cloud et combien coûte-t-il ?
Strapi Cloud est la plateforme d'hébergement géré officielle pour les projets Strapi. Elle gère le provisionnement du serveur, la gestion de la base de données, le CDN et les sauvegardes automatiques. Les tarifs commencent avec un palier gratuit (1 projet, 10 K appels API/mois), puis Essential à 18 $/mois, Pro à 90 $/mois et Scale à 450 $/mois. Chaque palier augmente les limites d'appels API, les sièges d'équipe et la capacité de stockage.