Télécharger des sauvegardes sur Dropbox avec crontab et dropboxd

Dropbox présente un avantage : il synchronise une nouvelle sauvegarde dès qu’elle apparaît dans le système. L’idée est de placer la nouvelle sauvegarde dans votre dossier Dropbox local (avec un script cron fourni).

Avant de continuer, sachez ce qui suit :

  1. Vous pouvez utiliser Dropbox pour stocker des fichiers dans la limite autorisée par votre formule.
  2. Vous pouvez connecter jusqu’à 3 appareils à Dropbox avec la formule gratuite (pour les appareils Android, cette limitation peut être contournée, au passage).
  3. Lorsque vous lancez Dropbox sur votre serveur Linux, vous devez synchroniser un seul dossier. Comme Dropbox est une solution bidirectionnelle, il peut remplir votre serveur avec toutes les données du cloud. Cela peut consommer de l’espace sur votre serveur.
  4. Vous devez créer un script rsync supplémentaire pour synchroniser le dossier de sauvegarde de Discourse avec le dossier de sauvegarde Dropbox local. Cela nécessite un double espace pour les sauvegardes. Auparavant, Dropbox autorisait les liens symboliques, mais cette fonctionnalité n’est plus disponible actuellement.
  5. Pour accéder à vos sauvegardes, vous n’avez pas besoin de droits root, mais dans ce guide, j’exécute le démon Dropbox en tant que root (probablement peu sûr, n’hésitez pas à améliorer).

Premièrement, vous devez configurer les sauvegardes dans Discourse à l’adresse /admin/site_settings/category/backups (mes valeurs personnalisées entre parenthèses) :

nombre maximum de sauvegardes (3) - cela gère le nombre de fichiers conservés dans Dropbox
fréquence des sauvegardes (1) - tous les jours
heure de la sauvegarde (3:30 UTC) - par défaut
niveau de compression gzip des sauvegardes (6) - choisissez entre la vitesse de compression (1) ou une taille réduite (9), mais dans le cas d’un VPS, votre fournisseur d’hébergement peut redémarrer votre serveur en cas de forte utilisation prolongée du processeur

Deuxièmement, connectez votre serveur à Dropbox avec des commandes shell (important : comme j’exécute le service en tant que root, je suis connecté en tant que root à cette étape - vous pouvez donc essayer avec votre utilisateur régulier) :

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# le dossier .dropbox-dist sera créé
# lancez le démon Dropbox
sh ~/.dropbox-dist/dropboxd

Lorsque vous utilisez Dropbox pour la première fois sur votre serveur, vous verrez un lien web unique. Vous devez le copier-coller dans un navigateur web et suivre les instructions. Ensuite, un dossier Dropbox sera créé dans votre dossier personnel. Dropbox recommande officiellement de télécharger le script Python pour gérer votre démon. Je ne l’utilise pas.

Commandes pour gérer le démon :

dropbox status
dropbox start
dropbox stop
Vérifiez que votre script de démarrage automatique a bien été créé (cliquez pour afficher le texte masqué)
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Service 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 génère des fichiers de sauvegarde et gère leur nombre et leur fréquence.
La tâche crontab rsync copie la nouvelle sauvegarde vers le dossier Dropbox local.
Ensuite, Dropbox télécharge le nouveau fichier vers le cloud.
Lorsque Discourse supprime l’ancien fichier de sauvegarde la nuit suivante, rsync le supprime également de Dropbox.

Troisièmement, créez un dossier Dropbox pour les copies de sauvegarde :

mkdir ~/Dropbox/backups

Quatrièmement, préparez le dossier pour la synchronisation inverse (désynchronisez les dossiers inutiles)
Par exemple, votre dossier Dropbox contient des sous-dossiers et un fichier :

backups
books
stuff
logo.png

Vous devez exclure tout sauf backups. En réalité, la commande ajoute des éléments à la liste d’exclusion :

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

Si vous avez accidentellement ajouté backups à la liste d’exclusion, vous pouvez le réintégrer à la synchronisation en retirant l’élément de la liste :

dropbox exclude remove "Dropbox/backups/"

L’état actuel d’une sauvegarde spécifique peut être vérifié avec la commande :

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

Cinquièmement, préparez le script pour la synchronisation locale et le nettoyage du cache /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/

Sixièmement, ajoutez la commande au crontab à 8h00 heure locale : crontab -e

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

Il y a une fenêtre de temps entre 3h00 UTC et 8h00 heure locale - cela devrait suffire pour que la sauvegarde soit terminée avant qu’elle ne commence à se synchroniser avec Dropbox.

P.S.
Je n’ai pas vérifié cette configuration depuis six mois ou plus. J’ai maintenant réalisé que la commande dropbox status renvoyait :

Vous utilisez une ancienne version de Dropbox. Veuillez mettre à jour vers la dernière version pour continuer à utiliser Dropbox.

La synchronisation fonctionne toujours, je ne vais donc pas la mettre à jour. Le support des liens symboliques a été perdu la dernière fois.

7 « J'aime »