Backups mit crontab und dropboxd auf Dropbox hochladen

Dropbox hat einen Vorteil: Es synchronisiert ein neues Backup sofort, sobald es im System erscheint. Die Idee besteht darin, das neue Backup in Ihren lokalen Dropbox-Ordner zu legen (mithilfe eines bereitgestellten Cron-Skripts).

Bevor Sie fortfahren, sollten Sie Folgendes wissen:

  1. Sie können Dropbox nutzen, um Dateien bis zur Grenze Ihres Tarifs zu speichern.
  2. Im kostenlosen Tarif können Sie bis zu 3 Geräte mit Dropbox verbinden (bei Android-Geräten kann diese Einschränkung übrigens umgangen werden).
  3. Wenn Sie Dropbox auf Ihrem Linux-Server ausführen, müssen Sie nur einen einzigen Ordner synchronisieren. Da Dropbox eine Zwei-Wege-Lösung ist, könnte es Ihren Server mit allen Daten aus der Cloud füllen. Das kann Speicherplatz auf Ihrem Server verbrauchen.
  4. Sie müssen ein zusätzliches rsync-Skript erstellen, um zwischen dem Discourse-Backup-Ordner und dem lokalen Dropbox-Backup-Ordner zu synchronisieren. Dies erfordert doppelten Speicherplatz für Backups. Früher erlaubte Dropbox Symlinks, aber diese Funktion ist derzeit nicht verfügbar.
  5. Um auf Ihre Backups zuzugreifen, benötigen Sie keine Root-Rechte, aber in dieser Anleitung führe ich den Dropbox-Daemon als root aus (wahrscheinlich unsicher, Verbesserungen sind willkommen).

Zuerst müssen Sie Backups in Discourse unter /admin/site_settings/category/backups einrichten (meine benutzerdefinierten Werte in Klammern):

maximale Anzahl von Backups (3) – steuert, wie viele Dateien in Dropbox behalten werden
Backup-Häufigkeit (1) – täglich
Uhrzeit für das Backup (3:30 UTC) – Standardwert
Gzip-Komprimierungsstufe für Backups (6) – wählen Sie zwischen Komprimierungsgeschwindigkeit (1) oder kleinerer Dateigröße (9). Bei einem VPS könnte Ihr Hosting-Anbieter Ihren Server neu starten, wenn die CPU-Auslastung über längere Zeit zu hoch ist.

Zweitens verbinden Sie Ihren Server mit Dropbox über Shell-Befehle (wichtig: Da ich den Dienst als root ausführe, bin ich in diesem Schritt als root angemeldet – Sie können es also auch mit Ihrem normalen Benutzer versuchen):

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# Der Ordner .dropbox-dist wird erstellt
# Dropbox-Daemon starten
sh ~/.dropbox-dist/dropboxd

Wenn Sie Dropbox zum ersten Mal auf Ihrem Server verwenden, sehen Sie einen einzigartigen Web-Link. Sie müssen diesen in einen Webbrowser kopieren und die Anweisungen befolgen. Anschließend wird im Home-Ordner ein Ordner namens Dropbox erstellt. Dropbox empfiehlt offiziell, das Python-Skript herunterzuladen, um Ihren Daemon zu verwalten. Ich verwende es jedoch nicht.

Befehle zur Verwaltung des Daemons:

dropbox status
dropbox start
dropbox stop
Prüfen Sie, ob Ihr Autostart-Skript erstellt wurde (klicken, um den ausgeblendeten Text zu erweitern):
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Dropbox Service
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 stellt Backup-Dateien bereit und verwaltet deren Anzahl und Häufigkeit.
Ein Crontab-rsync-Auftrag kopiert das neue Backup in den lokalen Dropbox-Ordner.
Anschließend lädt Dropbox die neue Datei in die Cloud hoch.
Wenn Discourse am nächsten Morgen die alte Backup-Datei löscht, entfernt rsync sie auch aus Dropbox.

Drittens erstellen Sie einen Dropbox-Ordner für Backup-Kopien:

mkdir ~/Dropbox/backups

Viertens bereiten Sie den Ordner für die Reverse-Synchronisation vor (nicht benötigte Ordner nicht synchronisieren).
Zum Beispiel enthält Ihr Dropbox-Ordner folgende Unterordner und Dateien:

backups
books
stuff
logo.png

Sie müssen alles außer backups ausschließen. Tatsächlich fügt der Befehl Elemente zur Ausschlussliste hinzu:

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

Falls Sie versehentlich backups zur Ausschlussliste hinzugefügt haben, können Sie es wieder zur Synchronisation hinzufügen, indem Sie den Eintrag entfernen:

dropbox exclude remove "Dropbox/backups/"

Den aktuellen Status eines bestimmten Backups können Sie mit dem folgenden Befehl überprüfen:

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

Fünftens bereiten Sie ein Skript für die lokale Synchronisation und das Bereinigen des Caches vor: /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/

Sechstens fügen Sie den Befehl um 8 Uhr Ortszeit zur Crontab hinzu: crontab -e

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

Es gibt ein Zeitfenster zwischen 3 Uhr UTC und meiner lokalen Zeit 8 Uhr – das sollte ausreichen, um das Backup abzuschließen, bevor die Synchronisation mit Dropbox beginnt.

P.S.
Ich habe diese Konfiguration seit einem halben Jahr oder länger nicht mehr überprüft. Mir ist jetzt aufgefallen, dass der Befehl dropbox status Folgendes zurückgibt:

You're using an old version of Dropbox. Please update to the latest version to continue using Dropbox.

Die Synchronisation funktioniert jedoch weiterhin, daher werde ich sie nicht aktualisieren. Die Unterstützung für Symlinks ging beim letzten Mal verloren.

7 „Gefällt mir“