miércoles, 10 de marzo de 2010

Cómo hacer un backup en local de nuestra página Drupal

Esta es una pregunta que me estaba haciendo bastantes veces por el miedo a que estos hostings gratuitos de hoy en día se fueran al garete en el momento menos pensado. De hecho, tenía pensado hacerlo pero hasta que no he tenido problemas de verdad no me he centrado en hacerlo.

Para empezar a hacer nuestra copia de seguridad de un sitio Drupal que tengamos publicado en la web (se puede hacer a la inversa) tenemos que tener en cuenta que debemos hacer dos copias de seguridad, del sitio en sí (ficheros) y de la base de datos.

Backup del sitio

En primer lugar vamos a hacernos una copia del sitio. Nos copiamos todo lo que tenemos subido, es decir, archivos originales de la instalación, módulos que hayamos agregado y archivos adicionales del uso de la página, fundamentalmente imágenes.

- Accedemos como queramos a donde tenemos el sitio (FTP, explorador si lo tenemos en local, etc) y vamos a la raíz, que es el directorio donde se encuentra index.php, update.php, cron.php, ...
- Ese directorio y todos los que contiene los copiamos, es decir, nos los bajamos a nuestros local.

Una vez hecho esto ya tenemos nuestra copia de seguridad del sitio.

Backup de la Base de datos

Para hacer una copia de la base de datos vamos a tener que hacer uso de alguna herramienta.

Normalmente todos los alojamientos disponen de una llamada phpMyAdmin que permite administrar las bases MySQL que tengamos alojadas en un servidor. Una de las capacidades de esta herramienta se encuentra en el apartado "Exportar" y nos permite obtener algún fichero de la extensión que le digamos con todos los datos de nuestra base.

Nosotros normalmente haremos un backup de la base con inserts extendidos y con extensión sql. Obtendremos un archivo "basededatos.sql" con todo el contenido de la base de datos que ha ido manipulando drupal a medida que hemos ido trabajando en ella.

Es recomendable antes de realizar este backup borrar la caché de datos de drupal para no hacer copias de datos innecesarios.

Integrar las copias en nuestro local

Para integrar las copias en nuestro local vamos a necesitar dos herramientas:

  • Un servidor Apache para los ficheros php del sitio. Existen varios que cumplen este requisito como AppServ, WebServ o Xampp. Algunos contienen una distribución de MySQL integrada para que no sea necesario descargarla
  • Un paquete de herramientas administrativas para operar con bases de datos MySQL por lo que, efectivamente, debemos tener instalado MySQL en nuestro equipo. Yo, particularmente uso MySQL GUI Tools
Empezaremos por migrar la base de datos.

  • Debemos crear una base de datos dentro de MySQL, lo que viene siendo crear un nuevo esquema. Por ejemplo, lo creamos con el MySQL Administrator del paquete que indicamos anteriormente. Pongámosle, por ejemplo, "drupallocal"
  • Abrimos el MySQL Query Browser (importante seleccionar como default schema -esquema por defecto- el recién creado drupallocal) y marchamos a File -> OpenScript... . Ahí se nos abrirá un explorador donde seleccionaremos el archivo sql que obtuvimos de nuestro backup generado por phpMyAdmin. Se nos mostrará el contenido del backup y le daremos a "Execute" recordando que debe estar marcado como default drupallocal.
  • Una vez hemos ejecutado y si no ha habido ningún problema deberíamos tener nuestra base de datos migrada. Podemos comprobarlo mirando en el esquema si se han creado tablas y tienen datos dentro.
Ahora vamos a migrar el sitio.

  • Tenemos que instalar el servidor apache para que pueda interpetrar los ficheros php de los que se compone el sitio Drupal.
  • Tenemos que mover los ficheros que nos hemos bajado del sitio a una carpeta específica del servidor. En el caso de AppServ es %ruta_instalacion_AppServ%/www/ , por ejemplo.
  • Una vez copiado en la carpeta que sea debemos acceder a la carpeta %ruta_instalacion_AppServ%/www/drupallocal/sites/default/ y modificar el fichero settings.php. Tenemos que cambiar la entrada poniendo nuestro usuario, password, host y el nombre de la base de datos (en nuestro caso drupallocal):


    $db_url = 'mysql://user:pass@localhost/drupallocal';

Una vez realizados estos pasos tenemos copiada la página en nuestro local y si nuestro servidor está corriendo accediendo a http://localhost/drupallocal/ (en caso de AppServ) entraremos en nuestra página en drupal exactamente igual que como la tenemos en publicada. Al acceder a nuestro link "Noticias" vemos como... ¿error 404?. Sí, es posible que pase una vez hemos migrado la página a local.

Tenemos que hacer un par de cositas más para que funcione:

  • Ejecutamos http://localhost/drupallocal/update.php que podremos ejecutar si tenemos en el fichero settings.php anterior la entrada (si la tenemos, ejecutamos el update y cambiamos esta propiedad a FALSE)


    $update_free_access = TRUE;

  • Una vez hemos hecho esto, ejecutamos http://localhost/drupallocal/cron.php
Probamos de nuevo nuestra web y... sigue fallando. Lo más probable es que en nuestro espacio publicado tuviéramos activadas las Clean URLs de Drupal, que en principio no están soportadas por nuestro servidor Apache. Si accedemos a http://localhost/drupallocal/?q=admin/settings/clean-urls y las desactivamos. Ahora funcionará todo, pero nosotros, realmente lo queremos tener exactamente igual que nuestro espacio publicado. Entonces debemos hacer una cosita más.

El servidor Apache al iniciarse carga diversos módulos que necesita para su funcionamiento. Uno de ellos, llamado mod_rewrite, permite reescritura de URL's al vuelo (definición de andar por casa) pero, por defecto, Apache no lo carga. Normalmente este módulo si se carga en los servidores de los hosting gratuitos por lo que se observará que las URL limpias no dan problemas en sitios Drupal en remoto, pero sí en local. Debemos buscar un archivo llamado httpd.conf y buscar donde se encuentra la carga de módulos (LoadModule ...). Pues debemos descomentar la parte que pone:

LoadModule rewrite_module modules/rewrite_module.so

Después de reiniciar el servidor, volvemos a la página de Clean-URLs y las activamos para que, por fin, tengamos todo tal y como está en nuestro espacio publicado.

No hay comentarios:

Publicar un comentario