Skip to content

Configuration Wrangler Globale

Type de ressource : Configuration Wrangler (Monorepo / Services Cloudflare)
Fichier source : wrangler.toml (racine) et services/[worker-name]/wrangler.toml
Statut : [Actif / Déprécié / En développement]

[Description concise du rîle de cette configuration Wrangler dans l’orchestration des services Cloudflare du monorepo]

  • [Objectif principal : ex. centraliser la configuration de dĂ©ploiement de tous les Workers et bindings du monorepo]
  • [BĂ©nĂ©fice pour l’architecture : ex. cohĂ©rence entre environnements, gestion unifiĂ©e des secrets]
  • Services couverts : [Liste : middleware, form-handler, cms-webhook-receiver, media-upload, media-cleanup, sanity-backup]
  • Environnements : [Production / Staging / Preview]
  • Type de configuration : [Wrangler.toml / Secrets / Variables d’environnement / Bindings]
├── apps/
│ └── web/ # Projet Front-End Astro (Couche 02)
├── services/
│ ├── middleware/ # Worker Middleware Global
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── wrangler.toml
│ │ └── package.json
│ ├── form-handler/ # Microservice formulaires
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── wrangler.toml
│ │ └── package.json
│ ├── cms-webhook-receiver/ # Microservice webhooks
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── wrangler.toml
│ │ └── package.json
│ ├── media-upload/ # Microservice upload prĂ©signĂ©
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── wrangler.toml
│ │ └── package.json
│ ├── media-cleanup/ # Microservice cron nettoyage
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── wrangler.toml
│ │ └── package.json
│ └── sanity-backup/ # Microservice cron sauvegarde
│ ├── src/
│ │ └── index.ts
│ ├── wrangler.toml
│ └── package.json
├── package.json # Scripts monorepo
├── wrangler.toml # Configuration racine (optionnelle)
└── README.md
Composant RĂŽle Type
wrangler.toml (racine) Configuration globale (optionnelle) Config
services/*/wrangler.toml Configuration par service Config
Cloudflare Secrets Variables sensibles injectées Runtime
Cloudflare Dashboard Gestion manuelle des ressources UI
CI/CD Pipeline Déploiement automatisé Infrastructure
services/middleware/wrangler.toml
name = "global-middleware"
main = "src/index.ts"
compatibility_date = "2026-09-01"
compatibility_flags = ["nodejs_compat"]
# Variables non-sensibles
[vars]
ALLOWED_ORIGIN = "https://votresite.com"
# Secrets (injectés via wrangler secret put)
# - SANITY_PREVIEW_SECRET
[env.production]
vars = { ALLOWED_ORIGIN = "https://votresite.com" }
[env.staging]
vars = { ALLOWED_ORIGIN = "https://staging.votresite.com" }
services/form-handler/wrangler.toml
name = "form-handler"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
CRM_ENDPOINT_URL = "https://api.moncrm.com/v1/leads"
# Queue Producer
[[queues.producers]]
queue = "form-submissions-queue"
binding = "SUBMISSIONS_QUEUE"
# Secrets (injectés via wrangler secret put)
# - TURNSTILE_SECRET_KEY
# - CRM_API_KEY
[env.production]
vars = { CRM_ENDPOINT_URL = "https://api.moncrm.com/v1/leads" }
[env.staging]
vars = { CRM_ENDPOINT_URL = "https://staging-api.moncrm.com/v1/leads" }

3.3. Worker cms-webhook-receiver (Récepteur Webhooks)

Section titled “3.3. Worker cms-webhook-receiver (RĂ©cepteur Webhooks)”
services/cms-webhook-receiver/wrangler.toml
name = "cms-webhook-receiver"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
BUILD_HOOK_URL = "https://api.cloudflare.com/client/v4/accounts/XXX/pages/projects/YYY/deploy-hooks/ZZZ"
# KV Namespace (Debouncing)
[[kv_namespaces]]
binding = "WEBHOOK_LOCK_KV"
id = "your-kv-namespace-id"
preview_id = "your-preview-kv-namespace-id"
# Secrets (injectés via wrangler secret put)
# - SANITY_WEBHOOK_SECRET
[env.production]
vars = { BUILD_HOOK_URL = "https://api.cloudflare.com/client/v4/accounts/XXX/pages/projects/YYY/deploy-hooks/ZZZ" }
[env.staging]
vars = { BUILD_HOOK_URL = "https://api.cloudflare.com/client/v4/accounts/XXX/pages/projects/YYY-staging/deploy-hooks/ZZZ" }
services/media-upload/wrangler.toml
name = "media-upload"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
R2_ACCOUNT_ID = "your-account-id"
R2_BUCKET_NAME = "pub-medias"
R2_PUBLIC_DOMAIN = "pub-medias.votredomaine.com"
# R2 Bucket Binding
[[r2_buckets]]
binding = "R2_BUCKET"
bucket_name = "pub-medias"
preview_bucket_name = "pub-medias-staging"
# Secrets (injectés via wrangler secret put)
# - R2_ACCESS_KEY_ID
# - R2_SECRET_ACCESS_KEY
# - CLOUDFLARE_STREAM_API_TOKEN
# - CLOUDFLARE_ACCOUNT_ID
[env.production]
vars = { R2_BUCKET_NAME = "pub-medias" }
[env.staging]
vars = { R2_BUCKET_NAME = "pub-medias-staging" }
services/media-cleanup/wrangler.toml
name = "media-cleanup"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
SANITY_PROJECT_ID = "your-project-id"
SANITY_DATASET = "production"
R2_PUBLIC_DOMAIN = "pub-medias.votredomaine.com"
# R2 Bucket Binding
[[r2_buckets]]
binding = "R2_BUCKET"
bucket_name = "pub-medias"
# Cron Trigger (hebdomadaire, dimanche 3h00)
[triggers]
crons = ["0 3 * * 0"]
# Secrets (injectés via wrangler secret put)
# - SANITY_READ_TOKEN
[env.production]
vars = { SANITY_DATASET = "production" }
[env.staging]
vars = { SANITY_DATASET = "staging" }
services/sanity-backup/wrangler.toml
name = "sanity-backup"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
SANITY_PROJECT_ID = "your-project-id"
SANITY_DATASET = "production"
# R2 Bucket Binding (Bucket dédié aux backups)
[[r2_buckets]]
binding = "R2_BACKUP_BUCKET"
bucket_name = "backups-sanity"
# Cron Trigger (quotidien, 2h00)
[triggers]
crons = ["0 2 * * *"]
# Secrets (injectés via wrangler secret put)
# - SANITY_ADMIN_TOKEN
[env.production]
vars = { SANITY_DATASET = "production" }
[env.staging]
vars = { SANITY_DATASET = "staging" }
Service Secret Description Rotation
middleware SANITY_PREVIEW_SECRET Secret de validation preview 90 jours
form-handler TURNSTILE_SECRET_KEY Clé secrÚte Turnstile 90 jours
form-handler CRM_API_KEY Clé API CRM 90 jours
cms-webhook-receiver SANITY_WEBHOOK_SECRET Secret validation HMAC webhook 90 jours
media-upload R2_ACCESS_KEY_ID ClĂ© d’accĂšs R2 90 jours
media-upload R2_SECRET_ACCESS_KEY Clé secrÚte R2 90 jours
media-upload CLOUDFLARE_STREAM_API_TOKEN Token API Stream 90 jours
media-cleanup SANITY_READ_TOKEN Token lecture Sanity 90 jours
sanity-backup SANITY_ADMIN_TOKEN Token admin Sanity (export) 90 jours
Terminal window
# Injection des secrets pour le service middleware
wrangler secret put SANITY_PREVIEW_SECRET --env production --config services/middleware/wrangler.toml
wrangler secret put SANITY_PREVIEW_SECRET --env staging --config services/middleware/wrangler.toml
# Injection des secrets pour le service form-handler
wrangler secret put TURNSTILE_SECRET_KEY --env production --config services/form-handler/wrangler.toml
wrangler secret put CRM_API_KEY --env production --config services/form-handler/wrangler.toml
# Injection des secrets pour le service cms-webhook-receiver
wrangler secret put SANITY_WEBHOOK_SECRET --env production --config services/cms-webhook-receiver/wrangler.toml
# Injection des secrets pour le service media-upload
wrangler secret put R2_ACCESS_KEY_ID --env production --config services/media-upload/wrangler.toml
wrangler secret put R2_SECRET_ACCESS_KEY --env production --config services/media-upload/wrangler.toml
wrangler secret put CLOUDFLARE_STREAM_API_TOKEN --env production --config services/media-upload/wrangler.toml
# Injection des secrets pour le service media-cleanup
wrangler secret put SANITY_READ_TOKEN --env production --config services/media-cleanup/wrangler.toml
# Injection des secrets pour le service sanity-backup
wrangler secret put SANITY_ADMIN_TOKEN --env production --config services/sanity-backup/wrangler.toml
  • ✅ Les secrets ne sont jamais commitĂ©s dans Git
  • ✅ Les secrets sont injectĂ©s via wrangler secret put (chiffrĂ©s par Cloudflare)
  • ✅ Rotation recommandĂ©e tous les 90 jours
  • ✅ Les secrets sont spĂ©cifiques Ă  chaque environnement (production/staging)
  • ✅ Les secrets ne sont jamais loggĂ©s dans les Workers
Terminal window
# Liste des secrets d'un service
wrangler secret list --config services/form-handler/wrangler.toml --env production
# Suppression d'un secret
wrangler secret delete SECRET_NAME --config services/form-handler/wrangler.toml --env production
// package.json (racine)
{
"name": "monorepo-cloudflare",
"private": true,
"scripts": {
"deploy:all": "npm run deploy:middleware && npm run deploy:form-handler && npm run deploy:cms-webhook-receiver && npm run deploy:media-upload && npm run deploy:media-cleanup && npm run deploy:sanity-backup",
"deploy:middleware": "wrangler deploy --config services/middleware/wrangler.toml --env production",
"deploy:form-handler": "wrangler deploy --config services/form-handler/wrangler.toml --env production",
"deploy:cms-webhook-receiver": "wrangler deploy --config services/cms-webhook-receiver/wrangler.toml --env production",
"deploy:media-upload": "wrangler deploy --config services/media-upload/wrangler.toml --env production",
"deploy:media-cleanup": "wrangler deploy --config services/media-cleanup/wrangler.toml --env production",
"deploy:sanity-backup": "wrangler deploy --config services/sanity-backup/wrangler.toml --env production",
"deploy:staging": "npm run deploy:middleware:staging && npm run deploy:form-handler:staging && ...",
"deploy:middleware:staging": "wrangler deploy --config services/middleware/wrangler.toml --env staging",
"deploy:form-handler:staging": "wrangler deploy --config services/form-handler/wrangler.toml --env staging",
"dev:middleware": "wrangler dev --config services/middleware/wrangler.toml",
"dev:form-handler": "wrangler dev --config services/form-handler/wrangler.toml",
"dev:cms-webhook-receiver": "wrangler dev --config services/cms-webhook-receiver/wrangler.toml",
"dev:media-upload": "wrangler dev --config services/media-upload/wrangler.toml",
"dev:media-cleanup": "wrangler dev --config services/media-cleanup/wrangler.toml --test-scheduled",
"dev:sanity-backup": "wrangler dev --config services/sanity-backup/wrangler.toml --test-scheduled"
}
}
// package.json (racine) - suite
{
"scripts": {
"secrets:list": "wrangler secret list --config services/form-handler/wrangler.toml",
"secrets:rotate": "node scripts/rotate-secrets.js",
"secrets:audit": "node scripts/audit-secrets.js"
}
}
Environnement Usage URL Déclenchement
production Production publique https://votresite.com Merge sur main
staging Pré-production https://staging.votresite.com Push sur staging
preview Preview par PR https://[pr-id].preview.votresite.com Pull Request
Variable Production Staging Preview
CRM_ENDPOINT_URL https://api.moncrm.com/v1/leads https://staging-api.moncrm.com/v1/leads https://staging-api.moncrm.com/v1/leads
R2_BUCKET_NAME pub-medias pub-medias-staging pub-medias-preview
SANITY_DATASET production staging staging
ALLOWED_ORIGIN https://votresite.com https://staging.votresite.com https://*.preview.votresite.com
BUILD_HOOK_URL [URL prod] [URL staging] -
  • ✅ La branche main dĂ©clenche le dĂ©ploiement en production
  • ✅ La branche staging dĂ©clenche le dĂ©ploiement en staging
  • ✅ Les Pull Requests dĂ©clenchent des environnements de preview Ă©phĂ©mĂšres
  • ✅ Les secrets sont spĂ©cifiques Ă  chaque environnement
  • ✅ Les bindings (KV, R2, Queue) peuvent ĂȘtre partagĂ©s ou isolĂ©s selon le besoin
Service KV R2 Queue Service
middleware - - - -
form-handler - - SUBMISSIONS_QUEUE -
cms-webhook-receiver WEBHOOK_LOCK_KV - - -
media-upload - R2_BUCKET - -
media-cleanup - R2_BUCKET - -
sanity-backup - R2_BACKUP_BUCKET - -
Terminal window
# Création des namespaces KV
wrangler kv:namespace create "WEBHOOK_LOCK_KV" --config services/cms-webhook-receiver/wrangler.toml --env production
wrangler kv:namespace create "WEBHOOK_LOCK_KV" --config services/cms-webhook-receiver/wrangler.toml --env staging
# Création des buckets R2
wrangler r2 bucket create pub-medias
wrangler r2 bucket create pub-medias-staging
wrangler r2 bucket create backups-sanity
# Création des Queues
wrangler queues create form-submissions-queue --env production
wrangler queues create form-submissions-queue --env staging
Bucket RÚgle Action Rétention
pub-medias Suppression temp/ Delete 7 jours
backups-sanity Purge automatique Delete 30 jours
.github/workflows/deploy-workers.yml
name: Deploy Cloudflare Workers
on:
push:
branches: [main, staging]
pull_request:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Deploy to Staging
if: github.ref == 'refs/heads/staging'
run: npm run deploy:staging
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- name: Deploy to Production
if: github.ref == 'refs/heads/main'
run: npm run deploy:all
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
Terminal window
# Liste des déploiements
wrangler deployments list --config services/form-handler/wrangler.toml
# Rollback vers une version précédente
wrangler deployments rollback --deployment-id=[id] --config services/form-handler/wrangler.toml
Terminal window
# Test local d'un service
npm run dev:form-handler
# Test d'un Cron Trigger
wrangler dev --config services/media-cleanup/wrangler.toml --test-scheduled
# Test d'un endpoint
curl -X POST http://localhost:8787/ \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com", "message": "Test"}'
Terminal window
# Logs d'un service spécifique
wrangler tail form-handler --env production
# Logs avec filtre
wrangler tail cms-webhook-receiver --env production --format pretty
# Logs de tous les services (via Cloudflare Dashboard)
# Dashboard → Workers & Pages → [Service] → Logs
Service MĂ©trique Seuil d’alerte Canal
middleware Taux d’erreur 5xx > 1% sur 5 min PagerDuty
form-handler Échecs CRM > 2% sur 5 min Slack
cms-webhook-receiver Signatures invalides > 5 consécutifs Email Sécurité
media-cleanup Safety Lock déclenché 1 événement Slack
sanity-backup Échec du Cron 1 Ă©chec PagerDuty
Terminal window
# Configuration Logpush (via Dashboard ou API)
# Dashboard → Workers & Pages → [Service] → Logs → Logpush
# Destination : Datadog / Axiom / S3
SymptĂŽme Cause probable Solution
“Binding not found” Binding mal configurĂ© VĂ©rifier le wrangler.toml et redĂ©ployer
“Secret not found” Secret non injectĂ© ExĂ©cuter wrangler secret put
“Service unavailable” Worker non dĂ©ployĂ© VĂ©rifier le dĂ©ploiement avec wrangler deployments list
Cron non déclenché Configuration triggers.crons incorrecte Vérifier la syntaxe cron (5 champs)
Erreur de compatibilité compatibility_date trop ancien Mettre à jour vers 2026-09-01
Erreur de mémoire (OOM) Chargement de gros fichiers en RAM Utiliser le streaming HTTP
Terminal window
# Vérification de la configuration
wrangler deploy --dry-run --config services/form-handler/wrangler.toml
# Inspection des bindings
wrangler kv:key list --binding=WEBHOOK_LOCK_KV --config services/cms-webhook-receiver/wrangler.toml
# Inspection des objets R2
wrangler r2 object list pub-medias --prefix medias/
# Test d'un Cron Trigger
wrangler dev --config services/media-cleanup/wrangler.toml --test-scheduled
  • ✅ SĂ©parer la configuration par service (un wrangler.toml par Worker)
  • ✅ Centraliser les scripts de dĂ©ploiement dans le package.json racine
  • ✅ Utiliser des environnements distincts (production/staging/preview)
  • ✅ Documenter les bindings et secrets dans ce fichier
  • ✅ Versionner les wrangler.toml dans Git (sauf les secrets)
  • ✅ Ne jamais commiter les secrets dans Git
  • ✅ Utiliser wrangler secret put pour injecter les secrets
  • ✅ Rotation rĂ©guliĂšre des secrets (tous les 90 jours)
  • ✅ Valider les permissions des tokens API (principe du moindre privilĂšge)
  • ✅ Auditer les accĂšs aux ressources Cloudflare
  • ✅ Utiliser compatibility_date rĂ©cent pour bĂ©nĂ©ficier des optimisations
  • ✅ Minimiser le nombre de bindings par Worker
  • ✅ Utiliser le streaming HTTP pour les gros volumes
  • ✅ Mettre en cache les donnĂ©es frĂ©quemment lues (KV)
  • ✅ Documenter les changements de configuration dans ce fichier
  • ✅ Tester les dĂ©ploiements en staging avant production
  • ✅ Surveiller les mĂ©triques aprĂšs chaque dĂ©ploiement
  • ✅ Automatiser les dĂ©ploiements via CI/CD
  • ✅ Maintenir un rollback plan en cas de problĂšme
  • [Évolution 1 : ex. Migration vers Wrangler v4]
  • [Évolution 2 : ex. Ajout de Durable Objects pour les sessions]
  • [Évolution 3 : ex. ImplĂ©mentation de Workflows pour les traitements longs]
  • [Évolution 4 : ex. Centralisation des logs via Logpush vers Datadog]
  • ❌ Les secrets ne peuvent pas ĂȘtre versionnĂ©s dans Git
  • ❌ Les bindings KV ont des limites de taille (25 MB par clĂ©)
  • ❌ Les Cron Triggers ont une granularitĂ© minimale d’une minute
  • ❌ Les Queues ont une limite de 10 MB par message
  • Documentation Wrangler : CLI Reference
  • Documentation Wrangler : Configuration
  • Documentation Cloudflare Workers : Getting Started
  • DAT L3 : §6 - Structure Monorepo, Wrangler & Configuration
  • DAT L3 : §7 - Monitoring, ObservabilitĂ© & Alerting
  • Services concernĂ©s :
    • services/middleware/wrangler.toml
    • services/form-handler/wrangler.toml
    • services/cms-webhook-receiver/wrangler.toml
    • services/media-upload/wrangler.toml
    • services/media-cleanup/wrangler.toml
    • services/sanity-backup/wrangler.toml
  • Fichiers concernĂ©s :
    • wrangler.toml (racine, optionnel)
    • package.json (scripts monorepo)
    • .github/workflows/deploy-workers.yml
Date Version Description Auteur
YYYY-MM-DD 1.0 Création initiale [Nom]
YYYY-MM-DD 1.1 [Modification] [Nom]
---
**Points clés de ce template :**
- Documente la configuration complĂšte du monorepo Cloudflare (tous les Workers)
- Détaille la structure du dépÎt et l'organisation par service
- Inclut la matrice complĂšte des secrets et leur injection
- Fournit les scripts npm pour le déploiement et le développement local
- Couvre la gestion des environnements (production/staging/preview)
- Documente les bindings Cloudflare (KV, R2, Queue) par service
- Inclut le pipeline CI/CD et les commandes de rollback
- Sépare clairement les bonnes pratiques par catégorie (architecture, sécurité, performance, maintenance)
Edit page

Last updated: