¿Haz tenido la necesidad de recuperar una página web borrada por error? Yo si.
Estaba preparando una nueva adición a mi página web y después de varios días de trabajo…
…Un error, borro todos los archivos…
… el backup falló…
Aquí te cuento como planeo recuperarla.
El contexto:
Antes de empezar es importante que conozcas como funciona mi página que en realidad es muy sencilla, no tiene mas que una sola vista y es por eso que planeaba darle un mejor uso.
Mi plan era simplemente hacer una instalación de WordPress en un fólder independiente, nada fuera de este mundo. Pero aquí va la complicación:
A pesar de ser una página muy simple, ya tiene todos los elementos de un proyecto profesional.
Es decir, el código esta versionado por medio de GIT, existen tres ambientes, desarrollo (Mi maquina local), pruebas (staging) y finalmente uno productivo (production).
Por si fuera poco, el ambiente de producción tiene un respaldo que corre automáticamente todos los días.
Pero aún terminamos, cuenta también con un pipeline de continuos integration and continuos delivery (CI/CD) en GitLab que se ve mas o menos así:
Esto que quiere decir, que cada que se hace un cambio, se correaran una serie de procesos que llevarán ese cambio a producción, todos son procesos automáticos, excepto uno…
El pasó de staging a production se hace a mano, esto para verificar que nada este roto en la fase de staging, lo que asegura que la versión de producción no tendrá problemas.
Todo muy bien, pero ¿Qué pasó, por que se borró todo?
La instalación de WordPress no pasó por ninguna y repito, ninguna de estas fases.
¿Por qué?
Yo buscaba algo simple, rápido e indoloro. Así que decidí instalar directamente en producción sin pasar por desarrollo ni pruebas ¿Por qué? Pues… que aburrida sería la vida si no tomáramos algunos riesgos…
Ya en serio, la razón es que no veo factible tener control de las versiones del core de WordPress ni de los temas por default (Que es lo que yo planeaba usar), pero aún así tenía el respaldo automático. Nada podía salir mal. O casi nada.
Cuando se borraron todos los archivos
Otro punto importante para la página era tener estadísticas de los usuarios que la visitan, para esto pensé en configurar GoogleAnalytics. En WordPress es fácil por que un plugin lo hace por ti. Pero en mi página principal la cosa es distinta.
En la página principal necesitamos agregar un script de Google a mano. Pero no hay problema, ¿cierto?
Vamos al ambiente de desarrollo, modificamos el código y hacemos commit/push para que empiece a correr el pipeline que llevará el cambio hasta Staging.
Este proceso tomó cerca de 47 segundos. ¡Bien hecho!
En ese momento accedí al ambiente de pruebas (Staging) verifiqué que el cambio estuviera correcto y que no hubiera errores, todo bien. No había necesidad de verificar WordPress por que en Staging ¡No existe!… Pero bueno, sigamos.
Ya que todo estaba bien en staging procedemos a presionar el botón que llevará los cambios a producción. O a lo que le llamo: “Dar el salto de fe”.
Y producción empieza a correr, 1, 2, 3, 10 minutos y no terminaba. Pasaron en total ¡13 minutos!
Algo estaba terriblemente mal y yo no me había dado cuenta.
Vuelvo a producción, verifico el script de Google y todo bien.
Bueno vayamos al administrador de WordPress para continuar con la configuración y todo lo que veo es un circulo dando vueltas.
Esto ya no suena nada prometedor.
Debe ser una caída temporal, pienso yo.
Que equivocado estaba, intento tras intento y no carga, entro al server para verificar y entonces me doy cuenta…
Los archivos ya no están, todo, ¡todo se borro!
El servicio de respaldos soporta hasta 1GB de almacenamiento, pero por alguna razón llegó a almacenar 25GB !!! Por lo que ya no aceptaba mas respaldos.
Y así fue como todo el trabajo desapareció…
Pero espera ¡No todo está perdido!
La BD tiene información, lo que quiere decir que si de alguna forma recuperamos los archivos podemos recuperar también lo que sea que ella contenga.
Como recuperar una página web borrada por error
Antes de seguir, tenemos que tomar medidas sobre los respaldos, no podemos seguir con esos 25GB adicionales.
Después de una limpieza, el servicio se ve, mucho mejor, nada de archivos basura y solo respaldos genuinos:
Por otro lado, veamos que fue lo que hizo que se borraran los archivos.
Esos 13 minutos de deploy a producción no me daban buena espina y después de analizar los comandos, encontré que la transferencia FTP está haciendo un espejo de todos los archivos contenidos en GIT, pero claro, como WordPress no esta versionado, al hacer el deploy, simplemente se borra.
Y he aquí el culpable, vamos a cortarle la cabeza:
lftp -u $JS_PROD_FTP_U,$JS_PROD_FTP_PWD $JS_ADD -e "set ftp:ssl-allow no ; mirror -e -R -x .gitlab-ci.yml -x .git -x languages/ -p ./ / ; quit"
¡Fueron 13 minutos borrando archivos!
Aún no me convence versionar el core WordPress en GIT, así que, mi plan es (No te rías) seguirlo dejando fuera.
Pero entonces, ¿cómo nos vamos a proteger?
La idea es tener una versión de staging para WordPress también, pero fuera de GIT. Los respaldos a la base de datos y archivos seguirán siendo manejados por CodeGuard (Que ya está funcionando).
El resultado será como tener dos sistemas corriendo en paralelo, todo respaldado en CodeGuard.
Manos a la obra, hora de arreglar ese comando FTP, simplemente hay que excluir el directorio de wordpress y listo, el nuevo comando sería así:
lftp -u $JS_PROD_FTP_U,$JS_PROD_FTP_PWD $JS_ADD -e "set ftp:ssl-allow no ; mirror -e -R -x .gitlab-ci.yml -x .git -x languages/ -x WordPress/ -p ./ / ; quit"
Ojo el mismo cambio se tiene que hacer en el comando que hace la transferencia hacía Staging.
He creado un archivo “Test.htm” para verificar que efectivamente después del deploy, la nueva carpeta no se afecta.
Justo al momento de hacer commit y push empieza a correr el pipeline en automático y mientras tanto yo cruzo los dedos.
Una vez completo, es momento de verificar que pasó con nuestro archivo de prueba.
¡Y funciona!
El archivo aún existe, lo que significa que lftp ya no esta sobrescribiendo el folder.
El siguiente paso es recuperar la instalación de WordPress. Pero para ello, necesitamos hacer un respaldo de la base de datos antes de continuar.
Desafortunadamente no hay respaldo de los archivos, por lo que la única opción es hacer la instalación de WordPress de nuevo, pero cambiar un par de cosas.
Primero hagamos una instalación nueva, lo que nos devolvería al clásico “Hello World”
También hay que instalar los plugins y temas que teníamos antes de que ocurriera la catástrofe.
Luego, en el archivo de configuración hay que cambiar el nombre y credenciales de la base de datos, así como el prefijo de las tablas.
PEEEROOOOOO ANTEEESSSS
Si queremos tener éxito al recuperar la página web borrada, tenemos que hacer un respaldo.
Una vez hecho eso, debería funcionar… Veamos…
Pues si, ese electrochoque la devolvió a la vida.
Siguiente paso: recuperar las imágenes
Desafortunadamente no hay mucho que hacer aquí, algunos proveedores tienen acceso al WordPress Manager y desde ahí se puede ver si hay algún respaldo que contenga las imágenes.
En mi caso hay uno, pero no tiene imágenes.
Otra forma de lograrlo es revisando la cache de la página en Google y desde ahí descargar las imágenes o volver a las fuentes desde donde fueron obtenidas.
Por suerte para mi, tengo acceso a las fuentes originales y algunos respaldos en documentos, no debería ser muy complicado.
Después de varios días de trabajo, ya va tomando forma.
Antes de seguir modificando la página, hay que asegurarnos que los backups funcionan.
Dentro de CodeGuard todo se ve bien, ¡palomita!
Es momento de crear el sitio de staging para poder jugar a gusto. Para eso vamos al WordPress Manager de Softaculous. No todos los proveedores de hosting tienen acceso, pero afortunadamente el mio si.
Desde aquí simplemente vamos a la opción “Staging” y eso hará el trabajo por nosotros.
Nos va a pedir una serie de datos muy sencillos y una vez completado tendremos un sitio adicional para poder hacer las pruebas que queramos.
En el momento en el que estemos contentos con los cambios, podemos volver al listado de instalaciones y simplemente pulsar el botón Push to live:
¡Por fin terminamos!
Ahora si podemos decir que logramos recuperar una página web borrada y gracias a los respaldos automáticos y al ambiente de pruebas (Staging) es mucho más segura que antes. Solo resta seguir actualizando, pero ahora podemos hacerlo con toda confianza.
Bastante largo, pero si te gusto este articulo, te recomiendo: Tecnología
Foto por Markus Spiske
¡Hasta pronto!