¿Cómo realizar una migración de WordPress mediante WP CLI?

En Globerada, aparte de desarrollar y mejorar diariamente este comparador de precios, lo cual no deja de ser un hobbie, a lo que nos dedicamos de forma habitual es a administrar servidores, desarrollo a medida de entornos de pruebas, y como no, lo más demandado en estos últimos años, configuración de diferentes aspectos del CMS más utilizado a día de hoy (WordPress). Desarrollo de pequeños plugins a medida, optimización y asesoramiento es el pan nuestro de cada día.

Una de las tareas más tediosas a las que te enfrentas cuando quieres migrar un servidor con WordPress, es el backup de los múltiples ficheros y como no, la base de datos. En los últimos años se han popularizado plugins que casi lo hacen de forma instantánea, incluso las soluciones de backup automatizado como BackupBuddy ya incluyen un script para la reinstalación.

Sin embargo, estas soluciones, lejos de ser perfectas, dan más dolor de cabeza y tareas adicionales que luego hay que ir revisando manualmente, ya que en ningún momento sabes que hay “under the hood”.

Por eso, en esta entrada, veremos como transferir un WordPress de un servidor (Linux) a otro, utilizando para ello wp-cli.

¿Qué ventajas tendrá ésto?

  1. El proceso es muy rápido. Es tan fácil como copiar y pegar los comandos inferiores (usando tus rutas)
  2. Mayor seguridad, ya que por defecto, se utilizarán los permisos sobre el usuario que recibe los datos vía scp

¿Qué es WP CLI?

WordPress CLI es un script en PHP, que una vez instalado en tu servidor, te permite acceder a tu instalación de WordPress para realizar multitud de tareas mediante comandos. Podrás realizar copias de seguridad, verificar hackeos (integridad), aprobar y moderar comentarios, desinstalar plugins, y multitud más de funciones que puedes consultar en la web oficial de WP CLI.

Es un programa oficial y aprobado por WordPress, así que no tengas miedo a utilizarlo.

Requisitos previos

Antes de realizar cualquier acción, será necesario instalar wp-cli. La instalación es realmente sencilla y sólamente hay que copiar y pegar los comandos en la consola. Además, y como es evidente, se necesita acceso SSH tanto el servidor de origen como destino.

Ten en cuenta que todos los pasos que se expondrán a continuación, es recomendable hacerlos previamente en un entorno de pruebas, con un dominio temporal, y cerciorarse de que todo es correcto.  Los errores más típicos suelen darse al pasar de una versión 5 de PHP a una versión 7, lo que conlleva a que ciertos plugins arrojen errores.  También es habitual si se pasa de un servidor con apache funcionando mediante mod_php a otro con PHP-FPM o mod_fcgid.

Otro error habitual cuando se hace una migración de WordPress es olvidarse de la configuración a nivel de virtual host en Apache. Para que WordPress funcione si tienes los enlaces permanentes activados, la directiva AllowOverride, que permite que los .htaccess sean interpretados a nivel de directorio, esté activada.

¿Cómo es recomendable entonces hacer las pruebas? Lo ideal es tener un dominio comprado para pruebas (como por ejemplo, pruebas.com). Este dominio de pruebas tendrá su registro A de DNS apuntado a la IP del servidor al que vas a migrar. Así, una vez completados los pasos inferiores, puedes ver si arranca WordPress, siempre con el error.log de Apache a mano.

Exportar base de datos

El primer paso será hacer el backup, o exportación, de la base de datos del WordPress que quieres migrar.

wp db export --add-drop-table --path=/ruta/a/worpress

Si no usas el parámetro –path, tienes que colocarte directamente en la instalación de WordPress.

Si el usuario sobre el que operas no tiene permisos de escritura en la instalación de WordPress (lo cual no es recomendable a nivel de permisos ya que tendrías que tener los permisos a nivel de usuario y a nivel de grupo estar en www-data), tendrás que colocarte obligatoriamente en una carpeta donde tengas permisos de escritura (como por ejemplo, en $HOME). Teniendo permisos de escritura, indicarás la ruta a la instalación de WordPress mediante –path (típicamente /var/www/ejemplo.com/public_html).

Como no hemos especificado ningún nombre, este comando creará un fichero SQL con esta forma ‘{dbname}-{Y-m-d}-{hash-aleatorio}.sql’.

Es importante añadir el comando drop table por si fallara a posteriori la importación y no todas las tablas si hubieran creado de forma correcta.

Aquí tienes ayuda sobre el comando wp db export.

BackUp Ficheros

Para hacer el backup de los ficheros (el propio WordPress) existen infinitas formas de hacerlo. Lo más sencilla es colocarse en el directorio superior al public_html y usar tar sobre dicha carpeta. De esta forma, nuestro tar tendrá en su interior una carpeta comprimida llamada public_html con todos los ficheros en su interior.

Consejo: Si usas plugins como BackUpBuddy, para que este fichero no sea muy grande, es recomendable borrar previamente las copias de seguridad que puedas tener almacenadas. También es recomendable borrar cualquier fichero que ocupe espacio y que no vayas a utilizar, como por ejemplo, los ficheros estáticos generados por plugins como WP Rocket.

tar -czvf ejemplo_html-`date +%d-%m-%Y`.tar.gz /dir/a/comprimir/

  • c: crea un nuevo archivo
  • z: comprime archivos con gzip
  • v: (verbose) permite obtener una descripción de los archivos que se van comprimiendo (opcional)
  • f: indica a tar que el siguiente argumento es el nombre del fichero a generar. En nuestro caso, ejemplo_html-`date +%d-%m-%Y`.tar.gz

Copiar ficheros en el servidor de destino

De nuevo, aquí hay infinidad de opciones. Lo que a todos nos viene a la cabeza, es una vez hemos hecho las copias de seguridad, descargar los ficheros mediante FTP / SFTP a nuestro ordenador. Después, subir estos ficheros al servidor de destino.

Sin embargo, si tienes permisos SSH en el servidor de destino, lo más sencillo es utilizar el comando scp para transferir tanto el fichero sql como el tar.gz

Ficheros HTML

scp ejemplo_html-`date +%d-%m-%Y`.tar.gz usuario_remoto@IP_REMOTA:/directorio/remoto

Base de datos

scp wordpress.sql usuario_remoto@IP_REMOTA:/directorio/remoto

Descomprimir en servidor destino

Una vez tienes en el directorio remoto tanto la base de datos, como el tar con la carpeta comprimida de public_html, hay que comenzar a poner en funcionamiento el nuevo WordPress.

Es decir, suponiendo que tienes un Virtual Host con el directorio público en /var/www/ejemplo.com/public_html, tendrías que descomprimir este tar.gz en /var/www/ejemplo.com/

tar xvzf file.tar.gz

  • x) Con esta opción decimos a tar que extraiga los ficheros
  • v) verbose
  • z) gzip
  • f) Proporcionas un fichero

Puedes opcionalmente  usar el parámetro  -C para especificar una ruta de extracción.

Modificar WP-Config

Una vez tienes instalado mySQL/mariaDB en el servidor de destino y has configurado usuario, contraseña y creado una base de datos para WordPress (si no sabes cómo hacerlo, aquí tienes una magnífica guía de digitalocean), es tan fácil como editor un fichero.

Lo más sencillo es cambiar los valores del fichero wp-config.php a los nuevos parámetros de la base de datos (nombre de usuario, contraseña y base de datos). También se puede ejecutar de forma manual la creación de este fichero mediante wp config create.

Importar base de datos

Consejo previo: Es importante previamente modificar, si no lo has hecho ya, el valor por defecto de mysql de maximum packet size, ya que de lo contrario, puede dar error la importación si tu fichero sql es muy grande.

Esta era la principal razón por la que indicamos al principio exportar añadiendo el comando drop table, para que en el caso de error, una vez volvamos a importar, el contenido creado esté “limpio”. Un valor de 64MB es suficiente. Recuerda reiniciar mysql después de cambiar este fichero.

mysql -u usuario_bbdd -p nombre_bbdd < file.sql

Consejos para un 0 downtime

Como se indicó al inicio, para solucionar cualquier tipo de error durante la migración, es recomendable usar un dominio temporal, configurado mediante host, o comprado y apuntando el registro A. Además, también es prácticamente obligatorio cambiar el TTL del registro A del DNS a un tiempo de minutos para cuando se cambie la dirección IP del servidor que queremos migrar.

Para hacer diferentes pruebas, una vez importado y realizados todos los pasos anteriores, se puede cambiar el nombre del blog de una manera muy sencilla con estas dos líneas:

wp option update home 'http://example.com'

wp option update siteurl 'http://example.com'

Aquí tienes más formas de cambiar la URL base del blog si no quieres utilizar wp cli.

Referencias

Wordpress CLI
WordPress CLI te permite controlar todos los aspectos de tu blog conectado mediante SSH (CLI = command line interface)

Leave a Reply

¡Sé el primero en comentar!

avatar
  Subscribe  
Notificación de