Si ya tienes una aplicación Laravel desplegada en un servidor y necesitas moverla a otro servidor administrado por Moss, en este artículo te explicamos cómo 😀

Asumimos los siguientes nombres, contraseñas y direcciones IP. Recuerda sustituirlos por los datos reales en tu caso.

  • El sitio a mover se llama mysite.com
  • mysite.com está actualmente alojado en el servidor src 
  • src tiene la dirección IP 10.0.0.1 
  • src tiene un usuario user con permisos para leer los ficheros de mysite.com 
  • La aplicación Laravel mysite.com utiliza una base de datos llamada db con nombre de usuario db_user y contraseña db_pass 
  • El servidor destino de mysite.com será dst y tendrá la dirección IP 10.0.0.2 
  • Tu máquina local se llama local 

Notas:

  • Asumimos que el código de mysite.com está en un repositorio git.
  • Vamos a utilizar scp para copiar ficheros de un servidor a otro utilizando tu máquina local como almacenamiento intermedio. Si te sientes más cómodo utilizando un cliente FTP/SFTP, puedes usarlo en su lugar (recuerda que el nuevo servidor estará configurado con Moss y por tanto para subir ficheros puedes usar SFTP pero no FTP, por motivos de seguridad).
  • Asumimos que tu base de datos utiliza el motor MySQL o MariaDB. Si no es así, consúltanos a través del chat de soporte.

Crea el nuevo servidor

Si no lo has hecho aún, entra en tu cuenta de Moss y crea el nuevo servidor.

Para realizar esta acción debes ser el administrador de tu organización. Si eres un desarrollador, dile a tu administrador que cree el servidor en un workspace donde colabores.

Crea el sitio web en el nuevo servidor

Si no lo has hecho aún, entra en tu cuenta de Moss y crea tu aplicación Laravel. Omite por el momento la sección Despliega tu web, lo haremos más tarde.

  • Como dominio raíz debes indicar mysite.com 
  • El repositorio git debe ser el que contiene el código de mysite.com
  •  Selecciona 'MySQL' como motor de base de datos, db como nombre de base de datos, db_user como nombre de usuario y db_pass como contraseña (puedes elegir una nueva contraseña si lo prefieres)
  • Completa el resto del formulario a tu discreción

Disminuye el tiempo de vida de los registros DNS

Los registros DNS tienen un tiempo de vida (TTL = Time to Live) que indica cuánto tiempo puede ser cacheada una resolución de nombre. Para que el proceso de migración sea lo más rápido posible, es recomendable disminuir el TTL del registro que resuelve mysite.com a la dirección 10.0.0.1 al mínimo que te permita tu proveedor DNS. De esta forma, cuando actualicemos mysite.com a la dirección 10.0.0.2, tus usuarios tendrán que esperar menos tiempo hasta que puedan acceder al sitio desplegado en el nuevo servidor.

En la figura puedes ver un ejemplo de cómo cambiar el TTL en Cloudflare. Si utilizas cualquier otro proveedor DNS, podrás acceder a un panel similar donde actualizar el TTL. Simplemente cámbialo al valor más pequeño que te permita tu proveedor.

Una vez aplicado el cambio, deberías esperar tanto tiempo como indicase el TTL original antes de realizar los siguientes pasos. De esta forma nos aseguramos de que las cachés que incluyan el TTL más elevado han expirado y el nuevo TTL es el que se está utilizando en su lugar.

Copia la base de datos

En este paso vamos a crear una copia de tu base de datos actual para restaurarla en el nuevo servidor.

Prepárate para la copia

En primer lugar, entra tu servidor actual mediante SSH:
ssh user@10.0.0.1 

Asumiendo que mysite.com está en producción, tus usuarios podrían estar interactuando con la aplicación y modificando la base de datos. Si no es así, pasa directamente a la sección Realiza la copia.

Lo normal es que no quieras perder datos durante la migración, y por tanto deberías impedir que haya escrituras tras realizar la copia de la base de datos. Las formas más comunes de hacerlo son:

  1. Poner tu aplicación en modo mantenimiento. En este modo, tus usuarios verán un mensaje indicando que estás realizando tareas de mantenimiento. Laravel te ofrece el modo mantenimiento de forma muy sencilla, simplemente ejecuta php artisan down .
  2. Poner tu aplicación en modo de solo-lectura. Esto requiere modificar tu aplicación para que rechace todas las operaciones de escritura pero permita las de lectura. Así tus usuarios tendrán acceso parcial a tu aplicación durante la migración, aunque requiere un mayor esfuerzo por tu parte.
  3. Detener el servidor web actual (p.ej. sudo service apache2 stop o sudo service nginx stop). Mientras esté apagado tus usuarios no podrán acceder al servicio, así que lo recomendable es que les avises con tiempo de que habrá un mantenimiento planificado en tu aplicación web.

Elige la opción que mejor se ajuste a tu caso de uso y pasemos a realizar una copia de la base de datos.

Realiza la copia en el servidor actual

En general, tienes dos opciones para realizar un volcado (dump) de la base de datos para su posterior restauración:

  1. Utilizando una herramienta tradicional de gestión de base de datos. En dicho caso consulta la documentación de la herramienta en cuestión, p.ej. phpMyAdmin y MySQL Workbench.
  2. Ejecutando comandos desde la consola. Ésta es la opción que detallamos a continuación.

Si has accedido a src vía SSH, vuelca el contenido de la base de datos que usa tu aplicación a un fichero comprimido .sql.gz y cópiala en tu máquina local:

src$ mysqldump -u db_user -p --databases db_name | gzip > backup.sql.gz
src$ exit
local$ scp user@10.0.0.1:~/backup.sql.gz .

Restaura la copia en el nuevo servidor

Ahora que tienes un volcado de tu base de datos en tu propia máquina, podemos restaurarla en el nuevo servidor:

local$ scp backup.sql.gz dev@10.0.0.2:~/
local$ ssh dev@10.0.0.2
dst$ gunzip -c backup.sql.gz | mysql -u db_user -p
dst$ exit

Copia los ficheros de 'storage'

Las aplicaciones Laravel guardan todo fichero persistente (p.ej. logs y archivos generados por los usuarios de la aplicación) en un directorio llamado storage/. Para completar la migración, debes copiar su contenido en el nuevo servidor:

local$ ssh user@10.0.0.1
src$ cd <path_to_site>/storage
src$ tar -czf storage.tgz .
src$ exit
local$ scp user@10.0.0.1:<path_to_site>/storage/storage.tgz .
local$ scp storage.tgz dev@10.0.0.2:~/
local$ ssh dev@10.0.0.2
dst$ cd sites/site.com/shared/storage/
dst$ tar zxvf ~/storage.tgz
dst$ exit

Despliega el sitio web en el nuevo servidor

Entra de nuevo en tu cuenta de Moss y despliega la aplicación en el nuevo servidor.

Comprueba que la aplicación funciona en el nuevo servidor

Antes de actualizar los registros DNS debemos comprobar que la aplicación web funciona correctamente en el nuevo servidor.

Para realizar la prueba, vamos a forzar que mysite.com resuelva a la dirección IP del nuevo servidor (10.0.0.2) en tu máquina local. Para ello debes añadir la siguiente línea a tu fichero de hosts:

10.0.0.2 mysite.com

En Linux y Mac OS X tu fichero de hosts es /etc/hosts . En Windows el fichero es c:\Windows\System32\Drivers\etc\hosts. Este artículo de Rackspace trata dicho fichero en mayor profundidad.

Una vez guardados los cambios, abre tu navegador favorito y accede a mysite.com.

En caso de que hayas seleccionado la opción de certificado Let's Encrypt al crear el sitio con Moss, verás un aviso del navegador indicando que el certificado no es válido. Esto es normal, pues el DNS sigue apuntando a tu servidor antiguo y Let's Encrypt no puede validar aún la autenticidad de la solicitud de certificado. Simplemente ignora el aviso del navegador e inspecciona tu aplicación.

Recuerda realizar tantas pruebas como consideres oportunas para garantizar el correcto funcionamiento de la aplicación. Una vez estés satisfecho, elimina la línea que añadiste a tu fichero de hosts y pasemos a poner el sitio en producción actualizando el DNS 🤗

Actualiza tus registros DNS

Finalmente, actualiza los registros de tu proveedor DNS para que mysite.com resuelva a la dirección IP del nuevo servidor 10.0.0.2.

En la figura puedes ver un ejemplo de cómo actualizar el registro tipo A en Cloudflare. Si utilizas cualquier otro proveedor DNS, podrás acceder a un panel similar donde realizar la misma acción.

Ahora simplemente espera a que expiren las entradas DNS antiguas en las cachés (durante 2 minutos en este ejemplo) y tu aplicación Laravel ya estará accesible a todos tus usuarios desde el nuevo servidor administrado por Moss. ¡Enhorabuena! 👍

Did this answer your question?