Las tareas que se deben abordar una vez que por fin tenemos una aplicación Web funcionando en un entorno productivo son muchas y muy diversas. Sin ánimo de ser exhaustivo, estas podrían ser algunas de ellas:
- Despliegue de nuevas versiones y procedimientos de marcha atrás
- Gestión de la caducidad de los certificados
- Configuración y almacenamiento de Backups
- Configuración, revisión, rotación y almacenamiento de los ficheros de trazas
- Mantenimiento de los servidores, parches de seguridad, actualización de S.O. y paquetes
Cada uno de los puntos indicados podría dar para varios tutoriales de procedimientos y herramientas a utilizar para facilitar la labor de cada uno de estos puntos.
En este tutorial abordaremos la gestión de los ficheros de respaldo, especialmente cuando tenemos la necesidad de gestionar la puesta a salvo de un volumen grande de ficheros de manera continuada.
Imaginad por un momento que sois los responsables de un sistema de información que genera una cantidad grande de ficheros diariamente, como podría ser este mismo blog, donde cada día se generan nuevos ficheros con los artículos que se publican a lo largo del tiempo.
Como podréis imaginar, la cantidad de ficheros que se acumula es muy grande, y la necesidad de tener una copia de seguridad de estos ficheros es vital para garantizar la continuidad del servicio.
La primera idea que se nos ocurre, probablemente es añadir un Job al cron para comprimir esos ficheros y guardarlos en algún tipo de almacenamiento externo de manera diaria (eso depende de los SLAs que tenga, pero simplifiquemos), y con la gran cantidad de ficheros
que tengo, el fichero que se genera es demasiado grande y esta solución es inviable, porque la operación se ralentiza en exceso, me genera problemas de espacio, etc., en fin, no es una solución viable, ¿qué podemos hacer?.
Quizá, si os movéis en el mundo Linux/Unix conocéis la herramienta rsync, una herramienta
de sincronización de ficheros y directorios que permite copiar ficheros de manera eficiente, tanto local como remotamente.
Esto vendría muy bien, porque se podrían copiar los ficheros de manera incremental en lugar de copiar todos los ficheros cada vez
y así tendría una copia remota y sincronizada del directorio donde tengo los contenidos que quiero mantener respaldados.
Pero rsync puede sincronizar directorios locales o remotos usando ssh, pero y si mi servidor remoto es por ejemplo, una carpeta del Drive de Google, o un bucket de S3 o un servidor pero con acceso SFTP, o …
Si os habéis sentido identificados con el problema que he ido planteando, este tutorial os va a interesar, porque os voy a presentar una herramienta que os permite sincronizar ficheros y directorios de manera eficiente, con soporte para una gran cantidad de servicios de almacenamiento, y que además es muy fácil de usar.
Esta herramienta se llama rclone.
Índice
1. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15″ (Intel Core i9, 32GB, 1TB SSD).
- Sistema Operativo: macOS Sonoma 14.6.1
2. Un ejemplo rápido
Para ilustrar el uso de rclone, vamos a realizar un ejemplo sencillo en el que vamos a sincronizar un directorio local con una carpeta de Google Drive.
Lo primero, instalamos rclone. En mi caso, lo he instalado usando brew:
> brew install rclone
Podemos usar rclone version con el parámetro check para comprobar que tenemos la última versión de rclone instalada:
> rclone version --check yours: 1.67.0 latest: 1.67.0 (released 2024-06-14) beta: 1.68.0-beta.8250.c63f1865f (released 2024-08-28) upgrade: https://beta.rclone.org/v1.68.0-beta.8250.c63f1865f
De un vistazo rápido en la página resumen de comandos podemos ver la versatilidad de la herramienta y todo lo que ofrece.
Empecemos por ver los servicios de almacenamiento que soporta rclone:
> rclone config providers
Pero a nosotros nos interesa Google Drive, así que vamos a configurar rclone para que pueda acceder a nuestra cuenta de Google Drive.
Empecemos por acceder a la página de configuración de Google Drive y tratamos de configurar interactivamente un New remote que llamaremos gdrive:
> rclone config ... Sigue las instrucciones seleccionando: - Option Storage: Google Drive (drive), en mi caso el 17 - Option Client ID: Deja en blanco - OAuth Client Secret: Deja en blanco - Option scope: 1 - Option service_account_file: Deja en blanco - Edit advanced config: No - Use web browser to automatically authenticate rclone with remote?: Yes (esto abrirá una ventana del navegador para autenticarte con Google Drive y dar permisos a rclone en tu cuenta) - Configure this as a Shared Drive (Team Drive)? No - Keep this "gdrive" remote?: Yes
Sal de la configuración con q y comprueba que la configuración se ha guardado correctamente:
> rclone config file Configuration file is stored at: .../.config/rclone/rclone.conf
En el fichero de configuración se crea una entrada para cada servicio remoto que se configure. Podemos también ver la configuración así:
> rclone config show type = drive scope = drive token = {"access_token":...}
He creado una carpeta llamada rclone_test_folder en la raíz de mi Google Drive con unos ficheros de ejemplo:
Ejecutemos un listado de los ficheros que tenemos en la carpeta de Google Drive que hemos configurado:
> rclone ls gdrive:rclone_test_folder 1 3.txt 1 2.txt 1 1.txt
En mi escritorio tengo una carpeta llamada «rclone_test_folder» con los mismos ficheros que en la carpeta de Google Drive. Vamos a sincronizarla:
> rclone sync ~/Desktop/rclone_test_folder gdrive:rclone_test_folder --verbose 2024/08/28 10:57:35 INFO : There was nothing to transfer 2024/08/28 10:57:35 INFO : Transferred: 0 B / 0 B, -, 0 B/s, ETA - Checks: 3 / 3, 100% Elapsed time: 2.7s
Añadimos un fichero en la carpeta local y volvemos a sincronizar:
> echo "4" > ~/Desktop/rclone_test_folder/4.txt > rclone sync ~/Desktop/rclone_test_folder gdrive:rclone_test_folder --verbose 2024/08/28 10:59:58 INFO : 4.txt: Copied (new) 2024/08/28 10:59:58 INFO : Transferred: 2 B / 2 B, 100%, 0 B/s, ETA 0s Checks: 3 / 3, 100% Transferred: 1 / 1, 100% Elapsed time: 3.1s
Ahora vamos a borrar un fichero del Drive manualmente y volvemos a sincronizar:
> rclone sync ~/Desktop/rclone_test_folder gdrive:rclone_test_folder --verbose 2024/08/28 11:03:48 INFO : 1.txt: Copied (new)ve:rclone_test_folder --verbose 2024/08/28 11:03:48 INFO : Transferred: 1 B / 1 B, 100%, 0 B/s, ETA 0s Checks: 3 / 3, 100% Transferred: 1 / 1, 100% Elapsed time: 3.3s
Modificamos un fichero en la carpeta local y volvemos a sincronizar:
> echo "44" > ~/Desktop/rclone_test_folder/4.txt 2024/08/28 11:05:06 INFO : 4.txt: Copied (replaced existing)_folder --verbose 2024/08/28 11:05:06 INFO : Transferred: 3 B / 3 B, 100%, 2 B/s, ETA 0s Checks: 4 / 4, 100% Transferred: 1 / 1, 100% Elapsed time: 3.2s
4. Conclusiones
Supongo que a estas alturas ya nos podemos hacer una idea de cómo podemos trabajar con rclone para facilitarnos el copiado remoto de nuestros ficheros de backup, y como nos puede servir para emular rsync y así gestionar un volumen grande de ficheros de manera eficiente y sin importar el sistema remoto de almacenamiento.
Obviamente cada sistema remoto dispone de configuraciones y parámetros diferentes, quotas, diferentes formas de configuración de acceso como cuentas de servicio o impersonación de usuarios. Os recomiendo que reviséis atentamente la documentación de cada sistema de almacenamiento de rclone para configurar para vuestro caso concreto así como los parámetros generales y los de cada comando.
También puede ocurrir que nuestro servidor no disponga de navegador para configurar la autenticación correspondiente, revisad la configuración remota de rclone para ver cómo se puede hacer esto.
Sin más, hasta aquí el tutorial de rclone. Espero que os haya resultado interesante y útil. ¡Hasta el próximo tutorial!