Sube copias de seguridad a Dropbox con crontab y dropboxd

Dropbox tiene una ventaja: sincroniza una nueva copia de seguridad tan pronto como aparece en el sistema. El acuerdo consiste en colocar la nueva copia de seguridad en tu carpeta local de Dropbox (con un script cron proporcionado).

Antes de continuar, debes saber:

  1. Puedes usar Dropbox para almacenar archivos hasta el límite permitido por tu plan.
  2. Puedes conectar hasta 3 dispositivos a Dropbox en el plan gratuito (para dispositivos Android, esta limitación puede eludirse, por cierto).
  3. Cuando ejecutes Dropbox en tu servidor Linux, necesitarás sincronizar únicamente una carpeta. O, dado que Dropbox es una solución bidireccional, puede poblar tu servidor con todos los datos de la nube. Esto puede consumir espacio en tu servidor.
  4. Debes crear un script adicional de rsync para sincronizar entre la carpeta de copias de seguridad de Discourse y la carpeta local de copias de seguridad de Dropbox. Esto requiere doble espacio para las copias de seguridad. Anteriormente, Dropbox permitía enlaces simbólicos, pero actualmente esta función no está disponible.
  5. Para acceder a tus copias de seguridad no necesitas permisos de root, pero en esta guía ejecuto el demonio de Dropbox como root (probablemente inseguro, bienvenido a mejorar).

Primero, necesitas configurar las copias de seguridad en Discourse en /admin/site_settings/category/backups (mis valores personalizados entre paréntesis):

número máximo de copias de seguridad (3) - esto gestiona cuántos archivos se conservarán en Dropbox
frecuencia de copia de seguridad (1) - todos los días
hora del día para la copia de seguridad (3:30 UTC) - valor predeterminado
nivel de compresión gzip de la copia de seguridad (6) - elige entre velocidad de compresión (1) o menor tamaño (9), pero en caso de VPS, tu proveedor de hosting podría reiniciar tu servidor en caso de alta utilización prolongada de la CPU

Segundo, conecta tu servidor a Dropbox con comandos de shell (importante: como ejecuto el servicio como root, estoy iniciado sesión como root en este paso, por lo que puedes probar con tu usuario regular):

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# se creará el directorio .dropbox-dist
# ejecutar el demonio de Dropbox
sh ~/.dropbox-dist/dropboxd

Cuando uses Dropbox por primera vez en tu servidor, verás un enlace web único. Debes copiarlo y pegarlo en un navegador web y seguir las instrucciones. Después de eso, se creará un directorio llamado Dropbox en tu carpeta de inicio. Dropbox recomienda oficialmente descargar el script de Python para gestionar tu demonio. Yo no lo uso.

Comandos para gestionar el demonio:

dropbox status
dropbox start
dropbox stop
Verifica que se haya creado tu script de inicio automático (haz clic para expandir el texto oculto):
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Servicio de Dropbox
After=network.target

[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Discourse proporciona archivos de copia de seguridad y gestiona su número y frecuencia.
La tarea crontab de rsync copia la nueva copia de seguridad a la carpeta local de Dropbox.
Después de eso, Dropbox sube el nuevo archivo a la nube.
Cuando Discourse elimina el archivo de copia de seguridad antiguo la siguiente noche, rsync también lo elimina de Dropbox.

Tercero, crea una carpeta de Dropbox para las copias de seguridad:

mkdir ~/Dropbox/backups

Cuarto, prepara la carpeta para la sincronización inversa (desincroniza carpetas innecesarias).
Por ejemplo, tu carpeta de Dropbox tiene subcarpetas y un archivo:

backups
books
stuff
logo.png

Debes excluir todo excepto backups. En realidad, el comando agrega elementos a la lista de exclusión:

dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"

Si por error agregaste backups a la lista de exclusión, puedes devolverlo a la sincronización eliminando el elemento de la lista:

dropbox exclude remove "Dropbox/backups/"

El estado actual de una copia de seguridad específica se puede verificar con el comando:

dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz

Quinto, prepara el script para la sincronización local y la limpieza de la caché /root/rsync.dropbox:

#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/

Sexto, agrega el comando a crontab a las 8:00 AM hora local: crontab -e

0 8 * * * /bin/bash /root/rsync.dropbox

Hay una ventana de tiempo entre las 3:00 AM UTC y las 8:00 AM hora local; debería ser suficiente para completar la copia de seguridad antes de que comience a sincronizarse con Dropbox.

P.D.
No he verificado esta configuración en seis meses o más. Ahora me he dado cuenta de que el comando dropbox status ha devuelto:

Estás usando una versión antigua de Dropbox. Actualiza a la última versión para continuar usando Dropbox.

La sincronización sigue funcionando, por lo que no la actualizaré. La última vez que se perdió el soporte de enlaces simbólicos.

7 Me gusta