Vue d'ensemble du déploiement headless
En architecture headless, le frontend Next.js et le backend WordPress sont hébergés séparément. Le frontend est déployé sur une plateforme optimisée pour les applications JavaScript (Vercel, Netlify, AWS Amplify), tandis que WordPress reste sur un hébergement PHP classique ou managé.
Pourquoi Vercel pour un frontend Next.js
Vercel est la plateforme créée par l'équipe qui développe Next.js. Elle offre une intégration native avec toutes les fonctionnalités du framework.
~50
régions edge
Réseau mondial de distribution pour des temps de réponse minimaux
<1s
de déploiement à déploiement
Chaque push Git déclenche un build et un déploiement automatique
100%
de compatibilité Next.js
ISR, Server Components, Middleware, Image Optimization natifs
Connecter le dépôt Git
Créer un compte Vercel
Rendez-vous sur vercel.com et connectez-vous avec votre compte GitHub, GitLab ou Bitbucket. Le plan gratuit (Hobby) est suffisant pour un projet personnel ou un prototype.
Importer le dépôt Git
Cliquez sur "New Project" et sélectionnez le dépôt contenant votre application Next.js. Vercel détecte automatiquement le framework et configure les paramètres de build.
Configurer les variables d'environnement
Ajoutez les variables d'environnement nécessaires dans les paramètres du projet Vercel : WORDPRESS_API_URL, WORDPRESS_AUTH_TOKEN, REVALIDATION_SECRET. Ces valeurs sont chiffrées et accessibles uniquement au moment du build et de l'exécution serverless.
Lancer le premier déploiement
Cliquez sur "Deploy". Vercel exécute npm install, puis next build, puis déploie le résultat sur son réseau edge. L'URL de production est disponible immédiatement.
Variables d'environnement
Les variables d'environnement sont configurées dans le tableau de bord Vercel (Settings > Environment Variables). Elles peuvent être définies par environnement : Production, Preview et Development.
# Variables nécessaires pour un frontend headless
WORDPRESS_API_URL=https://admin.votre-site.fr/wp-json
WORDPRESS_AUTH_TOKEN=token_secret_pour_endpoints_protégés
REVALIDATION_SECRET=secret_partagé_pour_webhooks_isr
# Variables optionnelles
NEXT_PUBLIC_SITE_URL=https://www.votre-site.fr
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
Différence entre variables serveur et client
Les variables préfixées par NEXT_PUBLIC_ sont incluses dans le bundle JavaScript envoyé au navigateur. Ne stockez jamais de secrets (tokens, clés API privées) dans des variables NEXT_PUBLIC_. Les variables sans préfixe sont accessibles uniquement côté serveur (Server Components, Route Handlers, fonctions serverless).
Paramètres de build
Vercel détecte automatiquement un projet Next.js et applique les paramètres suivants :
| Paramètre | Valeur par défaut | Personnalisation |
|---|---|---|
| Framework Preset | Next.js | Automatique |
| Build Command | next build | Modifiable (npm run build) |
| Output Directory | .next | Automatique |
| Install Command | npm install | Modifiable (pnpm install, yarn) |
| Node.js Version | 18.x | Configurable (18.x, 20.x) |
Preview Deployments
Chaque pull request ou push sur une branche non-production génère automatiquement un "Preview Deployment" avec une URL unique. Cette fonctionnalité permet de vérifier visuellement les modifications avant de les fusionner.
# Exemple d'URL de preview
https://votre-projet-git-branch-name-votre-equipe.vercel.app
Les preview deployments utilisent les variables d'environnement de l'environnement "Preview", ce qui permet de pointer vers un serveur WordPress de staging si nécessaire.
Domaine personnalisé
La configuration du domaine personnalisé s'effectue dans Settings > Domains :
- Ajoutez votre domaine (par exemple
www.votre-site.fr) - Configurez les enregistrements DNS chez votre registrar :
CNAME:wwwverscname.vercel-dns.comA:@vers76.76.21.21(pour le domaine apex sans www)
- Vercel génère et renouvelle automatiquement le certificat SSL
Séparation des domaines
Utilisez des domaines ou sous-domaines distincts pour le frontend et le backend. Par exemple : www.votre-site.fr pour le frontend Next.js et admin.votre-site.fr pour le back-office WordPress. Cette séparation clarifie l'architecture et facilite la gestion des certificats SSL et des règles DNS.
Hébergement WordPress : les options
Le backend WordPress nécessite un hébergement PHP avec MySQL. Plusieurs options existent selon les besoins de performance et de budget.
En mode headless, les performances du serveur WordPress ont moins d'impact sur l'expérience utilisateur car les pages sont pré-générées (SSG) ou mises en cache (ISR). Le serveur WordPress est sollicité principalement au moment du build et lors des revalidations.
Pipeline CI/CD : déploiement automatique
Le pipeline CI/CD avec Vercel fonctionne automatiquement :
- Push sur
main: déclenche un déploiement en production - Push sur une branche : déclenche un preview deployment
- Pull request : crée un preview deployment et ajoute un commentaire avec l'URL
Aucune configuration CI/CD supplémentaire n'est nécessaire. Pour des besoins avancés (tests avant déploiement, linting), ajoutez des GitHub Actions en complément.
# .github/workflows/ci.yml — tests avant déploiement
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run lint
- run: npm run test
Revalidation à la demande (On-Demand ISR)
L'ISR (Incremental Static Regeneration) permet de mettre à jour les pages statiques sans redéployer l'ensemble du site. Un webhook WordPress déclenche la revalidation lorsqu'un contenu est modifié.
// app/api/revalidate/route.ts
import { revalidatePath } from 'next/cache';
import { NextRequest, NextResponse } from 'next/server';
export async function POST(request: NextRequest) {
const body = await request.json();
const secret = request.headers.get('x-revalidation-secret');
if (secret !== process.env.REVALIDATION_SECRET) {
return NextResponse.json({ message: 'Invalid secret' }, { status: 401 });
}
const { post_type, slug } = body;
if (post_type === 'post') {
revalidatePath(`/articles/${slug}`);
revalidatePath('/articles');
} else if (post_type === 'page') {
revalidatePath(`/${slug}`);
}
revalidatePath('/'); // Revalider la page d'accueil
return NextResponse.json({ revalidated: true });
}
Côté WordPress, un hook envoie la requête de revalidation lors de la publication ou de la mise à jour d'un contenu :
// functions.php — webhook de revalidation ISR
add_action('save_post', function ($post_id) {
if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) return;
$post = get_post($post_id);
if ($post->post_status !== 'publish') return;
wp_remote_post('https://www.votre-site.fr/api/revalidate', [
'headers' => [
'Content-Type' => 'application/json',
'x-revalidation-secret' => REVALIDATION_SECRET,
],
'body' => json_encode([
'post_type' => $post->post_type,
'slug' => $post->post_name,
]),
]);
}, 10, 1);
Monitoring et analytics
Vercel fournit des outils de suivi intégrés :
- Analytics : trafic, pages vues, visiteurs uniques
- Speed Insights : Core Web Vitals mesurés sur les données terrain (LCP, CLS, FID)
- Logs : logs des fonctions serverless et des erreurs de build
- Usage : consommation de bande passante, invocations serverless, temps d'exécution
Plateformes alternatives
Coûts en production
Le plan gratuit de Vercel convient pour un site personnel ou un prototype. En production avec du trafic significatif, le plan Pro (20 $/mois par membre) offre des limites plus élevées en bande passante, en invocations serverless et en membres d'équipe. Les sites à très fort trafic doivent évaluer le plan Enterprise avec des tarifs personnalisés.
Hébergement et mise en ligne - La méthode
Article suivantMigrer d'un WordPress classique vers le headless
Continuer la lecture
Pour aller plus loin