EmDash CMS – Guía de producción en Cloudflare (plan Free)
Despliega EmDash en el plan Free de Cloudflare con un camino fiable, límites claros de funcionalidad y orientación práctica para rollback.
Resumen ejecutivo
Puedes ejecutar EmDash en producción en el plan Free de Cloudflare para flujos CMS centrales.
Lo que debes aceptar: la ejecución de plugins en sandbox no está disponible, así que worker_loaders debe eliminarse de la configuración.
Esta guía prioriza la estabilidad antes que el máximo de superficie de funciones.
Límites de capacidad en el plan Free
Disponible
- sitio principal de EmDash y flujos de administración
- datos de contenido respaldados por D1
- almacenamiento de medios en R2 (dentro del uso gratuito)
- despliegue y enrutamiento de Workers
No disponible
- Dynamic Workers para plugins en sandbox
- ejecución en tiempo de ejecución no confiable al estilo marketplace de plugins
Si tu lanzamiento depende de la ejecución de plugins de terceros en sandbox, el plan Free no basta.
Lista de comprobación previa al despliegue
Completa todas las comprobaciones antes de ejecutar comandos de despliegue:
- Wrangler autenticado (
wrangler loginya hecho) - el proyecto compila en local sin asumir solo la nube
wrangler.jsonctiene enlaces D1 y R2 alineados con la config de tiempo de ejecución- la entrada
worker_loadersestá eliminada para el plan Free - el gestor de paquetes es coherente (
npmopnpm, sin mezclar)
Orden de aprovisionamiento de recursos
Aprovisiona en este orden exacto para reducir cambios de bindings:
- Crear base de datos D1
- Crear o habilitar R2 y luego el bucket
- Actualizar
wrangler.jsonccon nombres e IDs exactos - Compilar y desplegar el Worker
Motivo: el ID de D1 y los nombres del bucket son la fuente de verdad para los bindings.
# Primero D1
npx wrangler d1 create your-db-name
# Luego bucket R2
npx wrangler r2 bucket create your-media-bucket
Forma mínima de wrangler.jsonc en plan Free
El esqueleto siguiente es deliberadamente pequeño:
{
"$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"
}
]
}
Sin sección worker_loaders en el plan Free.
Flujo de build y despliegue
Ejecuta desde la raíz del proyecto EmDash:
# elige un gestor de paquetes y manténlo
npm run build
npm run deploy
Si el proyecto usa pnpm:
pnpm build
pnpm deploy
Evita mezclar npm y pnpm en la misma sesión de despliegue salvo que los lockfiles estén sincronizados a propósito.
Lista de validación tras el despliegue
Valida en este orden:
- La URL del frontend resuelve y devuelve el contenido esperado
- La URL de admin (
/_emdash/admin) es accesible - la primera configuración de admin termina bien
- crea y publica un ítem de prueba
- sube un archivo multimedia y confirma la recuperación
Un despliegue no está completo hasta verificar rutas de escritura de datos, no solo el alcance de las rutas.
Fallos frecuentes y arreglos más cortos
Fallo: el despliegue funciona pero el admin no inicializa
Causa probable: desajuste de bindings entre la integración en tiempo de ejecución y wrangler.jsonc.
Pasos:
- verifica que los nombres de binding (
DB,MEDIA) sean idénticos en todas partes - vuelve a desplegar tras corregir la config
- reintenta la inicialización del admin
Fallo: comando R2 bloqueado por mensaje de cuenta
Causa probable: R2 aún no habilitado en el panel.
Pasos:
- habilita R2 en el panel de Cloudflare
- acepta términos de facturación (sigue aplicando el uso gratuito)
- repite el comando del bucket
Fallo: error de tiempo de ejecución relacionado con plugins en plan Free
Causa probable: configuración de sandbox residual.
Pasos:
- elimina
worker_loaders - desactiva la configuración de plugins específica de sandbox
- vuelve a desplegar y prueba
Estrategia de rollback
Política de rollback conservadora:
- etiqueta el último commit de despliegue conocido como bueno
- si hay regresión en producción, vuelve a desplegar el commit etiquetado anterior
- pospone cambios de esquema o plugins hasta que el tráfico se estabilice
En la práctica, un rollback rápido gana a un hotfix profundo en ventanas de incidente.
Cuándo pasar de Free a Paid
Actualiza solo cuando una de estas condiciones sea cierta:
- necesitas ejecución de plugins no confiables en sandbox
- tu tráfico o almacenamiento supera con frecuencia los límites gratuitos
- gobernanza exige mayor aislamiento del tiempo de ejecución de plugins
No actualices por redacción ambigua en pantallas de facturación. Actualiza solo por requisitos de capacidad concretos.