Mover un proyecto
Traslada un proyecto desplegado, con sus datos, a otro servidor del mismo equipo: a un servidor más grande, a otra región o para retirar una máquina antigua. El proyecto conserva su ID, sus ajustes, sus dominios y su historial.
No se borra nada del servidor antiguo hasta que confirmes que el proyecto funciona en el nuevo.
Antes de empezar
- Necesitas el rol admin u owner en el equipo, y escribir el nombre del proyecto para confirmar.
- El proyecto debe estar desplegado. Un proyecto sin desplegar no tiene datos que copiar; clónalo en otro servidor en su lugar.
- El servidor nuevo debe estar listo, y el antiguo accesible, porque los datos se copian desde él.
- El proyecto no está disponible mientras se traslada: sus servicios se detienen para que la copia sea coherente. Planifica el traslado para un momento tranquilo. Tarda más o menos lo mismo que hacer una copia de seguridad de todos sus datos y restaurarla.
Iniciar un traslado
- Abre los Settings del proyecto → General → Move to another server.
- Elige el servidor nuevo. Zenavo lo comprueba y muestra:
- si el servidor está listo, si el equipo está dentro de su plan y si el servidor tiene suficiente memoria libre (según el límite de memoria de cada servicio, o su uso reciente);
- los conflictos de dominios y de puertos TCP/UDP publicados con otros proyectos de ese servidor;
- los datos que se van a copiar;
- los dominios generados que cambian automáticamente, y los registros DNS que debes cambiar para los dominios propios.
- Escribe el nombre del proyecto y haz clic en Move.
El traslado se ejecuta como una tarea. Su página muestra cada paso y el registro.
Qué ocurre
| Paso | Qué hace Zenavo |
|---|---|
| Comprobar el servidor nuevo | Confirma que está listo y que tiene espacio. Todavía no ha cambiado nada. |
| Detener las escrituras | Detiene los servicios de la aplicación en el servidor antiguo. |
| Copiar | Vuelca las bases de datos PostgreSQL y MySQL que no tienen volumen, luego las detiene y copia cada volumen como archivo .tar. Se registra el SHA-256 de cada archivo. |
| Desplegar | Despliega las mismas imágenes y configuración en el servidor nuevo con todos los servicios detenidos. Los comandos de inicialización no se ejecutan: los datos vienen del servidor antiguo. También se copian los certificados TLS, así que el HTTPS funciona en cuanto llega el tráfico. |
| Restaurar | Restaura cada volumen en su volumen nuevo y vacío, y luego arranca las bases de datos que necesitan un volcado y lo restaura. |
| Arrancar | Arranca los servicios en orden de dependencias, con el número de instancias que tenían, y espera a sus comprobaciones de salud. |
| Cambiar | Apunta cada dominio generado a la dirección del servidor nuevo y lo convierte en el servidor del proyecto. |
Los servicios que estaban suspendidos o detenidos antes del traslado siguen detenidos en el servidor nuevo.
Si algo falla
Si falla algún paso antes del cambio, Zenavo deshace el traslado: los servicios vuelven a arrancar en el servidor antiguo exactamente como estaban, se elimina la copia del servidor nuevo y la tarea falla con el motivo. Un traslado nunca cambia tus datos del servidor antiguo.
Si deshacerlo también falla (por ejemplo, porque el servidor antiguo dejó de estar accesible), el traslado queda abierto y muestra el motivo. Haz clic en Roll back para reintentarlo cuando se resuelva el problema. La copia del servidor nuevo solo se elimina cuando el servidor antiguo vuelve a funcionar.
Después del cambio
El proyecto se ejecuta ahora en el servidor nuevo. Su copia detenida, con todos sus datos, se queda en el servidor antiguo. Mientras el traslado te espera:
- Dominios propios: cambia sus registros DNS a la dirección del servidor nuevo. La página del traslado muestra el registro exacto (tipo
AoAAAAy la dirección) para cada dominio. Hasta que lo hagas, esos dominios siguen llegando al servidor antiguo, que está detenido. - Comprueba la aplicación en el servidor nuevo: inicio de sesión, workers en segundo plano, correo, webhooks y cualquier otra cosa de la que dependa.
- Los despliegues y otras operaciones del proyecto están en pausa, para que el traslado se pueda deshacer con exactitud.
Después, elige una opción:
- Finish move elimina la copia detenida y sus volúmenes del servidor antiguo, y los archivos de transferencia del traslado de Zenavo. A partir de ahí el proyecto no se puede revertir al servidor antiguo.
- Roll back detiene la copia del servidor nuevo, vuelve a apuntar los dominios generados, arranca los servicios en el servidor antiguo con los datos que tenían al empezar el traslado y elimina la copia nueva. Los cambios hechos en el servidor nuevo desde el cambio no se copian de vuelta. Vuelve a apuntar también los dominios propios si los cambiaste.
Conviene saber
- Los registros de los dominios generados se cambian añadiendo primero uno nuevo y quitando después el antiguo, así que el nombre siempre resuelve. Los resolvedores pueden conservar la dirección antigua hasta cinco minutos.
- Los datos que un servicio guarda fuera de un volumen (en su contenedor) no se copian: se pierden en cualquier reinicio de todos modos. Añade un volumen para los datos que necesites.
- Los archivos de transferencia son del mismo tipo que las copias de seguridad y aparecen entre las copias del proyecto hasta que el traslado se termina o se revierte.
- No se puede trasladar a un servidor de otro equipo. Clona el proyecto en el otro equipo y restaura allí una copia de seguridad.
- Cada traslado, finalización y reversión queda en el registro de auditoría del equipo.
API
| Método | Ruta | |
|---|---|---|
GET | /api/projects/{pid}/move | El último traslado: estado, servidores, datos, dominios, can_finish y can_roll_back |
GET | /api/projects/{pid}/move/preflight?server_id= | Comprobar un traslado sin cambiar nada (administradores) |
POST | /api/projects/{pid}/move | Iniciar: {server_id, confirmation: "<project name>"} (devuelve una tarea) |
POST | /api/projects/{pid}/move/finish | Eliminar la copia detenida del servidor antiguo (devuelve una tarea) |
POST | /api/projects/{pid}/move/rollback | Volver al servidor antiguo (devuelve una tarea) |