backup WordPress usando LFTP

A veces, copiar un sitio web de un servidor a otro no es tan sencillo como quisiéramos. A veces simplemente no se puede contar con un backup completo en zip o tar.gz. Así que les voy a comentar un método para cuando se da alguna de las situaciones siguientes:

  • Cuando el hosting del sitio de origen no use cPanel y no podamos usar el backup que genera para copiar y restaurar en nuestro cPanel. Algunos paneles de control tienen file managers, pero ninguno es tan versátil como el de cPanel, que permite comprimir y descomprimir archivos zip, gzip, bzip…
  • Cuando no se tiene acceso al panel de control remoto, o de hecho cuando no hay panel de control instalado (como en algunos servidores dedicados).
  • Cuando en el host remoto haya muy poco espacio libre como para generar los backups.
  • Cuando el sitio WordPress ocupe muchos Gigas y los plugins convencionales, como BackWPup o Duplicator, no logren crear los archivos de backup porque el servidor esté muy sobrecargado o porque mate el proceso cuando excede el time limit de PHP.
  • Cuando queramos copiar un sitio dinámico (PHP) desde un servidor con cualquiera de los problemas mencionados y por ende no podamos usar una solución sencilla como wget mirror.
  • Cuando por el motivo que sea, no podemos usar rsync para sincronizar.

En todos esos casos, lo mejor es copiar remotamente desde el servidor de destino, por FTP, y de a un archivo a la vez. Entre servidores. Porque no es óptimo el descargarse los archivos a la PC local para luego subirlos al destino; perderemos mucho tiempo si el sitio es muy grande.

Sólo necesitamos poder tener acceso root al servidor de destino, que probablemente sea el nuestro, por lo que no debería haber problemas con eso.

Lo que vamos a usar es un simple script, que se conecta al servidor remoto de origen usando el comando lftp. lftp es una de las mejores utilidades de linea de comandos actualmente disponible para trabajar con servidores FTP. Una de sus funciones más útiles es la de mirroring, que usaremos para hacer un backup y que permite hacer una copiafiel del sitio sin abusar del cpu o la ram en ninguno de los dos extremos.

Si no tenemos instalado lftp en nuestro server, simplemente hay que ejecutar yum install lftp y sólo hace falta tenerlo en el servidor de destino, no es necesario en el origen porque la conexión usa FTP.

Primero vamos a crear un script en el server adonde queremos copiar los archivos. Lo llamaremos backup.sh, y debe contener estas lineas:

#!/bin/bash
HOST=’ftp.servidordeorigen.com’
USER=’usuario’
PASS=’password’
SOURCEFOLDER=’home/usuarioremoto/public_html/’
TARGETFOLDER=’/home/miusuario/public_html/’

lftp -f “
open $HOST
user $USER $PASS
lcd $SOURCEFOLDER
mirror –use-cache –verbose $SOURCEFOLDER $TARGETFOLDER
bye

Debemos asignarle a HOST, USER y PASS los datos del servidor remoto al que quremos conectarnos. SOURCEFOLDER es la ruta absoluta a la carpeta del servidor remoto desde donde queremos copiar los archivos; va a copiar TODO el contenido de directorios y archivos, recursivamente y sin pausa. TARGETFOLDER es la ruta absoluta a la carpeta en nuestro servidor donde queremos que se guarden los archivos.

Luego desde la consola ejecutamos bash backup.sh y comenzará la magia. Así de simple. El tiempo de copiado puede variar, dependiendo de la calidad de conexión entre ambos servidores, y si de ambos están en producción o no (por el cpu libre que puedan tener para esta tarea de copiado).

Deben saber que esto sólo copia los archivos del FTP remoto. Si hay bases de datos, tendremos que exportarlas a mano e importarlas en nuestro server. Si el sitio a migrar está en producción, hay que restringir el acceso a los usuarios para que no modifiquen el contenido realizando compras, subiendo archivos, publicando artículos, etc. Si se trata de una web con WordPress donde haya usuarios registrados, es conveniente usar un plugin como el Ultimate Coming Soon Page para plantar un aviso de mantenimiento fácilmente configurable.

Y si tenemos algún plugin de caché, desactivarlo si no afecta en mucho al uptime del servidor, para alivianar la tarea de copiado. Yo suelo vaciar el caché, desactivar el plugin de caché, y eliminar los archivos de caché manualmente para que luego se pueda reactivar el caché en el nuevo server y que esos archivos se regeneren limpiamente, sin ningún “prejuicio” de configuración del servidor anterior.

También como comentario, deben recordar que esta aplicación funciona como herramienta de backup incremental, de modo que si tenemos dudas de si se copiaron bien los archivos en una migración, o incluso si se cortó la conexión de uno de los servidores, simplemente hay que volver a ejecutar el script para que reanalice los cambios que se hayan dado y los incorpore a nuestra copia.

Algunos parámetros útiles que soporta LFTP

Esta herramienta acepta una buena cantidad de parámetros, pero vamos a comentar los más interesantes:

–reverse : indica que queremos actualizar la carpeta remota, es decir, si el backup lo haremos desde nuestro server hacia el remoto, y hay que intercambiar los valores de las variables SOURCEFOLDER y TARGETFOLDER. Si queremos que se actualice el server local en base al contenido remoto, simplemente no usemos este parámetro.

–delete : le indica a lftp que queremos eliminar todos los archivos y carpetas que no existan en el origen.

–use-cache : útil si vamos a sincronizar una gran cantidad de archivos, porque puede acelerar las cosas guardando un registro de archivos modificados. No tiene un real efecto la primera vez que hagamos la copia, pero si vamos a usar el script para hacer backups, esta opción permite saltearse los archivos que no hayan tenido modificaciones.

–exclude : porque siempre podemos querer excluir carpetas/archivosen ambos servers.

Hay muchos parámetros más, para los que quieran aprender o investigar, explicados en su página oficial: lftp.yar.ru.