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 login ya hecho)
  • el proyecto compila en local sin asumir solo la nube
  • wrangler.jsonc tiene enlaces D1 y R2 alineados con la config de tiempo de ejecución
  • la entrada worker_loaders está eliminada para el plan Free
  • el gestor de paquetes es coherente (npm o pnpm, sin mezclar)

Orden de aprovisionamiento de recursos

Aprovisiona en este orden exacto para reducir cambios de bindings:

  1. Crear base de datos D1
  2. Crear o habilitar R2 y luego el bucket
  3. Actualizar wrangler.jsonc con nombres e IDs exactos
  4. 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:

  1. La URL del frontend resuelve y devuelve el contenido esperado
  2. La URL de admin (/_emdash/admin) es accesible
  3. la primera configuración de admin termina bien
  4. crea y publica un ítem de prueba
  5. 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:

  1. verifica que los nombres de binding (DB, MEDIA) sean idénticos en todas partes
  2. vuelve a desplegar tras corregir la config
  3. 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:

  1. habilita R2 en el panel de Cloudflare
  2. acepta términos de facturación (sigue aplicando el uso gratuito)
  3. 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:

  1. elimina worker_loaders
  2. desactiva la configuración de plugins específica de sandbox
  3. 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.