Clonar una web: los archivos

En la entrada previa hemos visto cómo clonar la base de datos como parte de nuestro objetivo de disponer de un entorno de pruebas de nuestra web en un servidor local actualizado regularmente. En esta ocasión abordamos cómo mantener una copia actualizada de los archivos de nuestro servidor para así completar el proceso.

Conar Web

Esta es la tercera entrega de la serie Clonar una web en un servidor local, por lo que te recomiendo leer las entregas previas. No obstante, este artículo puede ser tratado como un artículo atómico asumiendo que perdemos ciertos matices.

Una de las ventajas del proceso de clonado de los archivos frente al de clonado de una base de datos es que si bien con la base de datos podíamos encontrarnos muchas limitaciones en función de los diferentes proveedores y planes de hostings, para clonar los archivos el único requisito que debemos cumplir con respecto a nuestro host remoto es tener acceso mediante ftp, algo que todos los hosting ofrecen.

Descarga de archivos

Para descargar los archivos nos serviremos del comando wget. Comenzaremos el proceso creando un script de consola y le asignándole los permisos necesarios:

mkdir ~/scripts
vim ~/scripts/cloneWebFiles.sh
chmod 0755 ~/scripts/clonWebFiles.sh

Con el siguiente contenido:

#!/bin/bash

wget -r -N -q --level=15 --user=user --password='password' --directory-prefix=~/webBackUp fttp://ftp.url.com

Dónde:

  • -r, indica recursividad
  • -N, indica que descargue solo archivos nuevos y/o modificados
  • -q, oculta los mensajes de salida del comando
  • –level=15, es el numero de niveles de recursividad
  • –user=user, es el usuario ftp
  • –password=’password’, es la contraseña del ftp
  • –directory-prefix=~/webBackUp, es el directorio dónde copiaremos los archivos
  • fttp://ftp.url.com, es el ftp con el path del que queremos descargar los archivos

Esto realizará una copia de los archivos de nuestra web en la carpeta ~/webBackUp/ftp.url.com. Esta operación suele tardar bastante tiempo, así que para agilizarla hemos optado por descargar únicamente los archivos nuevos y/o modificados recientemente, aun así con una web de tamaño medio tardará un buen rato.

Debemos destacar que no descargamos los archivos directamente a nuestro entorno de pruebas, sino que los descargamos a una carpeta intermedia. Esto lo hacemos por dos motivos:

  1. Modificaremos algunos archivos antes de copiarlos en nuestro entorno de pruebas.
  2. Podemos crear un segundo script que omita la descarga y que restaure nuestra copia mucho más rápido, muy útil en caso de querer descartar los cambios realizados y comenzar desde 0.

Modificación de datos relativos al entorno

Una vez hecha la descarga de los archivos deberemos modificar los que contienen datos relativos a nuestro host. En nuestro ejemplo, el archivo wp-config.php almacena la inforación de la conexión a la base de datos. En vuestro caso debereis localizar que archivos contienen este tipo de información antes de seguir avanzando.

La estrategia que seguiremos para ello sera la de realizar una copia inicial de forma manual de los archivos sensibles al entorno de pruebas. Una vez hecha actualizaremos los datos necesarios.

Por otro lado, automatizaremos una tarea que renombra estos archivos en la ubicación intermedia, de forma que cuando realicemos la copia al entorno de pruebas no se sobrescriban. Así que agregamos estas dos líneas a nuestro script:

rm ~/webBackUp/ftp.url.com/w-config.php.renamed
mv ~/webBackUp/ftp.url.com/w-config.php ~/webBackUp/ftp.url.com/w-config.php.renamed

Copia de archivos a la ubicación definitiva

Ya con los archivos descargados y una vez resuelta la problemática de la información sensible al entorno copiamos los archivos:

cp -r ~/webBackUp/ftp.url.com/* /var/www/targetVHost

Como vemos, este sistema solo copia los archivos nuevos y/o que han sufrido cambios, pero si hemos eliminado un archivo de nuestro host remoto no lo eliminará de nuestro host local. Para mi esta situación no supone un problema a día de hoy, así que simplemente no hago nada, pero siempre se puede preparar algún sistema que busque la diferencia de archivos entre la copia intermedia y el entorno de prueba y elimine los sobrantes de esta segunda ubicación.

El script

Y todo el rollazo que os he soltado se traduce básicamente en el siguiente script:

#!/bin/bash

wget -r -N -q --level=15 --user=user --password='password' --directory-prefix=~/webBackUp fttp://ftp.url.com
rm ~/webBackUp/ftp.url.com/w-config.php.renamed
mv ~/webBackUp/ftp.url.com/w-config.php ~/webBackUp/ftp.url.com/w-config.php.renamed
cp -r ~/webBackUp fttp://ftp.url.com/* /var/www/targetVHost

Programar la ejecución de la copia

Al igual que hicimos con la clonación de la base de datos programamos la ejecución del script con Cron:

crontab -e

E incluimos la siguiente línea en el archivo crontab:

0 2 * * 5 ~/scripts/clonWebFiles.sh

Aunque en principio ambos script podrían ejecutarse a la misma vez, hemos sido precavidos retrasando una hora la ejecución de la copia de los archivos, de forma que se ejecute cada viernes a las 02:00 de la madrugada.

Créditos y Referencias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *