Recuperar una página web borrada

Disco duro ejemplificando los respaldos

¿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).

Estructura de una página web borrada por error
Estructura de mi página

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í:

Pipelline de GitLab
Pipelline de GitLab

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!

Deploy a staging en GitLab
Deploy a staging

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.

Deploy a producción en GitLab
Deploy a producción

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.

Indicador de carga de página
Indicador de carga

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!

Directorio vacío
Directorio vacío

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!

Tamaño de la base de datos
Tamaño de la base de datos

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:

Dashboard de CodeGuard
Dashboard de CodeGuard

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.

Nueva estructura de la página
Nueva estructura de la página

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.

Pipeline corriendo de nuevo
Pipeline corriendo de nuevo

Una vez completo, es momento de verificar que pasó con nuestro archivo de prueba.

Archivo de prueba
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”

"Hello world" de wordpress
“Hello world” de wordpress

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.

Página web borrada, ahora recuperada
Página web borrada, ahora funcionando nuevamente

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.

Copias de seguridad de Softaculous
Copias de seguridad de Softaculous

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.

Imágenes cardas en cada articulo
Imágenes cardas en cada articulo

Antes de seguir modificando la página, hay que asegurarnos que los backups funcionan.
Dentro de CodeGuard todo se ve bien, ¡palomita!

Progreso de respaldo en CodeGuard
Progreso de respaldo en CodeGuard

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.

Opciones para crear Staging en Softaculous
Opciones para crear Staging en Softaculous

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.

Opciones de Staging en SOftaculous
Opciones de Staging

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:

Publicar Staging a Producción en Softaculous
Publicar Staging a Producción

¡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!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *