Copias de seguridad y recuperación

En esta página

Usa una copia de seguridad JSON cuando necesites una copia offline de datos de contenido seleccionados. EmDash no puede importar ese archivo. Un plan de recuperación necesita una copia de seguridad cruda de la base de datos o recuperación a un punto en el tiempo y una copia separada de los binarios de medios.

Qué contiene una copia de seguridad

Una copia de seguridad JSON incluye:

  • Todas las entradas de contenido, incluyendo borradores, publicaciones programadas y elementos eliminados
  • Definiciones de colecciones y campos que componen el modelo de contenido
  • Definiciones de taxonomía, términos y los términos asignados a cada entrada
  • Menús y elementos de menú, secciones, áreas de widgets y widgets, registros SEO, historial de revisiones, metadatos de medios e historial de migración de base de datos
  • Configuraciones del sitio como título, eslogan, URL, locale, logo, preferencias de visualización, perfiles sociales y valores predeterminados de SEO. Estos provienen de los grupos de configuración site:, emdash:site_ y emdash:locale.

Omite todas las demás tablas de la base de datos, incluyendo:

  • Cuentas de usuario, sesiones, passkeys, datos OAuth, tokens de API y otros datos de autenticación
  • Almacenamiento de plugins y configuraciones de plugins, incluyendo secretos de plugins
  • Comentarios y reacciones, redirecciones y registros 404, líneas de autor, relaciones y referencias de contenido, registros de auditoría, límites de tasa y estado de tareas programadas
  • Carpetas de medios, registros de dónde se usan los medios, subidas incompletas o en progreso y los archivos de medios en sí
  • Otras opciones del sitio, incluyendo el secreto de firma de vista previa y el programa de copias de seguridad

Las copias de seguridad son archivos JSON en el mismo formato de snapshot usado por el sistema de vista previa de EmDash, versionados con la versión de EmDash que los creó.

Descarga con un clic

En Settings → Backups en el admin, el botón Download backup genera una copia de seguridad fresca y la descarga como archivo JSON. Requiere el rol de admin.

La descarga es para inspección o herramientas de migración personalizadas. Antes de importaciones masivas, cambios de esquema o actualizaciones mayores, crea una copia de seguridad restaurable de la base de datos usando una de las opciones siguientes.

Copias de seguridad automáticas al almacenamiento

Si tu sitio tiene un backend de almacenamiento configurado (R2 en Cloudflare, S3 o almacenamiento local), puedes habilitar copias de seguridad diarias automáticas:

  1. Abre Settings → Backups en el admin.

  2. Activa Daily automatic backups.

  3. Elige cuántas copias de seguridad conservar (1–30). Los archivos más antiguos se eliminan automáticamente.

  4. Guarda. Las copias de seguridad se ejecutan como parte del mantenimiento programado de EmDash — no se necesita configuración cron adicional.

Los archivos se almacenan bajo el prefijo backups/ en tu bucket como emdash-backup-<timestamp>-<random>.json. La lista Stored Backups en el admin te permite descargar o eliminar archivos individuales, y Back up now crea uno bajo demanda.

Las copias de seguridad automáticas aprovechan el tick de mantenimiento programado (el mismo mecanismo que impulsa la publicación programada) — en Cloudflare es el cron trigger del Worker, en Node el scheduler incorporado. Si tu despliegue no tiene un cron trigger configurado, usa Back up now o el botón de descarga en su lugar.

Respaldar y restaurar objetos de medios

Los buckets R2 y compatibles con S3 necesitan un respaldo a nivel de objeto además de la base de datos. El siguiente ejemplo de AWS CLI copia cada objeto, incluyendo los archivos backups/ de EmDash, a un directorio de respaldo local. Para AWS S3, omite --endpoint-url.

aws s3 sync s3://emdash-media ./emdash-media-backup \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

Usa credenciales de bucket de solo lectura para trabajos de respaldo rutinarios. Almacena el respaldo fuera de la cuenta de producción o dominio de falla, y registra el respaldo de base de datos o punto Time Travel creado al mismo tiempo.

Restaura en un bucket de recuperación vacío en lugar de sobrescribir producción mientras está sirviendo solicitudes:

aws s3 sync ./emdash-media-backup s3://emdash-media-recovery \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

Da al trabajo de restauración acceso de escritura solo al bucket de recuperación. Apunta un despliegue que no sea de producción a ese bucket, abre varias URLs de medios conocidas, y sube y elimina un archivo desechable. Cambia el binding de producción o la configuración del bucket solo después de que la base de datos restaurada y el conjunto de medios pasen sus verificaciones juntos.

Recuperar una base de datos D1 con Time Travel

Antes de una operación riesgosa, pide a Time Travel el marcador actual y regístralo con el despliegue o registro de cambios:

npx wrangler d1 time-travel info my-database

Si se requiere recuperación, detén las escrituras al sitio e inspecciona el punto de restauración disponible antes de ejecutar el comando de restauración destructivo:

npx wrangler d1 time-travel restore my-database --timestamp=2026-07-08T13:00:00Z

Time Travel restaura toda la base de datos, incluyendo contenido, usuarios, configuraciones, datos de plugins y registros de migración. No restaura objetos de medios R2. Después de que el comando se complete, despliega la versión de la aplicación que coincida con la base de datos restaurada, reabre el tráfico y verifica el inicio de sesión, las lecturas de contenido, los cambios de esquema y una escritura.

Consulta la documentación de D1 Time Travel para detalles.

Crear un dump D1 offsite

Para un dump SQL completo de la base de datos cruda (incluyendo tablas de usuarios y auth), usa Wrangler:

npx wrangler d1 export my-database --remote --output=backup.sql

Guarda el archivo SQL con la versión de aplicación correspondiente y el respaldo de medios creado al mismo tiempo. Prueba la recuperación importando el dump en una base de datos D1 vacía recién aprovisionada, actualizando un binding que no sea de producción a esa base de datos y verificando el sitio.

Importa en la base de datos de recuperación vacía con el siguiente comando:

npx wrangler d1 execute my-recovery-database --remote --file=backup.sql

Backup y recuperación SQLite

Para un backup SQLite offline, detén todos los procesos que escriben en la base de datos y copia el archivo de base de datos. Para un backup online consistente, usa el comando de backup de SQLite:

sqlite3 emdash.db ".backup backup.db"

Respalda el directorio de subida local o el bucket compatible con S3 por separado. Para recuperar, detén todos los procesos del servidor, conserva una copia de la base de datos dañada, reemplázala con el backup verificado, restaura los objetos de medios necesarios e inicia la versión de aplicación correspondiente. Verifica el inicio de sesión, el contenido público, una edición y una lectura de medios antes de reabrir el tráfico.

Las exportaciones JSON no pueden restaurar un sitio

EmDash no tiene acción de admin, endpoint de API ni comando CLI para restauración JSON. Usa D1 Time Travel, un dump SQL crudo de D1 o una copia de la base de datos SQLite como se describió arriba.