En otro episodio de la serie "Soluciones baratas para clientes de pocos recursos", les traigo una guía sobre cómo subir backups automáticamente a Dropbox desde un servidor GNU/Linux. Realmente es muy simple y puede servir al menos para salir del paso temporalmente. Recuerden que los backups (copias de respaldo/seguridad) son uno de los puntos críticos y esenciales en la configuración de un servidor, de acuerdo a la Biblia del SysAdmin.



Por supuesto no es suficiente con sólo subir una copia de seguridad semanal a Dropbox. Lo correcto sería descargar una copia de seguridad diaria desde el servidor (por ejemplo vía SSH) y distribuirla entre varios sistemas y locaciones. En definitiva, la cantidad de réplicas de una copia de seguridad nunca va a ser suficiente.

Pero al menos, con esta solución, el cliente podría conectar cualquier número de máquinas a esta misma cuenta de Dropbox, y así mantener replicadas las copias de backup. Una solución automática que desentiende al cliente del problema de los backups. Por supuesto esto aplica a clientes pequeños, generalmente aquellos a quienes le estamos instalando o manteniendo su primer servidor en la nube.

Basta de cháchara y vamos a los bifes...

Como se trata de un servidor corriendo una versión de sistema operativo GNU/Linux no soportada por Dropbox, y como el funcionamiento del CLI de Dropbox es básico y apenas sirve para controlar el demonio de Dropbox (al mismo tiempo que no tengo intenciones de tener otro servicio más corriendo las 24 hs. sólo para subir archivos una vez a la semana), decidí optar por una solución a demanda, que haga uso de la API de Dropbox. Una solución que no requiera instalar Dropbox en el servidor, ni mucho menos tener un servicio corriendo de manera continua, consumiendo recursos de manera innecesaria (memoria, CPU, red, etc.)

Seguramente existen muchas soluciones de este tipo, aunque una de ellas resalta por su elegancia, se trata de DropBox-Uploader, un script Bash basado en cURL que permite subir, bajar y listar archivos de Dropbox, entre otras funcionalidades. Esta herramienta trabaja a demanda (permite subir y descargar archivos manualmente) y autentica contra la API de Dropbox utilizando OAuth 2.

Crear un directorio donde almacenaremos los backups semanales y los scripts necesarios:

# cd /
# mkdir backup

Descargar una copia de Dropbox-Uploader:

# git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

La "instalación" es trivial, y consiste en sólo indicar el token de acceso OAuth 2:

# cd Dropbox-Uploader/
# ./dropbox_uploader.sh 

 This is the first time you run this script, please follow the instructions:

 1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
 2) Click on "Create App", then select "Dropbox API app"
 3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
 4) Enter the "App Name" that you prefer (e.g. MyUploader19056112347932)

 Now, click on the "Create App" button.

 When your new App is successfully created, please click on the Generate button
 under the 'Generated access token' section, then copy and paste the new access token here:

 # Access token: 

Por supuesto, antes de continuar, es necesario generar y obtener este token.

Habiéndose logueado en Dropbox, aceder al siguiente enlace:

www.dropbox.com/developers/apps

Crear una nueva aplicación presionando el botón "Create app". Si aún no se verificó la dirección de correo electrónico con la que se creó la cuenta de Dropbox, en este momento ofrecerá hacerlo antes de poder continuar.

Luego seleccionar "Dropbox API":

Otorgar permisos a toda la cuenta de Dropbox (ya que será utilizada exclusivamente a fines de backup) e indicar un nombre:

Ya creada la aplicación, en el siguiente paso es posible generar el token de acceso. Presionar el botón "Generate" dentro de la sección "OAuth 2":

Luego copiar el token generado:

Volver a la configuración del script dropbox_uploader.sh y pegar el token ("XXXX" en este caso):

 # Access token: XXXX

 > The access token is XXXX. Looks ok? [y/N]: y
   The configuration has been saved.

Finalizada la configuración, el token queda almacenado dentro del archivo ~/.dropbox_uploader:

# ll ~/.dropbox_uploader 
-rw------- 1 root root 84 Apr 12 13:38 /root/.dropbox_uploader

Ahora es posible verificar el funcionamiento del script. Por ejemplo es posible subir algunos archivos a la carpeta "backup" (que hemos creado previamente desde la interfaz Web de Dropbox):

# ./dropbox_uploader.sh upload /var/backup/*gz backup
 > Uploading "/var/backup/bkp_archivos.tar.gz" to "/backup/bkp_archivos.tar.gz"... DONE
 > Uploading "/var/backup/bkp_dumps.tar.gz" to "/backup/bkp_dumps.tar.gz"... DONE
 > Uploading "/var/backup/bkp_web.tar.gz" to "/backup/bkp_web.tar.gz"... DONE
 > Uploading "/var/backup/bkp_etc.tar.gz" to "/backup/bkp_etc.tar.gz" by 5 chunks ..... DONE

Notar que no es necesario levantar ningún servicio o demonio, y simplemente se suben los archivos a través del script, el cual utiliza la API de Dropbox. Esto resulta mucho más conveniente que el uso del demonio de sincronización.

Para comprobar que los archivos hayan sido subidos a la nube, se dispone del comando "list":

# ./dropbox_uploader.sh list backup
 > Listing "/backup"... DONE
 [F] 141742848 bkp_archivos.tar.gz
 [F] 274513    bkp_dumps.tar.gz
 [F] 1462591   bkp_web.tar.gz
 [F] 223323538 bkp_etc.tar.gz

Si así y todo no creemos en esta salida:

Ahora es necesario automatizar esta tarea. Suponiendo que otro script será el encargado de generar los backups semanales (tarea que depende de cada servidor y aplicación en particular), es conveniente crear un script wrapper para invocar desde cron:

# cd /backup
# nano backup2dropbox.sh

Este script Bash, que he llamado backup2dropbox.sh, tiene el siguiente código:

#!/usr/bin/env bash

LOCAL_DIR="/backup/"
FILES="*.tar.gz"
REMOTE_DIR="backup"
UPLOADER="/backup/Dropbox-Uploader/dropbox_uploader.sh"

echo "Subiendo backups a Dropbox [$(date)]"

$UPLOADER upload ${LOCAL_DIR}${FILES} $REMOTE_DIR

A través de las variables LOCAL_DIR, FILES, REMOTE_DIR y UPLOADER se definen el directorio local donde se encuentran los backups, la extensión de los archivos a subir, el nombre del directorio remoto donde guardar los backups, y la ruta al script respectivamente.

Finalmente, agregar una tarea de cron:

# crontab -e

Por ejemplo, para subir los backups el primer día de la semana a las 4:00 AM:

# 04:00 hs subir backups a Dropbox una vez por semana
0 4 * * 1 /backup/backup2dropbox.sh >>/var/log/backup_dropbox.log 2>&1

Referencias


Tal vez pueda interesarte


Compartí este artículo