CMS Content Sync

Módulo de sincronización de contenido de nivel empresarial que permite el intercambio bidireccional de contenido entre múltiples sitios Drupal a través de un servicio centralizado Sync Core.

cms_content_sync
609 sites
47
drupal.org

Install

Drupal 11, 10 v3.0.27
composer require 'drupal/cms_content_sync:^3.0'

Overview

CMS Content Sync es un módulo integral para Drupal 10/11 que proporciona capacidades sofisticadas de sincronización de contenido entre múltiples instalaciones de Drupal. Utiliza un servicio centralizado Sync Core para gestionar y orquestar la distribución de contenido, permitiendo a las organizaciones mantener contenido consistente en toda su infraestructura multisitio.

El módulo admite operaciones bidireccionales de push y pull, permitiendo que los sitios publiquen contenido hacia y reciban contenido desde un repositorio central. El contenido puede sincronizarse automáticamente, manualmente o como dependencias cuando se envía contenido relacionado. El sistema rastrea el estado de las entidades entre sitios, gestiona conflictos de contenido y admite flujos de trabajo de traducción.

Las capacidades clave incluyen soporte para más de 20 tipos de entidad (nodes, media, taxonomy terms, menu links, paragraphs, blocks y más), más de 19 manejadores de campo para diferentes tipos de campo, integración con REST API para operaciones remotas, procesamiento por lotes para sincronización a gran escala e interfaces de administración completas para configuración y monitoreo.

Features

  • Sincronización bidireccional de contenido (push/pull) entre múltiples sitios Drupal utilizando un servicio centralizado Sync Core
  • Sistema de gestión de flujos que permite control granular sobre qué tipos de contenido, bundles y campos se sincronizan
  • Organización de contenido basada en pools que permite la agrupación de contenido y control de acceso entre sitios
  • Soporte para más de 10 tipos de entidad incluyendo nodes, media, taxonomy terms, menu links, paragraphs, blocks, files, config pages, entity queues y group content
  • 19 manejadores de campo que admiten campos de texto, referencias de entidad, paragraphs, archivos, imágenes, layout builder, estado de moderación, enlaces, rutas, webforms y más
  • Seguimiento del estado de entidades en tiempo real con historial de sincronización, marcas de tiempo y detección de fallos
  • Endpoints REST API para comunicación con sitios remotos e integración con Sync Core
  • Procesamiento por lotes para operaciones de push/pull a gran escala evitando tiempos de espera agotados
  • Soporte de traducción con sincronización consciente del idioma y manejo independiente de traducciones
  • Protección contra sobrescritura de contenido permitiendo modificaciones locales mientras se preservan las relaciones de sincronización
  • Panel de pull manual para descubrimiento de contenido e importación selectiva desde sitios remotos
  • Panel de monitoreo de salud para seguimiento del estado de sincronización, fallos y problemas de configuración
  • Comandos Drush para exportación de configuración, push, pull y gestión de estado basados en CLI
  • Herramientas de migración para transición desde Acquia Content Hub
  • Soporte para entornos privados para desarrollo local y sitios no accesibles públicamente
  • Integración con DraggableViews para ordenamiento sincronizado de contenido
  • Capacidades de sincronización cruzada permitiendo que el contenido fluya entre sitios bidireccionalmente

Use Cases

Distribución de contenido multi-sitio

Un equipo editorial central crea contenido en un sitio Drupal principal y lo envía a múltiples sitios regionales o específicos de marca. Cada sitio regional recibe automáticamente nuevo contenido, actualizaciones y eliminaciones mientras mantiene personalizaciones locales a través de la función de anulación.

Flujo de trabajo de preparación de contenido

El contenido se crea y edita en un entorno de staging, luego se envía a producción cuando es aprobado. El sitio de staging envía contenido mientras el sitio de producción lo recibe, asegurando un despliegue controlado de contenido con soporte completo de traducción.

Repositorio de contenido desacoplado

Múltiples aplicaciones frontend (web, móvil, kiosco) obtienen contenido de un repositorio Drupal central. El repositorio envía contenido a un Sync Core que luego lo distribuye a las aplicaciones consumidoras, habilitando una verdadera arquitectura headless.

Red de franquicias/distribuidores

Un sitio corporativo mantiene contenido central (productos, políticas, activos de marca) que se distribuye automáticamente a cientos de sitios de franquicias. Los sitios locales pueden agregar su propio contenido mientras reciben actualizaciones corporativas, con control de acceso basado en pools.

Colaboración editorial entre sitios

Múltiples equipos editoriales en diferentes sitios pueden enviar contenido a pools compartidos, habilitando la reutilización de contenido entre sitios. Cada sitio mantiene control sobre qué contenido recibe a través de la configuración de flow.

Migración y consolidación de contenido

El contenido heredado de múltiples sitios Drupal antiguos se importa a una nueva plataforma central. El submódulo de migración ayuda en la transición desde Acquia Content Hub, y el mapeo de Entity asegura que las relaciones de contenido se preserven.

Tips

  • Siempre exportar la configuración después de hacer cambios en el flow usando la UI o el comando 'drush cse'
  • Usar el panel de Health (submódulo cms_content_sync_health) para monitorear el estado de sincronización e identificar fallos
  • Para entornos de desarrollo detrás de firewalls, habilitar el submódulo private_environment para usar sondeo de solicitudes
  • Al copiar flows de sitios remotos, usar las opciones de transformación para ajustar la configuración de push/pull según el rol de su sitio
  • Las versiones de Entity type se calculan automáticamente - si ve incompatibilidades de versión, usar el submódulo developer para identificar diferencias en Fields
  • Usar organización basada en pools para controlar qué sitios reciben qué tipos de contenido
  • La casilla 'Override' en el contenido permite modificaciones locales mientras mantiene el seguimiento de la relación de sincronización
  • Para sincronizaciones iniciales grandes, usar comandos Drush con la opción --type para procesar en lotes
  • La funcionalidad de vista previa para el panel de pull requiere habilitarla en configuración y re-exportar los flows
  • Configurar cuidadosamente las opciones de eliminación - las eliminaciones enviadas eliminarán contenido de los sitios receptores

Technical Details

Admin Pages 10
Registro de Content Sync /admin/config/services/cms_content_sync/site

Registra y configura tu sitio con el servicio Sync Core. Visualiza el estado del sitio, UUID y detalles de conexión.

Panel de Sindicación /admin/config/services/cms_content_sync/syndication

Panel React integrado que muestra el progreso de sindicación en tiempo real, el estado del contenido en los sitios y las operaciones de sincronización.

Pools /admin/config/services/cms_content_sync/pool

Gestiona los pools de contenido - agrupaciones lógicas de contenido que controlan el alcance y acceso de la sincronización.

Añadir Pool /admin/config/services/cms_content_sync/pool/add

Crea un nuevo pool de contenido para organizar el contenido sincronizado.

Flujos /admin/config/services/cms_content_sync/flow

Gestiona los flujos de sincronización que definen qué tipos de contenido y campos se sincronizan y cómo.

Añadir Flujo /admin/config/services/cms_content_sync/flow/add

Crea un nuevo flujo de sincronización definiendo qué contenido se sincroniza y cómo.

Configuración de Content Sync /admin/config/services/cms_content_sync/settings

Configura los ajustes globales para la sincronización de contenido incluyendo autenticación, URL base y registro de eventos.

Compatibilidad /admin/config/services/cms_content_sync/compatibility

Visualiza la matriz de soporte de tipos de Entity y Field mostrando qué tipos pueden ser sincronizados.

Copiar Flujo Remoto /admin/config/services/cms_content_sync/flow/copy/remote

Asistente de múltiples pasos para copiar la configuración de flujo desde otro sitio conectado.

Confirmación de Push de Cambios /admin/cms-content-sync/publish-multiple-changes/confirm/{entities}

Diálogo de confirmación para enviar las entidades seleccionadas a otros sitios con opciones de traducción y prioridad.

Permissions 9
Publicar cambios de cms content sync

Permite a los usuarios enviar cambios de contenido a otros sitios a través del Sync Core

Acceder a las páginas de resumen de contenido de Content Sync

Ver el panel de extracción manual y las páginas de resumen de contenido

Administrar Content Sync

Acceso administrativo completo para configurar pools, flujos, ajustes y gestionar la sincronización

Ver estado de sindicación

Muestra la pestaña de estado de sincronización en los elementos de contenido. Los administradores también pueden acceder a los datos de contenido serializados.

Mostrar diferencias de tipos de Entity

Muestra un botón que permite a los usuarios encontrar diferencias de esquema de tipos de Entity entre sitios conectados

Permiso REST para acceder al recurso de vista previa

Acceder al endpoint REST para vistas previas de contenido

Permiso REST para enviar entidades

Acceder al endpoint REST para enviar entidades a este sitio

Permiso REST en la interfaz de obtención de Entity de importación

Acceder al endpoint REST para obtener entidades para importación

Permiso REST en la interfaz de publicación de Entity de importación

Acceder al endpoint REST para publicar entidades para importación

Hooks 6
hook_cms_content_sync_entity_handler_info_alter

Modificar las definiciones de plugins de manejadores de entidades

hook_cms_content_sync_field_handler_info_alter

Modificar las definiciones de plugins de manejadores de campos

hook_cms_content_sync_before_entity_push

Se invoca antes de enviar una entidad, permitiendo modificaciones o cancelación

hook_cms_content_sync_after_entity_push

Se invoca después de que una entidad se envía exitosamente

hook_cms_content_sync_before_entity_pull

Se invoca antes de recibir una entidad, permitiendo modificaciones o denegación

hook_cms_content_sync_after_entity_pull

Se invoca después de que una entidad se recibe exitosamente

Drush Commands 6
drush cms_content_sync:configuration-export

Exporta toda la configuración de pools y flows al servicio Sync Core

drush cms_content_sync:pull

Obtiene entidades desde Sync Core para un flow específico

drush cms_content_sync:push

Envía entidades al Sync Core para un flow específico

drush cms_content_sync:reset-status-entities

Restablece el estado de sincronización para todas las entidades en un pool, limpiando las marcas de tiempo de push/pull

drush cms_content_sync:check-entity-flags

Verifica las banderas de sincronización para una entidad específica por UUID

drush cms_content_sync:register

Registra este sitio con el servicio backend de Content Sync

Troubleshooting 7
El contenido no se está enviando a otros sitios

1. Verificar que el flow esté activo y exportado (buscar advertencia 'Export required'). 2. Asegurar que el Entity type/bundle esté configurado para push en el flow. 3. Verificar que al menos un pool esté configurado como 'Force' o 'Allow'. 4. Verificar que el sitio esté registrado con el Sync Core. 5. Ejecutar 'drush cse' para exportar la configuración. 6. Revisar los logs de watchdog en busca de errores.

El contenido importado no aparece

1. Verificar que el flow tenga pull configurado para el Entity type. 2. Comprobar que la configuración del pool permita pull desde el pool de origen. 3. Asegurar que la versión del Entity type del sitio receptor coincida con la del origen. 4. Verificar si hay campos requeridos faltantes. 5. Revisar el panel de Health para fallos de pull.

Advertencias de incompatibilidad de versión de Entity type

Las versiones de Entity type se calculan a partir de la configuración de Field. Cuando los Fields difieren entre sitios, las versiones no coincidirán. Habilitar el submódulo developer para ver las diferencias específicas. Ya sea agregar los Fields faltantes a ambos sitios o configurar el flow para ignorar los Fields incompatibles.

Los archivos/imágenes no se están sincronizando

1. Asegurar que las File Entity estén configuradas en el flow (ya sea directamente o como dependencias). 2. Verificar que el manejador de archivos esté seleccionado para los Fields de archivo/imagen. 3. Verificar que el sitio de destino pueda escribir en el directorio de archivos. 4. Para archivos privados, asegurar que la autenticación esté configurada correctamente.

Las traducciones no se sincronizan correctamente

1. Verificar que ambos sitios tengan los mismos idiomas habilitados. 2. Revisar la configuración del flow para el manejo de traducciones. 3. Para manejo independiente de traducciones, cada traducción se envía por separado. 4. Asegurar que el idioma predeterminado exista en ambos sitios.

La confirmación de push muestra traducciones inesperadas

Al enviar contenido con Fields de referencia no traducidos que contienen nuevas Entity embebidas, todas las traducciones pueden enviarse. Esto asegura que el contenido embebido esté disponible en todos los idiomas. El diálogo de confirmación explica este comportamiento.

Problemas de rendimiento con operaciones de sincronización grandes

1. Usar comandos Drush (cs-push, cs-pull) en lugar de la UI para operaciones masivas. 2. Habilitar el procesamiento por lotes. 3. Considerar filtrar por Entity type o bundle. 4. Verificar el estado del Sync Core para acumulación en la cola. 5. Habilitar el registro extendido temporalmente para identificar cuellos de botella.

Security Notes 8
  • CMS Content Sync usa almacenamiento cifrado (Real AES) para credenciales de autenticación - asegurar que la clave de cifrado esté correctamente configurada y protegida
  • Los endpoints REST están protegidos por el sistema de permisos de Drupal - revisar cuidadosamente las asignaciones de Role para permisos REST
  • El Role dedicado 'cms_content_sync' solo debe asignarse al usuario del sistema, no a usuarios humanos
  • El tipo de autenticación Basic Auth puede exponer credenciales si no se usa sobre HTTPS - siempre usar HTTPS en producción
  • Al usar entornos privados con sondeo de solicitudes, tener en cuenta que las solicitudes se originan desde el servicio Sync Core
  • La configuración 'allow local deletion of import' debe considerarse cuidadosamente - habilitarla permite a los usuarios eliminar contenido que provino de otros sitios
  • Las opciones de registro extendido capturan datos completos de Entity en watchdog - deshabilitar después de depurar para evitar almacenar contenido sensible en logs
  • Los tokens de registro de sitio expiran después de 5 minutos - no almacenarlos ni compartirlos