Sincronizar contenido de WordPress entre desarrollo y producción

Sicronizar contenido de WordPress puede convertirse en una pesadilla. Una vez que el sitio web pasa a producción y comienza a recibir visitas, comentarios, interacciones de todo tipo. Si además trabajas en equipo, la complicación aumenta, al tener que considerar que no eres el único que está haciendo cambios.

Debes tener una proceso de sincronización de contenidos bien definido para evitar eliminar contenido real al actualizar el sitio web desde tu versión de desarrollo y a su vez, no perder horas valiosas al tener que sincronizar un sitio en producción con algunos gigabytes de contenido a tu versión de desarrollo.

En este tutorial te voy a mostrar como sicronizar los contenidos de WordPress entre la versión en desarrollo y producción, para ti o para todo el equipo de desarrollo.

El método “tradicional”, descargar la carpeta “uploads”

Comienzas a trabajar en un sitio web, para el cual tu cliente te ha pedido cambios. El sitio lleva un par de años en producción, generando contenido, subiendo imágenes, documentos e incluso videos de larga duración.

Lo primero que te viene a la mente es que tienes que conectarte via FTP y descargar todo el sitio web, incluyendo la carpeta wp-content/uploads, que tiene un tamaño de varios gigabytes y muchos miles de archivos.

Cliente FTP
Transmit, cliente FTP.

A no ser que utilizando SSH comprimas esta carpeta y la descargues como un solo archivo, descargar todos estos archivos por FTP te puede tomar horas. Si, horas, no exagero.

Haces tus cambios, en el mejor de los casos, si usas git, haces un commit, seguido de un push y luego, haces un pull en el servidor de producción. Esto, o en el peor de los casos, subes tus cambios directamente por FTP, sin control de versiones ni ningún tipo de control. Todo un valiente, sin dudas.

Una semana después, llega un nuevo pedido, el sitio web siguió generando contenido y además el pedido es sobre un nuevo tipo de contenido, del cual se hizo cargo otro desarrollador por lo que debes sincronizar nuevamente el sitio web en producción con tu versión de desarrollo.

FTP te permite sincronizar y solo descargar lo nuevo, pero adivina qué; también demora y mucho. A veces es preferible descargar todo de nuevo.

rsync, una alternativa más rápida

Si tienes acceso SSH al servidor, puedes utilizar rsync, una alternativa considerablemente más rápida. Al utilizar rsync, solo se descargan los archivos faltantes, ahorrándote horas en el proceso. Wikipedia define rsync de la siguiente forma:

rsync es una aplicación libre para sistemas de tipo Unix y Microsoft Windows que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados.

rsync necesita ejecutarse desde la linea de comandos y funciona conectándose al servidor remoto de producción via SSH.

Lo primero, en tu servidor local, localiza tu carpeta uploads, utilizando tu propia ruta.

$ cd sitio-wordpress/wp-content/uploads

Para realizar la sincronización, utilizando tus propias credenciales de SSH

$ rsync -avz --rsh=ssh [email protected]:/ruta/al/sitio-web/wp-content/uploads/* .

Lo que acabas de hacer es conectarte via ssh, con tu usuario y servidor, utilizando rsync para descargar solo los archivos que no están en tu carpeta uploads local.

Es un gran cambio. Te acabas de ahorrar valiosas horas de sicronización para poder hacer un cambio que quizás te tomará 20 minutos o menos.

Hagámoslo aún mejor

¿Que te parece si te digo que hay una forma aún mejor de sicronizar contenido de WordPress entre desarrollo y producción?

Si que la hay y es no copiar en lo absoluto el contenido en producción al contenido local. Lo que podemos hacer es redireccionar las llamadas a uploads local para que funcionen con uploads en producción. Esta es de lejos mi opción favorita y la que utilizo en todos mis sitios web en desarrollo.

El proceso incluye la creación de un archivo .htaccess en la carpeta wp-content/uploads local.

Edita y agrega este código al archivo .htaccess

#Put this file in wp-content/uploads and modify remote domain.
#Copia este arhivo en wp-content/uploads and modifica el dominio remoto.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp-content/uploads/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://remotedomain.tld/wp-content/uploads/$1 [L,P]
</IfModule>
view raw .htaccess hosted with ❤ by GitHub

Modifíca la línea 9 remplazando remotedomain.tld por el dominio remoto.

Por lo tanto, cualquier petición que haga el sitio web a wp-content/uploads local será redireccionada a http://dominioproducción/wp-content/uploads.

Importante: Si tu ruta local no es wp-content/uploads, lo cual es poco común, pero posible, debes modificar también la línea 6, con la ruta correspondiente.

Solo nos queda la base de datos

Los cambios no solo ocurren a nivel de archivos, también en base de datos. Para sincronizar la base de datos en producción con la versión local de desarrollo, utiliza WP Migrate DB Pro en su versión gratuita.

Con este plugin de WordPress puedes exportar la base de datos y en el proceso reemplazar todas las referencias al dominio en producción con el dominio local de desarrollo.

 

Importa la base de datos descargada utilizando phpMyAdmin, seguramente incluido en tu ambiente de desarrollo local y estás listo para comenzar a desarrollar.

Conclusiones

Si llegaste hasta acá ya eres capaz de optimizar considerablemente el tiempo empleado en sincronizar contenido de WordPress entre desarrollo y producción. Mejor aún, puedes evitar comenter errores graves en el proceso que te podrían hacer perder aún mas tiempo.

Recursos

6 thoughts on “Sincronizar contenido de WordPress entre desarrollo y producción”

    1. Gracias Sergio.

      Ahora, sobre tu duda, que es muy válida. Fíjate que el artículo habla solo de wp-content/uploads dejando fuera themes, plugins, archivos de traducción, etc. Generalmente los cambios en el resto de las carpetas en wp-content tienen una frecuencia muy inferior y no aumenta mucho el tamaño de wp-content.

      El problema está en que wp-content/uploads suele pesar varios gigabytes y hacer esa sincronización constantemente es una pérdida de tiempo enorme.

      Por lo tanto, con el resto de las carpetas, partiendo de la base de que cambian muy poco (no activamos plugins todos los dias, ni todas las semanas) es viable descargarlas, siempre y cuando ocurra un cambio. Ya te digo, con total conocimiento de causa que se hace muy poco.

      ¡Saludos!

  1. Excelente articulo, espero me puedas ayudar con esta duda, que es cuando el proyecto esta en 0 y se comienza en local, como se manejaría la carpeta uploads para trabajr en equipo, , lo que mencionas funciona excelente porque los sitios ya tienen sus imagenes en el servidor en producción, pero al reves como sería, saludos”!!! espero me haya explicado

    1. ¡Gracias!

      Parte de la base de que si tienes más de un desarrollador en el equipo, tienes más de un local y cada local es independiente. Es o eso, o trabajar todos en una “carpeta compartida” lo cual no es buena idea tampoco. Cada desarrollador va haciendo commits al repositorio local y push al remoto. Es desde el remoto, donde convergen todos los push que se hace la publicación al servidor de desarrollo o de producción.

      Generalmente, antes de publicar un sitio (producción) se inserta el primer contenido real en servidor de desarrollo. Después se publica y cuando tengan que hacer cambios y quieran utilizar el contenido que se ha ido generando en producción hasta el momento es cuando comienza a ser útil lo que muestra esta publicación.

      Saludos y espero que te sirva.

Deja un comentario