Changer le thème

Guide complet Astro sur Cloudflare : configuration SSR et accès Chine ×3 plus rapide

Easton editorial illustration: modular system blueprint

La semaine dernière, j’ai aidé un ami à déployer son blog Astro. Après la mise en ligne sur Cloudflare Pages, j’ai testé depuis l’étranger : pages instantanées, expérience fluide. Ses amis en Chine ont attendu près de 5 secondes — gênant.

Cloudflare annonce plus de 300 datacenters et une bande passante gratuite illimitée. Pourquoi l’accès depuis la Chine est-il si lent ? Beaucoup de développeurs se posent la question. Vous avez sans doute entendu parler d’« IP optimisées », mais comment les configurer, y a-t-il un risque pour le compte, et quel est l’effet réel ?

Cet article couvre le déploiement Astro sur Cloudflare : site statique, configuration SSR, puis optimisation pour l’accès depuis la Chine. J’ai fait pas mal d’erreurs sur le chemin ; voici ce que j’en retiens pour vous faire gagner du temps.

Vous apprendrez :

  • Mise en ligne de zéro en environ 20 minutes
  • Les trois modes de l’adaptateur SSR, sans confusion
  • Trois stratégies d’optimisation pour la Chine, avec une latence jusqu’à ×3 plus basse

C’est parti.

Pourquoi choisir Cloudflare Pages

Cloudflare vs Vercel : hébergement gratuit

On me demande souvent : Vercel ou Cloudflare ? Tout dépend de vos besoins.

Les limites de bande passante frappent tout de suite. Vercel gratuit : 100 Go/mois, puis facturation (40 $ par 100 Go). Un de mes projets a explosé en trafic ; la facture Vercel a fait mal. Cloudflare Pages ? Bande passante illimitée, gratuit — rassurant pour les indépendants.

Performances mondiales : Cloudflare compte plus de 300 datacenters. J’ai testé en Europe, Asie et Amériques : latences basses. Vercel est solide, mais avec moins de nœuds. Audience mondiale → avantage Cloudflare.

Protection DDoS : incluse en gratuit, sans config supplémentaire. Lors d’une attaque, Cloudflare a tout bloqué ; je n’ai même pas ouvert les logs. Vercel protège surtout son réseau en gratuit, moins en profondeur pour votre site.

Côté Vercel : cache de build excellent (2e build ~3-4 min). Pages reconstruit souvent entièrement (10+ min). Intégration Next.js : si vous êtes sur Next.js, Vercel reste le choix naturel.

Illimité
Bande passante
Cloudflare Pages gratuit
300+
Nœuds mondiaux
Couverture élargie
×3
Latence
Après optimisation accès Chine

Mes recommandations :

  • Blog Astro statique → Cloudflare Pages
  • Trafic imprévisible → Cloudflare Pages
  • Utilisateur Next.js avancé → Vercel
  • Builds très fréquents → Vercel

Cloudflare Pages vs Workers : évolution 2025

Pages et Workers déploient tous deux Astro — lequel prendre ?

Différence de fond : Workers = calcul serverless en périphérie. Pages = Workers + outillage de build et déploiement (Git, CI). Sous le capot, Pages tourne sur Workers.

En 2025, Cloudflare pousse les nouveaux projets vers Workers pour plus de flexibilité. Pour Astro, ce n’est pas une obligation.

Mon usage :

  • Pages : repo GitHub, push → build auto — idéal pour « déployer vite, sans complexité ».
  • Workers : Wrangler CLI, wrangler.jsonc — variables, liaisons KV, etc.

Pour Astro :

  • static : Pages + Dashboard GitHub
  • server ou hybrid : les deux marchent ; je recommande Pages + Wrangler

Première fois ? Essayez Pages + Git : résultat en quelques minutes. Wrangler peut attendre.

Processus complet de déploiement Astro sur Cloudflare

Déploiement statique : 5 minutes

Blog, doc ou portfolio purement statiques : c’est simple.

Prérequis :

  • Projet sur GitHub
  • Compte Cloudflare (gratuit)

Étapes :

  1. Dashboard Cloudflaredash.cloudflare.com, menu Workers & Pages.
  2. Nouveau projetCreate applicationPagesConnect to Git.
  3. Dépôt GitHub — sélectionner le repo Astro ; autoriser l’accès si demandé.
  4. Build — crucial :
    • Framework preset : Astro
    • Build command : npm run build
    • Build output directory : dist
    • Root directory : vide à la racine, sinon chemin du sous-dossier
  5. DéployerSave and Deploy ; Cloudflare pull, installe, build, déploie.

Vous obtenez votre-projet.pages.dev. Chaque push sur GitHub relance un build.

Problèmes courants :

  • Version Node.js : ajouter .nvmrc ou .node-version avec 18 ou 20.
  • 404 : vérifier que la sortie est dist (ou selon astro.config.mjs).
  • Timeout : réessayer le déploiement.

Domaine personnalisé (optionnel) : Custom domainsSet up a custom domain → CNAME chez votre DNS (ou auto si le domaine est déjà sur Cloudflare DNS).

Déploiement SSR : adaptateur @astrojs/cloudflare

Quand avez-vous besoin du SSR ?

  • Données temps réel (commentaires, stats, login)
  • Logique serveur (API, BDD, auth)
  • Rendu à la demande (gros volumes non pré-rendus)

Blog Markdown pur ? Le statique suffit.

Étape 1 — Installer l’adaptateur :

npx astro add cloudflare

Cela installe le paquet, met à jour astro.config.mjs et crée wrangler.jsonc.

import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';

export default defineConfig({
  output: 'server',
  adapter: cloudflare(),
});

Étape 2 — Mode de rendu :

  1. output: 'server' — tout en SSR ; apps data-driven ; chaque requête coûte un rendu.
  2. output: 'hybrid' (recommandé) — statique par défaut, SSR page par page ; blog + quelques routes dynamiques.
  3. output: 'static' — pas d’adaptateur ; déploiement statique ci-dessus.

Dans ~90 % des cas : hybrid.

export default defineConfig({
  output: 'hybrid',
  adapter: cloudflare(),
});

Page en SSR :

// src/pages/api/comments.js
export const prerender = false;

export async function GET() {
  const comments = await fetchComments();
  return new Response(JSON.stringify(comments));
}

Étape 3 — Liaisons Cloudflare (optionnel) — KV, D1, R2 dans wrangler.jsonc :

{
  "name": "my-astro-app",
  "compatibility_date": "2024-01-01",
  "kv_namespaces": [
    {
      "binding": "MY_KV",
      "id": "your-kv-namespace-id"
    }
  ]
}
export const prerender = false;

export async function GET({ locals }) {
  const { MY_KV } = locals.runtime.env;
  const sessionData = await MY_KV.get('user:123');
  return new Response(sessionData);
}

Étape 4 — Dev local :

npm install wrangler --save-dev
npm run build
npx wrangler pages dev ./dist

Étape 5 — Production :

npx wrangler login
npm run build
npx wrangler pages deploy ./dist

Ou Git intégré (liaisons KV parfois à configurer dans le Dashboard).

Erreurs fréquentes :

  1. Hydration mismatches — désactiver Auto Minify (HTML/CSS/JS) : Dashboard → domaine → Speed → Optimization.
  2. Cannot find module 'MY_KV' — vérifier le binding dans wrangler.jsonc.
  3. 500 — Logs temps réel : Workers & Pages → projet → Logs.

Variables d’environnement et secrets

Local — fichier .dev.vars (à ignorer dans .gitignore) :

DATABASE_URL=postgres://localhost:5432/mydb
API_KEY=your-secret-key-for-dev
export const prerender = false;

export async function GET({ locals }) {
  const apiKey = locals.runtime.env.API_KEY;
}

Production — Dashboard : SettingsEnvironment Variables (Production / Preview).

Secrets :

npx wrangler secret put API_KEY

Clés API et BDD → Secrets ; config publique → variables classiques.

Optimisation de la vitesse d’accès depuis la Chine

Diagnostic : mesurer la vitesse réelle

Ne optimisez pas avant d’avoir mesuré. Audience surtout hors Chine ? La config Cloudflare par défaut peut suffire.

Outils en ligne :

  1. 17ce.com — test multi-province / opérateur ; viser < 200 ms en temps de réponse.
  2. tool.chinaz.com/speedtest — détails de routage.

En local : DevTools → Network → temps du premier chargement.

Repères :

  • < 150 ms : très bien
  • 150–250 ms : acceptable
  • 250 ms ou chargement > 3 s : optimiser

Pourquoi c’est lent ? Anycast + routage ; trafic peut passer par Hong Kong, etc. Les IP/CNAME optimisés visent des nœuds plus directs.

Option 1 : IP optimisées (gratuit, effet maximal)

Latence typique : 280 ms → ~70 ms. Un peu technique ; risques à connaître.

Principe : des centaines d’IP Cloudflare ; certaines sont bien plus rapides depuis la Chine.

Étape 1XIU2/CloudflareSpeedTest :

CloudflareST.exe

Exemple de sortie :

IP地址           延迟    下载速度
104.16.160.10   68ms    15.2MB/s

Étape 2 — DNS : le DNS ne doit pas être chez Cloudflare (DNSPod, Alibaba Cloud, etc.). Sinon l’enregistrement A ne change pas le routage Anycast.

Enregistrement A : @ ou www → IP testée, TTL 600.

Étape 3 — revérifier sur 17ce.com.

Risque (janv. 2025) : Cloudflare a durci les conditions sur les abus ; statut des IP optimisées non explicite.

  • Blog perso : risque faible
  • Site commercial / fort trafic : CNAME public ou résolution par opérateur
  • Contrôle tous les 1–2 mois

Dépannage : cache navigateur, nslookup, retester et changer d’IP si dégradation régionale.

Option 2 : CNAME public optimisé (gratuit, plus stable)

Domaines maintenus par la communauté (exemples — à tester avant usage) :

  • cdn.cloudflare.quest
  • cf.xiu2.xyz

Enregistrement CNAME (DNS hors Cloudflare), TTL 600.

403 Forbidden : retirer le DNS du site chez Cloudflare, supprimer le site dans le Dashboard, attendre quelques minutes.

Vérifier avec nslookup puis 17ce.com.

Bon compromis si vous voulez de l’accélération sans mesurer les IP vous-même.

Option 3 : résolution par opérateur (DNS payant, meilleur résultat)

IPs différentes selon opérateur / région ; défaut pour l’international vers your-project.pages.dev.

Fournisseurs : DNSPod, Alibaba Cloud DNS (Cloudflare DNS ne gère pas le routage par opérateur chinois).

  1. Tester par opérateur avec CloudflareSpeedTest (Telecom, Unicom, Mobile), ou plages courantes (à valider par vos propres tests) :

    • Telecom : 104.16.160.0/24
    • Unicom : 104.23.240.0/24
    • Mobile : 172.64.32.0/24
  2. DNSPod — plusieurs enregistrements avec « type de ligne » différent :

    Enregistrement 1 :
    - Hôte : @
    - Type : A
    - Ligne : Telecom
    - Valeur : 104.16.160.10
    
    Enregistrement 2 :
    - Hôte : @
    - Type : A
    - Ligne : Unicom
    - Valeur : 104.23.240.5
    
    Enregistrement 3 :
    - Hôte : @
    - Type : A
    - Ligne : Mobile
    - Valeur : 172.64.32.8
    
    Enregistrement 4 (défaut, international) :
    - Hôte : @
    - Type : CNAME
    - Ligne : Défaut
    - Valeur : your-project.pages.dev
  3. Enregistrer et attendre la propagation.

Résultat : chaque opérateur chinois vers un nœud rapide ; l’international vers Cloudflare natif.

Coût : DNSPod perso gratuit (basique) ; pro ~20 ¥/mois ; Alibaba selon requêtes.

Pour > 10 000 visites/mois, l’investissement vaut souvent le coup.

Comparaison et surveillance

OptionLatence moy.TTFBChargementCoût
Par défaut280 ms1,8 s3,2 sGratuit
IP optimisées75 ms0,5 s1,1 sGratuit
CNAME public120 ms0,7 s1,5 sGratuit
Par opérateur65 ms0,4 s0,9 s~20 ¥/mois

Gain typique ×3 à ×5.

Surveillance : UptimeRobot, Analytics Cloudflare, Better Uptime. Rappel 1–2 mois : 17ce.com, si > 200 ms relancer CloudflareSpeedTest et mettre à jour le DNS.

Conclusion

Déploiement : Pages + Git pour le statique ; npx astro add cloudflare et hybrid ou server pour le SSR.

SSR : hybrid dans la majorité des cas ; liaisons dans wrangler.jsonc ; .dev.vars en local, Dashboard en prod ; couper Auto Minify si erreur d’hydratation.

Chine : IP optimisées (gratuit, maintenance) ; CNAME public (pratique) ; résolution par opérateur (meilleur, petit coût).

Recommandations : blog perso → 1 ou 2 ; trafic élevé → 3 ; commercial → prudence sur les IP optimisées.

Actions : compte Cloudflare, test 17ce.com, rappel de vérification des IP.

Suite : Workers KV, D1, R2, Pages Functions — à explorer avec Astro.

Si cet article vous a aidé, partagez votre expérience en commentaires.

Guide complet de déploiement Astro sur Cloudflare : de zéro à la mise en ligne

20 minutes de zéro à la production, configuration des trois modes SSR, trois stratégies d'optimisation pour la Chine avec latence jusqu'à ×3 plus basse

⏱️ Estimated time: 20 min

  1. 1

    Step 1: Pourquoi Cloudflare Pages ? Comparaison des plateformes

    Avantages Cloudflare Pages :
    • Bande passante illimitée gratuite (Vercel gratuit : 100 Go/mois, puis 40 $ par 100 Go supplémentaires)
    • Plus de 300 datacenters dans le monde
    • Protection DDoS incluse dans l'offre gratuite

    Avantages Vercel :
    • Excellent cache de build (2e build souvent 3-4 min)
    • Intégration profonde Next.js

    Recommandations :
    • Blog Astro statique → Cloudflare Pages
    • Trafic imprévisible → Cloudflare Pages
    • Utilisateur Next.js avancé → Vercel
    • Itérations et builds fréquents → Vercel
  2. 2

    Step 2: Déploiement site statique : prise en main en 5 minutes

    Pour un projet Astro purement statique (blog, doc, portfolio), le déploiement est très simple.

    Étapes :
    1. Connexion au Dashboard Cloudflare, Workers & Pages, Create application
    2. Connect to Git, autoriser GitHub ou GitLab
    3. Choisir le dépôt du blog
    4. Project name et Production branch
    5. Build command (souvent npm run build) et Build output directory (souvent dist)
    6. Save and Deploy

    Après déploiement :
    • Lien .pages.dev fourni
    • Vérifier l'affichage des pages

    Dépannage :
    • Page blanche → logs de build, répertoire de sortie
    • Échec de build → commande et dépendances
    • Styles manquants → chemins des ressources
  3. 3

    Step 3: Configuration SSR : trois modes de l'adaptateur

    Trois modes :

    1. Statique pur (output: 'static')
    • Pages + GitHub via le Dashboard — le plus simple
    • Blogs, documentation, portfolios

    2. Mode SSR (output: 'server')
    • Pages + Wrangler CLI
    • Contenu dynamique rendu côté serveur

    3. Mode hybride (output: 'hybrid')
    • Pages statiques en SSG, pages dynamiques en SSR
    • SSR et SSG dans un même projet
    • Pages statiques 95+ Lighthouse, pages dynamiques personnalisées

    Configuration :
    1. npx astro add cloudflare
    2. astro.config.mjs (output: 'server' ou 'hybrid' + adaptateur)
    3. Déploiement Pages (Git ou Wrangler CLI)
  4. 4

    Step 4: Optimisation accès Chine : trois approches testées (latence jusqu'à ×3)

    Option 1 — IP optimisées (meilleur effet, maintenance régulière)
    • CloudflareSpeedTest pour trouver la meilleure IP
    • Enregistrement A DNS vers l'IP optimisée
    • Latence typique : 5 s → 1,5 s
    • Vérifier périodiquement (les IP expirent)

    Option 2 — CNAME public (gratuit, effet moyen)
    • Service CNAME public
    • Peu de maintenance

    Option 3 — Résolution par opérateur (coût faible, effet maximal)
    • Chine et international couverts
    • Pour trafic élevé et exigence UX

    Recommandations :
    • Blog perso → option 1 ou 2
    • Trafic important → option 3
    • Projet commercial → prudence avec IP optimisées, privilégier option 3
  5. 5

    Step 5: Écosystème Cloudflare et poursuite d'apprentissage

    Intégrations :
    • Workers KV : cache, sessions
    • D1 : SQLite en périphérie
    • R2 : stockage objet (type S3)
    • Pages Functions : fonctions serverless

    Prochaines étapes :
    1. Créer un compte Cloudflare, tester le déploiement statique
    2. Si accès Chine lent : mesurer sur 17ce.com avant d'optimiser
    3. Rappel pour vérifier périodiquement la validité des IP

FAQ

Pourquoi Cloudflare Pages ? Quelle différence avec Vercel ?
Cloudflare Pages :
• Bande passante illimitée gratuite (Vercel : 100 Go/mois puis 40 $/100 Go — j'ai déjà reçu une facture après un pic de trafic ; Cloudflare : illimité et gratuit)
• Plus de 300 datacenters (tests Europe, Asie, Amériques : latence basse ; Vercel : moins de nœuds si audience mondiale)
• Protection DDoS gratuite (attaque bloquée automatiquement sans que je consulte les logs)

Vercel :
• Cache de build performant (2e build 3-4 min ; Pages reconstruit souvent 10+ min)
• Intégration Next.js profonde

Recommandations : blog Astro statique et trafic imprévisible → Cloudflare ; utilisateur Next.js → Vercel ; builds fréquents → Vercel.
Comment déployer Astro sur Cloudflare Pages ?
Site statique (5 min) : blog, doc ou portfolio purement statiques.

1) Dashboard → Workers & Pages → Create application
2) Connect to Git, autoriser GitHub/GitLab
3) Choisir le dépôt
4) Project name, Production branch
5) Build command (npm run build), output directory (dist)
6) Save and Deploy

Lien .pages.dev fourni. En cas de page blanche, échec de build ou styles manquants : logs, répertoire de sortie, chemins des ressources.
Comment configurer le SSR Astro ? Quels sont les trois modes ?
1) static : Pages + GitHub via Dashboard — contenu statique.
2) server : Pages + Wrangler — rendu dynamique.
3) hybrid : SSG pour le statique, SSR pour le dynamique — flexibilité et performances.

Étapes : npx astro add cloudflare ; astro.config.mjs (output server ou hybrid) ; déploiement Git ou Wrangler.
Comment optimiser la vitesse depuis la Chine ?
Option 1 IP optimisées : CloudflareSpeedTest, enregistrement A, 5 s → ~1,5 s, maintenance périodique.
Option 2 CNAME public : simple, effet moyen.
Option 3 résolution par opérateur : meilleur résultat, petit coût.

Recommandations : blog perso → 1 ou 2 ; trafic élevé → 3 ; commercial → prudence sur IP optimisées.

Actions : compte Cloudflare, test 17ce.com, rappel de vérification des IP.
Cloudflare Pages et Workers : lequel choisir ?
Workers : calcul serverless en périphérie. Pages : Workers + build et déploiement automatisés (Git, CI).

En 2025, Cloudflare oriente les nouveaux projets vers Workers pour plus de contrôle ; pour Astro, Pages reste très pratique.

Pages : GitHub, push → build auto — déploiement rapide.
Workers : Wrangler CLI, wrangler.jsonc — variables, KV, etc.

Astro : static → Pages + Dashboard ; server/hybrid → Pages + Wrangler recommandé. Première fois : essayer Pages + Git.
Quelles autres fonctions de l'écosystème Cloudflare intégrer ?
Workers KV, D1, R2, Pages Functions — intégration possible avec Astro. Le déploiement n'est qu'une première étape ; l'écosystème offre bien d'autres possibilités.

8 min de lecture · Publié le: 3 déc. 2025 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog