Guida operativa di produzione Emdash CMS su Cloudflare Free Tier
Distribuisci EmDash sul piano Cloudflare Free con un percorso affidabile, limiti funzionali chiari e indicazioni pratiche per il rollback.
Sintesi esecutiva
Puoi eseguire EmDash in produzione sul piano Cloudflare Free per i workflow core del CMS.
Ciò che devi accettare: l’esecuzione sandboxata dei plugin non è disponibile, quindi worker_loaders va rimosso dalla configurazione.
Questa guida è ottimizzata prima di tutto per la stabilità, non per la massima copertura funzionale.
Limiti delle capacità nel piano Free
Disponibile
- sito core EmDash e flussi admin
- dati contenuto su D1
- storage media su R2 (entro i limiti gratuiti)
- deploy e routing su Workers
Non disponibile
- Dynamic Workers per plugin sandboxati
- esecuzione runtime non fidata in stile marketplace plugin
Se il tuo lancio dipende dall’esecuzione sandboxata di plugin di terze parti, il piano Free non è sufficiente.
Checklist pre-deploy
Completa tutti i controlli prima di eseguire i comandi di deploy:
- Wrangler è autenticato (
wrangler logingià eseguito) - il progetto compila in locale senza assunzioni valide solo in cloud
wrangler.jsoncha binding D1 e R2 allineati alla configurazione runtime- la voce
worker_loadersè rimossa per il piano Free - la scelta del package manager è coerente (
npmopnpm, senza mix)
Ordine di provisioning delle risorse
Esegui il provisioning in questo ordine esatto per ridurre il churn dei binding:
- Crea il database D1
- Crea o abilita R2 e poi crea il bucket
- Aggiorna
wrangler.jsonccon nomi e ID esatti - Compila e distribuisci il Worker
Motivo: l’ID D1 e i nomi dei bucket diventano la tua fonte di verità per i binding ambientali.
# Esegui prima il provisioning di D1
npx wrangler d1 create your-db-name
# Poi esegui il provisioning del bucket R2
npx wrangler r2 bucket create your-media-bucket
Struttura minima di wrangler.jsonc per il piano Free
Lo scheletro seguente è intenzionalmente minimale:
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "your-site-name",
"main": "./src/worker.ts",
"compatibility_date": "2026-04-08",
"compatibility_flags": ["nodejs_compat"],
"d1_databases": [
{
"binding": "DB",
"database_name": "your-db-name",
"database_id": "replace-with-d1-id"
}
],
"r2_buckets": [
{
"binding": "MEDIA",
"bucket_name": "your-media-bucket"
}
]
}
Nessuna sezione worker_loaders nel piano Free.
Flusso di build e deploy
Esegui i comandi dalla root del progetto EmDash:
# scegli un package manager e mantienilo
npm run build
npm run deploy
Se il tuo progetto usa pnpm:
pnpm build
pnpm deploy
Evita di usare npm e pnpm insieme nella stessa sessione di deploy, a meno che i lockfile non siano sincronizzati intenzionalmente.
Checklist di validazione post-deploy
Valida in questo ordine:
- l’URL frontend risponde e restituisce i contenuti attesi
- l’URL admin (
/_emdash/admin) è raggiungibile - la prima configurazione admin si completa con successo
- crea e pubblica un elemento di test
- carica un file media e conferma il recupero
Un deploy non è completo finché i percorsi di scrittura dati non sono verificati, non basta la sola raggiungibilità delle route.
Errori frequenti e correzioni più rapide
Errore: il deploy riesce, ma l’admin non si inizializza
Causa probabile: mismatch dei binding tra integrazione runtime e wrangler.jsonc.
Percorso di correzione:
- verifica che i nomi dei binding (
DB,MEDIA) siano identici ovunque - ridistribuisci dopo aver corretto la configurazione
- riprova l’inizializzazione admin
Errore: comando R2 bloccato da prompt account
Causa probabile: R2 non è ancora stato abilitato nella dashboard.
Percorso di correzione:
- abilita R2 nella dashboard Cloudflare
- accetta i termini di fatturazione (l’uso gratuito resta valido)
- riesegui il comando di creazione bucket
Errore: runtime error legato ai plugin nel piano Free
Causa probabile: configurazione sandbox residua.
Percorso di correzione:
- rimuovi
worker_loaders - disabilita la configurazione plugin specifica per sandbox
- ridistribuisci e ritesta
Strategia di rollback
Usa una policy di rollback conservativa:
- mantieni taggato l’ultimo commit di deploy noto come stabile
- se compare una regressione in produzione, ridistribuisci il commit precedente taggato
- rinvia modifiche a schema o plugin finché il traffico non si stabilizza
Operativamente, un rollback rapido è migliore di un hotfix profondo durante una finestra di incidente.
Quando passare da Free a Paid
Esegui l’upgrade solo quando è vera almeno una di queste condizioni:
- ti serve l’esecuzione sandboxata di plugin non fidati
- traffico o storage superano regolarmente i limiti gratuiti
- la governance richiede un isolamento runtime dei plugin più forte
Non fare l’upgrade per formulazioni UI ambigue nelle schermate di billing. Fai l’upgrade solo per esigenze funzionali concrete.