DfBackup SW — Guía completa
Instalar, configurar y explotar DfBackup SW: copia de BD + archivos, cifrado AES-256, almacenamiento S3/FTP/Dropbox, replicación staging y restauración 1-clic para Shopware 6.5, 6.6 y 6.7.
DfBackup SW es un sistema de copias de seguridad de nivel producción para Shopware 6.5, 6.6 y 6.7 sin dependencias externas: sin mysqldump, sin shell_exec, sin SDK de Amazon. Hace copia de la base de datos y de los archivos en PHP puro, cifra los archivos con AES-256 autenticado, los envía a Local, S3, FTP o Dropbox, e incluso puede replicar cada copia hacia un segundo Shopware staging. La restauración es de un clic, con un snapshot de seguridad automático. Esta guía cubre la instalación, la ejecución en segundo plano, el cifrado, los backends de almacenamiento, la replicación, la restauración, la planificación y la resolución de problemas.
Instalación
- Descarga el archivo
DfBackup-SW-1.0.0.zipdesde tu cuenta DataFirefly. - Copia la carpeta descomprimida
DfBackupencustom/plugins/de tu Shopware, o instala el ZIP vía Administración → Extensiones → Mis extensiones → Cargar extensión. - Instala y activa:
bin/console plugin:refresh bin/console plugin:install --activate DfBackup bin/console cache:clear - En la instalación, el plugin crea sus cuatro tablas (
df_backup,df_backup_log,df_backup_filemap,df_backup_audit) y registra su ScheduledTask.
Compatible con Shopware 6.5.x, 6.6.x y 6.7.x en un único codebase, PHP 8.1 a 8.3. Extensiones PHP requeridas: zip y openssl (siempre), curl (S3, Dropbox, replicación) y ftp (backend FTP/FTPS). Sin dependencia Composer adicional.
Dónde encontrar el plugin en la administración
Tras la activación, aparece un módulo de administración dedicado DfBackup en el menú. Reúne la lista de copias, el botón Copia ahora, el progreso en tiempo real y las acciones por copia (verificar, descargar, proteger, restaurar, eliminar). La configuración (planificación, cifrado, backends, replicación, notificaciones) se hace en la configuración del plugin vía Extensiones → Mis extensiones → DfBackup → ⋯ → Configurar.
Ejecución en segundo plano: Messenger, ScheduledTask y web-cron
Una copia nunca bloquea la interfaz. El clic en Copia ahora pre-asigna una fila, despacha un mensaje asíncrono Symfony Messenger y devuelve el ID inmediatamente. El trabajo real se ejecuta en el worker, y la administración muestra el progreso en vivo a través de 15 hitos (inicio, volcado de BD, archivado, cifrado, checksum, subida por backend, rotación).
Worker recomendado en producción
Para tiendas en producción, ejecuta un consumer Messenger supervisado permanentemente:
bin/console messenger:consume async --time-limit=300 --memory-limit=512M
Colócalo bajo systemd o supervisor para que se reinicie automáticamente. Es la configuración que permite ejecutar las copias sin ningún límite de tiempo web.
ScheduledTask
Una ScheduledTask nativa se ejecuta cada 10 minutos y actúa como puerta de planificación: comprueba si debe lanzarse una copia planificada y, en su caso, despacha el mensaje. Depende del scheduler de Shopware, a su vez accionado por el worker o el cron de Shopware.
Web-cron de respaldo
En hostings sin acceso CLI ni worker permanente, activa el web-cron: una URL firmada con token (regenerable desde la configuración) que un servicio externo como cron-job.org llama cada 10 a 15 minutos. La puerta de planificación interna (ventana de 30 minutos, deduplicación de 60 minutos) evita los disparos dobles.
Si la página de administración se cierra durante una copia, el proceso continúa en el worker. Vuelve a abrir el módulo DfBackup para encontrar el progreso y el resultado.
El volcado de base de datos, pensado para Shopware
Un volcado SQL ingenuo se rompe en Shopware. DfBackup SW gestiona nativamente las particularidades del esquema:
- Las columnas generadas (STORED o VIRTUAL) se excluyen de los INSERT, porque MySQL rechaza las escrituras sobre ellas.
- Las columnas binarias — incluidas las claves primarias UUID en BINARY 16, omnipresentes en Shopware — se emiten como literales hexadecimales
0x…para una reimportación perfectamente fiel. - La paginación keyset sobre la clave primaria entera permite volcar tablas muy grandes (order, log_entry) sin agotar la memoria.
- Las vistas se recrean al final, después de todas las tablas.
El volcado se hace por bloques (500 filas por lote) y el archivo producido se reimporta limpiamente, instrucción por instrucción, con FOREIGN_KEY_CHECKS desactivado durante la importación.
La copia de archivos
Los archivos se archivan vía ZipArchive con exclusiones glob configurables (por defecto var/cache, var/log, node_modules, miniaturas…). El modo incremental opcional se basa en un sha1 de path + size + mtime seguido en base de datos: solo los archivos modificados desde la última copia completa se vuelven a archivar.
Cifrado AES-256
El cifrado es opcional pero muy recomendable para los archivos almacenados fuera del sitio. DfBackup SW aplica un esquema AES-256-CBC más HMAC-SHA-256 según el patrón encrypt-then-MAC:
- La passphrase pasa por PBKDF2-SHA256 con 120 000 iteraciones para derivar claves de cifrado y HMAC separadas.
- El cifrado se realiza en streaming por bloques de 1 MiB: un archivo de varios GB se cifra con una huella de memoria constante.
- En la lectura, el HMAC se verifica antes de cualquier descifrado (protección contra ataques padding oracle y bit-flip).
- Un SHA-256 independiente garantiza la integridad del archivo bruto (estado
verifiedocorrupteden base de datos).
Si se pierde la passphrase, los archivos cifrados se vuelven definitivamente irrecuperables — es la garantía misma del cifrado autenticado. Guarda la passphrase en un gestor de contraseñas externo (Bitwarden, 1Password) antes de activar el cifrado.
Backends de almacenamiento
Cada copia puede enviarse a uno o varios backends simultáneamente, para aplicar la regla 3-2-1:
- Local: bajo
var/df-backup, con protección anti-listado. - Amazon S3 y compatibles: firma AWS V4 nativa (sin SDK), multipart automático por encima de 100 MB (partes de 10 MB). Compatible con MinIO, Wasabi, Cloudflare R2, OVH, Scaleway, Backblaze B2 mediante override de endpoint y región.
- FTP y FTPS: modo pasivo, creación automática del directorio remoto.
- Dropbox v2: REST con
upload_sessionpor chunks para archivos por encima de 150 MB.
Cloudflare R2 ofrece 10 GB gratis con coste de salida cero: un excelente backend remoto para copias cifradas. Indica el endpoint R2 y la región auto en la configuración S3.
Replicación hacia un Shopware staging
Es la función que distingue a DfBackup SW: enviar cada copia hacia una segunda instalación Shopware con el mismo plugin.
- Instala DfBackup SW en producción y en staging.
- Genera un secreto común (cadena aleatoria larga) e indícalo en ambos lados.
- En producción, activa Replicación como destino e indica la URL del staging.
En cada copia, el archivo se sube en chunks de 8 MB firmados con HMAC-SHA-256 hacia endpoints dedicados en el destino (chunk, commit, delete, ping), con anti-replay por timestamp y tolerancia de 5 minutos. Si el auto-restore está activado en el staging, el archivo se aplica automáticamente — tu staging refleja la producción del día anterior a la mañana siguiente.
Combinada con la migración de dominio (ver más abajo), la replicación da un clon inmediatamente navegable en su propio dominio, sin rsync ni scripts cron de sysadmin.
Restauración 1-clic
Desde la lista de copias, el botón Restaurar abre un modal:
- Elige el alcance: todo, solo BD o solo archivos.
- Para confirmar, escribe la palabra
RESTORE— protección contra falsas maniobras. - Opcionalmente, activa el modo migración de dominio e indica el nuevo dominio.
Antes de cualquier restauración, se crea automáticamente un snapshot protegido de la BD: si la restauración falla a medio camino, vuelves al estado inicial en minutos. Las tablas del plugin (df_backup*) nunca se sobrescriben — tu historial de copias se preserva incluso al restaurar una versión de hace seis meses.
Una restauración sobrescribe la base y los archivos en su lugar. Verifica el alcance seleccionado y evita restaurar una versión antigua sobre una producción que ha seguido registrando pedidos, salvo migración controlada.
Migración de dominio
En modo migración, el plugin reescribe los sales_channel_domain y aplica un reemplazo best-effort sobre las columnas de texto de las tablas de traducción (CMS, productos, categorías) y sobre seo_url, para que el clon sea inmediatamente navegable en su propio dominio.
Planificación, rotación y modo mantenimiento
- Frecuencias: daily (hora objetivo), weekly (día + hora), monthly (día del mes + hora). Ventana de tolerancia de 30 minutos y deduplicación de 60 minutos.
- Rotación: por número de copias a conservar y por edad en días. Las copias marcadas como protegidas (snapshots pre-restauración en particular) nunca se rotan.
- Modo mantenimiento opcional: pone los sales channels en mantenimiento durante el volcado de BD para una coherencia transaccional perfecta, útil en tiendas con un volumen de pedidos muy alto.
Notificaciones y auditoría
- Email vía Symfony Mailer (éxito, fallo, o ambos a elección).
- Webhook con autodetección del formato: Slack, Discord, Microsoft Teams o JSON genérico.
- Alerta en el módulo si no hay copia exitosa desde hace N días.
- Registro de auditoría: cada acción sensible (ejecución, restauración, eliminación, verificación, descarga) se traza con usuario admin, IP y timestamp.
FAQ y resolución de problemas
¿Funciona el plugin sin shell_exec? Sí. Ninguna llamada a shell_exec, exec, passthru ni mysqldump. Todo es PHP puro (DBAL, ZipArchive, cURL, funciones ftp nativas).
Mis copias no se ejecutan automáticamente. Comprueba que un worker Messenger esté funcionando (o que el web-cron sea llamado con regularidad) y que la ScheduledTask DfBackup esté activa en Shopware. Sin worker ni web-cron, la planificación no puede ejecutarse.
El volcado falla en una tabla grande. La paginación keyset gestiona normalmente las tablas grandes; asegúrate de que la clave primaria entera esté presente y aumenta la memoria del worker si es necesario (--memory-limit).
Un archivo sale en estado corrupted. El SHA-256 no coincide: la subida o la escritura se truncó. Vuelve a lanzar la copia y comprueba el espacio en disco y las cuotas del backend remoto.
¿Cómo verificar una copia sin restaurarla? El botón Verificar recalcula el SHA-256 y, para los archivos cifrados, controla el HMAC — sin restaurar nada.
¿Qué ocurre al desinstalar? Con la opción de eliminación de datos, las cuatro tablas df_backup* se eliminan y la configuración se borra. Los archivos bajo var/df-backup no se eliminan automáticamente: descarga tus copias recientes antes de desinstalar.