Pasos para migrar un proyecto web

25 noviembre 2012 at 19:39 by Adrián Pérez

LAMP MigrationMigrar un proyecto web (php/mysql) de un servidor a otro(s) puede parecer un proceso sencillo, pero rara es la vez en la que no salen imprevistos. Por esta razón, prefiero tener bien documentado todo el proceso de migración, antes de empezar, para evitar sobresaltos e ir sobre seguro.

La idea del siguiente proceso, es clonar la base de datos del servidor a migrar al nuevo servidor, y una vez clonada, modificar el código del servidor a migrar para empezar a usar la base de datos del nuevo server en lugar de la que usaba hasta ahora. De esta manera, no se perderán datos cuando se inicie la modificación de las DNS para apuntar al nuevo servidor.

REQUISITOS

  • En el nuevo servidor, abrir (por lo menos) los puertos 22 y 3306 para la IP del servidor a migrar.
  • Apache y MySQL instalados y configurados en el nuevo server, incluído el vhost del proyecto.
  • Resto de dependencias del proyecto instaladas en el nuevo server.

PRODUCCION - copia del código web

1- Indicamos a los programadores que no realicen ningún cambio en el código del proyecto hasta que no finalice la replicación de las DNS del último punto

// Hacemos backup del código del proyecto
2- tar -czvf /tmp/backup.tar.gz /var/www/proyecto

// Copiamos el código del proyecto al nuevo server
3- sftp user@nuevoserver.com

NUEVO SERVER - restaurar código web

// Restauramos el código del proyecto en el nuevo server
4- tar -zxvf backup.tar.gz

5- Modificamos el código del proyecto en el nuevo server, para usar el mysql local y, si ya teníamos alguna copia de la bbdd en local, verificamos funcionamiento

PRODUCCION - copia de la bbdd

// Paramos apache
6- /etc/init.d/httpd stop

// Hacemos backup de la base de datos
7- mysqldump -u root -p dbname > dbname.sql
8- gzip dbname.sql

// Copiamos la base de datos al nuevo server
9- sftp user@nuevoserver.com

NOTA: Los pasos 7,8 y 9, se podrían querer meter en un cron, para ejecutarse automáticamente antes de iniciar el proceso de migración, si la base de datos fuera muy grande, ya que en este caso el proceso de dump, gzip y copia por sftp podría durar bastante.

NUEVO SERVER - restaurar la bbdd

// Si no existe, creamos la bbdd
10- mysql -u root -p
create database dbname; exit;

// Descomprimimos y restauramos la bbdd
11- gunzip dbname.zip
12- mysql -u root -p -D dbname < dbname.sql

// Reiniciamos mysql y apache y testeamos el nuevo entorno
13- /etc/init.d/mysqld restart
14- /etc/init.d/httpd restart

PRODUCCION - PR pasa a usar la bbdd del nuevo server

//Paramos mysqld
15- /etc/init.d/mysqld stop
16- chkconfig mysqld off

17- Modificamos el código del proyecto para usar la base de datos del nuevo server

//Iniciamos httpd y volvemos a estar UP
18- /etc/init.d/httpd start

19- Testeamos que funcione todo correctamente y que los datos se estén almacenando en la nueva bbdd

DNS

20- Modificamos las DNS para que se empiece a replicar la IP del nuevo servidor

Una vez modificadas las DNS, bastará con esperar 48-72h a que se replique por completo la IP del nuevo servidor (en realidad a los pocos minutos ya debería empezar a verse la replicación en los servidores DNS principales). Pasadas 72h, ya podremos detener el Apache del antiguo servidor, y eliminarlo definitivamente tras verificar el correcto funcionamineto del nuevo entorno.

Flickr! Foto por Serge Melki