Migración de Sistemas Gestores de Contenido (CMS) a un nuevo servidor

De Apuntes
Saltar a: navegación, buscar

Migrar un Sistema Gestor de Contenido (CMS) como Wordpress, Joomla, Moodle, Drupal, MediaWiki y otros, que se ejecutan con el intérprete PHP y almacenan el contenido en una base de datos MySQL o PostgreSQL, tienen muchas similitudes y comparten prácticamente los mismos pasos para su realización. Por supuesto, la documentación oficial de cada sistema ofrecerá más detalles, puede consultarla para ampliar su conocimiento.

Note que no debe hacer una instalación nueva en el servidor, si no migrar la instalación actual, la cual ha sido configurada y personalizada según los requerimientos del sitio.

Paso 1: Revise los requisitos

El nuevo ambiente puede ofrecer versiones diferentes de PHP, Apache, Ngnix, MySQL, PostgreSQL, etc., según el caso, por lo que es necesario confirmar que nuestro sistema se ejecute correctamente con dichas versiones.

Estos son algunos comandos para confirmar las versiones de programas en un servidor GNU/Linux:

# PHP
php --version

# Apache en un Debian/Ubuntu
/usr/sbin/apache2 -v

# Apache en un RedHat/CentOS/Fedora
httpd -v

# MySQL
mysql --version

# PostgreSQL
pg_config --version

Si no cuenta con los privilegios adecuados para ejecutar alguno de los comandos, consulte con el administrador del servidor.

Compruebe los requisitos de su sistema consultando la documentación oficial:

Los CMS reciben constantes actualizaciones de parte del equipo desarrollador, estas actualizaciones usualmente permiten soportar versiones más modernas de PHP, MySQL, etc. Si tiene una versión desactualizada de su sistema, actualícela antes de realizar la migración. Note que además de actualizar los archivos del sistema, muchas veces debe realizar cambios en la base de datos, para ello usualmente se ofrece un script que realiza la tarea automáticamente.

Para actualizar su sistema puede seguir la documentación oficial:

Paso 2: Respalde los archivos

Para respaldar los archivos de su sitio puede empaquetarlo en un solo archivo, de esta manera será más fácil manipularlo.

tar czf respaldo_archivos.tar.gz /ruta/a/archivos/

Donde:

  • respaldo_archivos.tar.gz corresponde al archivo con el respaldo, nómbrelo a su conveniencia, por ejemplo puede añadir la fecha en que se hizo el respaldo.
  • /ruta/a/archivos es el directorio que contiene los archivos a respaldar. Por ejemplo:
    • /home/juanito/public_html
    • /var/www/html/sitioweb

Paso 3: Respalde la base de datos

Los sistemas gestores de contenido usualmente utilizan los motores de bases de datos MySQL y PostgreSQL. En la base de datos se almacena el contenido como el título, cuerpo, etiquetas, etc. (los adjuntos e imágenes usualmente se almacenan aparte, en un directorio del sistema de archivos) y la configuración del sistema.

Tenga en cuenta que puede darse el caso de que un CMS utilice más de una base de datos, por ejemplo un Drupal multisitio o un CMS con un módulo personalizado que utilice su propia base de datos.

Para respaldar la base de datos necesitará conocer el nombre de la misma y el usuario, con su contraseña, utilizado para accederla. Si no tiene esos datos, puede consultar el archivo de configuración de su sistema, estos se almacenan en texto plano, algunos ejemplos:

  • Drupal: sites/default/settings.php
  • Wordpress: wp-config.php
  • Joomla: configuration.php
  • Moodle: config.php
  • MediaWiki: LocalSettings.php

A pesar de que existen administradores gráficos de bases de datos, como phpMyAdmin, la recomendación es iniciar una sesión remota SSH y realizar el respaldo utilizando los respectivos comandos, según el caso.

Base de datos MySQL

Para respaldar una base de datos MySQL utilice el comando mysqldump:

mysqldump -u usuario -p basededatos > respaldo_basededatos.sql

Donde:

  • usuario corresponde al usuario que accede a la base de datos. Nótese que este no es el usuario ssh o administrador del sitio web.
  • basededatos es el nombre de la base de datos a respaldar.
  • respaldo_basededatos.sql corresponde al archivo con el respaldo, nómbrelo a su conveniencia, por ejemplo puede añadir la fecha en que se hizo el respaldo.

Base de datos PostgreSQL

Para respaldar una base de datos PostgreSQL utilice el comando pg_dump:

pg_dump -h localhost -U usuario --format=c --file=respaldo_basededatos.sqlc basededatos

Donde:

  • usuario corresponde al usuario que accede a la base de datos. Nótese que este no es el usuario ssh o administrador del sitio web.
  • respaldo_basededatos.sqlc corresponde al archivo con el respaldo, nómbrelo a su conveniencia, por ejemplo puede añadir la fecha en que se hizo el respaldo.
  • basededatos es el nombre de la base de datos a respaldar.

Paso 4: Copie los archivos a la nueva ubicación

La forma más común para transferir archivos desde y hasta un servidor es utilizando el protocolo SFTP (SSH File Transfer Protocol), aunque muchos servidores utilizan FTP.

Básicamente necesitará conocer los siguientes datos:

  • Dirección del servidor (host). Puede ser un número IP, por ejemplo 163.178.170.6, o un nombre de dominio, por ejemplo web2.ucr.ac.cr
  • Protocolo. Usualmente SFTP o FTP
  • Puerto. SFTP usa de manera predeterminada el puerto 22, FTP el puerto 21
  • Usuario. Este no es el usuario administrador del sitio, o el usuario de la base de datos.
  • Contraseña

Herramientas gráficas

Existen muchas opciones de herramientas para transferir archivos por diversos protocolos, algunas son:

  • FileZilla. Multiplataforma. Muchas opciones.
  • WinSCP. Para Windows
  • Cyberduck. Para MacOS y Windows.
  • Nautilus. Explorador de archivos integrado en entornos Gnome y Unity en sistemas GNU/Linux de escritorio.

Intérprete de comandos

En el caso que desee realizar transferencia de archivos utilizando la terminal, por ejemplo desde un servidor, donde difícilmente se instala el entorno gráfico, puede utilizar la herramienta scp (Security copy). Este programa transfiere archivos utilizando el protocolo SFTP.

Se utiliza de una manera muy similar al comando cp. La ruta se forma al igual que cualquier ruta tipo Unix, además debe añadirse un prefijo que indique cuál es el usuario y servidor remoto.

En este ejemplo se copia el archivo respaldo.tgz, ubicado en el servidor con dirección web2.ucr.ac.cr, al directorio local /home/pepe/respaldos/.

scp juanito@web2.ucr.ac.cr:/home/juanito/respaldos/respaldo.tgz /home/pepe/respaldos/

O bien, en este caso se copia un archivo local a una dirección remota:

scp /home/pepe/respaldos/respaldo.tgz juanito@web2.ucr.ac.cr:/home/juanito/respaldos/

Paso 5: Restaure los archivos

Una vez que haya copiado los archivos al servidor, deberá colocarlos en el respectivo directorio.

Si el respaldo está empaquetado en un solo archivo .tgz (o tar.gz), deberá descomprimirlo:

tar zxf respaldo_archivos.tar.gz

Esto generará un directorio con los archivos del sitio web. Copie el contenido en el respectivo directorio:

cd directorio/con/respaldo
cp * .* /home/juanito/public_html

El comodín * indica que se copien todos los archivos. En el caso del .* indica que se copien todos los archivos que inician con un punto, es decir, los archivos ocultos.

Si ingresa desde un navegador al sitio web, el sistema debería responderle, con un error indicando que no encuentra la base de datos. Si es así, puede proceder a restaurar la base de datos en el siguiente paso.

Paso 6: Restaure la base de datos

Una vez copiado el respaldo de la base de datos al servidor, deberá proceder a restaurarla.

Base de datos MySQL

Para restaurar una base de datos MySQL utilice el comando mysql:

mysql -u usuario -p basededatos < respaldo_basededatos.sql

Donde:

  • usuario corresponde al usuario que accede a la base de datos. Nótese que este no es el usuario ssh o administrador del sitio web.
  • basededatos es el nombre de la base de datos a restaurar. Esta debe crearse previamente y estar vacía. Si la misma contiene datos siga esta guía para borrarlos.
  • respaldo_basededatos.sql corresponde al archivo con el respaldo.

Base de datos PostgreSQL

Para restaurar una base de datos PostgreSQL utilice el comando pg_restore:

pg_restore -h localhost -U usuario --dbname=basededatos --file=respaldo_basededatos.sqlc

Donde:

  • usuario corresponde al usuario que accede a la base de datos. Nótese que este no es el usuario ssh o administrador del sitio web.
  • basededatos es el nombre de la base de datos a respaldar. Esta debe crearse previamente y estar vacía
  • respaldo_basededatos.sqlc corresponde al archivo con el respaldo.

Actualización de archivos de configuración

Una vez restaurada la base de datos, deberá actualizar el respectivo archivo de configuración del sistema, con el nuevo nombre de la base de datos, el nuevo usuario y su nueva contraseña según sea el caso. Algunos ejemplos de archivos de configuración:

  • Drupal: sites/default/settings.php
  • Wordpress: wp-config.php
  • Joomla: configuration.php
  • Moodle: config.php
  • MediaWiki: LocalSettings.php

En este momento el sistema debería responderle correctamente.

Paso 7: Pruebe que todo haya quedado bien

Por último confirme que el sitio se esté ejecutando correctamente. Para ello puede realizar diversas pruebas de funcionalidad (se ve el carrusel, funciona el calendario, etc.).

También puede consultar las bitácoras (logs) del servidor web, en el caso que tenga acceso a estas. Por ejemplo:

tail -f /var/log/apache2/sitioweb-error.log

Algunos sistemas tienen su propia bitácora, tal es el caso de Drupal en cuyo caso se conoce como watchdog.

Otra forma de comprobar que no hayan errores es consultar el informe de estado que tienen algunos sistemas.

Si todo trabaja bien, felicidades, ha migrado su sitio web.