Dateien in DigitalOcean Spaces mit rclone per CLI verwalten
Mit dem S3-Backend von rclone laden Sie ein Verzeichnis in einen privaten DigitalOcean Space hoch,
listen dessen Objekte auf und laden die Dateien wieder herunter. Diese Anleitung prüft die
heruntergeladenen Bytes und zeigt, was
sync innerhalb eines eigenen Demo-Präfixes löscht, ohne den Bucket
öffentlich zugänglich zu machen.
Einen privaten Space vorbereiten
Sie benötigen einen bestehenden Space mit Standard Storage und dessen regionalen Ursprungsendpunkt,
etwa fra1.digitaloceanspaces.com. Verwenden Sie einen Spaces-Zugriffsschlüssel mit Lese-,
Schreib- und Löschrechten für diesen Bucket. Ein DigitalOcean-API-Token ist ein anderes Zugangsmittel.
Die Anleitung zu Zugriffsschlüsseln von DigitalOcean erklärt
Schlüssel, die auf einen Bucket beschränkt sind. Kopieren Sie keine AWS-IAM-Richtlinie in Spaces in
der Annahme, dass sie dort dieselben Zugriffsrechte gewährt.
Die folgenden Befehle sind für Linux auf Intel/AMD-Prozessoren mit 64 Bit vorgesehen und setzen Bash, cURL, unzip und GNU coreutils voraus. Die getestete rclone-Version ist 1.75.2. Die Dateinamen in diesem Beispiel verwenden UTF-8, auch der Name einer Binärdatei in einem Unterverzeichnis. Die leere Datei ist beabsichtigt. Führen Sie diese kleine Übung Schritt für Schritt getrennt von einem aktiven Backup oder einem Verzeichnis aus, das ein anderer Prozess verändert.
rclone in einem neuen Arbeitsverzeichnis installieren
Fügen Sie diesen Block aus einem Verzeichnis mit Schreibzugriff ein. Er lädt die
versionierte rclone-Veröffentlichung herunter, prüft deren
veröffentlichte SHA-256-Prüfsumme und installiert die ausführbare Datei lokal. Ein bereits
vorhandenes Verzeichnis rclone-spaces führt zum Abbruch.
Die Klammern halten Verzeichniswechsel und Shell-Optionen innerhalb einer Subshell.
(
set -eu
for tool in curl sha256sum unzip install mv mkdir; do
command -v "$tool" >/dev/null || { echo "Missing prerequisite: $tool" >&2; exit 1; }
done
mkdir rclone-spaces &&
cd rclone-spaces &&
curl -fsSLo rclone.zip https://downloads.rclone.org/v1.75.2/rclone-v1.75.2-linux-amd64.zip &&
curl -fsSLo SHA256SUMS https://downloads.rclone.org/v1.75.2/SHA256SUMS &&
mv rclone.zip rclone-v1.75.2-linux-amd64.zip &&
sha256sum --check --ignore-missing SHA256SUMS &&
unzip -q rclone-v1.75.2-linux-amd64.zip &&
install -m 755 rclone-v1.75.2-linux-amd64/rclone rclone &&
./rclone version
)
Die Versionsausgabe sollte mit rclone v1.75.2 beginnen. Wenn der Download oder die
Prüfung des Archivs fehlschlägt, halten Sie hier an. Prüfen Sie das unvollständige Verzeichnis
rclone-spaces, bevor Sie es selbst entfernen und die Einrichtung wiederholen.
Das Installationsskript überschreibt kein bestehendes Projekt. Führen Sie die übrigen Befehle in
diesem neuen Verzeichnis aus.
Die Spaces-Remote-Verbindung konfigurieren
Erstellen Sie in rclone-spaces eine private, leere Konfigurationsdatei. Ist bereits
eine Datei vorhanden, bricht der Befehl ab. Ihre übliche rclone-Konfiguration bleibt unverändert:
(umask 077; set -C; : > spaces.conf)
Tragen Sie die folgenden Einstellungen in spaces.conf ein und ersetzen Sie die
Platzhalter für die Zugangsdaten sowie den Endpunkt. Halten Sie diese Datei aus der Versionsverwaltung
heraus.
[spaces]
type = s3
provider = DigitalOcean
env_auth = false
access_key_id = YOUR_SPACES_ACCESS_KEY
secret_access_key = YOUR_SPACES_SECRET_KEY
endpoint = fra1.digitaloceanspaces.com
region =
location_constraint =
acl = private
no_check_bucket = true
list_version = 1
Die Anleitung zum DigitalOcean-Backend lässt
region und location_constraint leer: Der Endpunkt gibt die Region
an. Verwenden Sie den Ursprungsendpunkt ohne Bucket-Namen oder CDN-Hostnamen. Die Einstellung
no_check_bucket überspringt Prüfungen zur Existenz
oder Erstellung des Buckets. Sie setzt voraus, dass der Bucket bereits existiert, und gewährt keine
Objektberechtigungen. Dieses Beispiel verwendet zum Auflisten explizit
ListObjects Version 1.
Einen Dateibaum hochladen, auflisten und herunterladen
Speichern Sie Folgendes als spaces-demo.sh im selben Arbeitsverzeichnis. Übergeben
Sie beim Ausführen Ihren Bucket-Namen und eine neue UUID. Mit dieser UUID isoliert das Skript sein
entferntes Ziel. Es bricht ab, wenn das Präfix nicht leer ist oder die lokalen Verzeichnisse
upload/download bereits vorhanden sind.
#!/usr/bin/env bash
set -euo pipefail
space=${1:?Supply a bucket name}
run_id=${2:?Supply a fresh UUID}
[[ "$space" =~ ^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$ ]] || { echo 'Invalid bucket name' >&2; exit 1; }
[[ "$run_id" =~ ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ ]] || { echo 'Invalid UUID' >&2; exit 1; }
remote="spaces:$space/rclone-demo-$run_id"
[[ ! -e upload && ! -e download ]] || { echo 'Use a fresh local working directory' >&2; exit 1; }
existing=$(./rclone --config ./spaces.conf lsf "$remote" --recursive)
[[ -z "$existing" ]] || { echo 'Choose a new, empty demo prefix' >&2; exit 1; }
mkdir upload
mkdir download
mkdir upload/nested
printf 'Hello from rclone\n' > upload/hello.txt
printf '\000\001\177\200\377' > 'upload/nested/café 💾.bin'
: > upload/empty.txt
printf 'Remove this demo object during sync\n' > upload/obsolete.txt
./rclone --config ./spaces.conf copy ./upload "$remote"
./rclone --config ./spaces.conf lsjson "$remote" --recursive --files-only --s3-list-chunk 2
./rclone --config ./spaces.conf copy "$remote" ./download
./rclone --config ./spaces.conf check ./upload ./download --download
printf 'Verified the downloaded file tree. Remote prefix: %s\n' "$remote"
Führen Sie es mit dem Bucket-Namen Ihres Space aus. Linux liefert über die unten verwendete Datei eine neue UUID:
bash spaces-demo.sh your-space "$(cat /proc/sys/kernel/random/uuid)"
Die JSON-Auflistung sollte hello.txt, empty.txt,
obsolete.txt und nested/café 💾.bin enthalten. Die Seitengröße von
zwei Objekten demonstriert bewusst die Paginierung an diesem kleinen Dateibaum; sie ist keine
Empfehlung für den Durchsatz. copy überträgt den Inhalt eines
Verzeichnisses. Daher enthalten die entfernten Objektschlüssel kein zusätzliches Verzeichnis
upload/. Der Befehl
erhält Dateien, die nur am Ziel vorhanden sind, kann aber geänderte
Dateien mit gleichem Namen ersetzen. Er verhindert also kein Überschreiben.
Der abschließende Befehl check --download liest beide
lokalen Dateibäume und vergleicht ihre Inhalte. Ein erfolgreicher Übertragungsstatus oder eine
übereinstimmende Dateigröße allein ersetzt diese Byte-Prüfung nicht. Schlägt ein Befehl fehl, hält
das Skript an. Bereits abgeschlossene Uploads können im Demo-Präfix verbleiben, und der lokale
Download kann unvollständig sein. Prüfen Sie diese Ergebnisse vor einem erneuten Versuch. Verwenden
Sie für einen neuen Durchlauf ein neues Arbeitsverzeichnis und eine neue UUID, statt ein unbekanntes
Ziel zu löschen, damit das Skript fortfahren kann.
Eine begrenzte Synchronisierung vor dem Löschen vorab prüfen
sync gleicht das Ziel an die Quelle an
und löscht dabei auch Dateien, die nur am Ziel vorhanden sind. Die Synchronisierung erfolgt in eine
Richtung und führt keine unabhängigen Änderungen zusammen. Wenn Sie die Argumente vertauschen,
wird das lokale Verzeichnis zum Ziel. Dabei könnten Dateien gelöscht werden, die nur lokal vorliegen.
Kopieren Sie nach erfolgreicher Übertragung das ausgegebene entfernte Präfix in den folgenden
Befehl. Speichern Sie den Block als spaces-sync.sh. Er entfernt nur
obsolete.txt aus der lokalen Demo und zeigt dann eine Vorschau der Synchronisierung
in dasselbe UUID-Präfix. Prüfen Sie die Vorschau, bevor Sie die tatsächliche Synchronisierung
bestätigen. Ersetzen Sie das Präfix nicht durch die Wurzel des Buckets oder ein Präfix, in das auch
andere schreiben.
#!/usr/bin/env bash
set -euo pipefail
remote=${1:?Supply the printed demo prefix}
[[ "$remote" =~ ^spaces:[a-z0-9][a-z0-9-]{1,61}[a-z0-9]/rclone-demo-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ ]] || { echo 'Expected a demo prefix' >&2; exit 1; }
rm -f ./upload/obsolete.txt
./rclone --config ./spaces.conf sync ./upload "$remote" --dry-run
read -r -p 'Type sync to apply these destination changes: ' answer
[[ "$answer" == sync ]] || { echo 'Sync canceled'; exit 1; }
./rclone --config ./spaces.conf sync ./upload "$remote"
./rclone --config ./spaces.conf check ./upload "$remote" --download
bash spaces-sync.sh spaces:your-space/rclone-demo-REPLACE_WITH_THE_PRINTED_UUID
Die Vorschau sollte obsolete.txt zum Löschen aufführen. Nach der Bestätigung
sollte das entfernte Präfix die anderen drei Dateien enthalten. Die letzte Prüfung vergleicht deren
Bytes mit upload. Ihr ursprüngliches download enthält
weiterhin alle vier Dateien. Ein Probelauf beschreibt den beobachteten Zustand. Er sperrt das Ziel
nicht gegen spätere Änderungen. Sorgen Sie dafür, dass niemand sonst in dieses Präfix schreibt.
Die verbleibenden Demo-Objekte bleiben in Ihrem Space, bis Sie sie entfernen.
Einen fehlgeschlagenen Befehl diagnostizieren
Prüfen Sie den Exit-Status und die Diagnosemeldung des Befehls, bevor Sie fortfahren. Ein
verweigerter Zugriff kann auf einen ungültigen Schlüssel oder unzureichende Bucket-Berechtigungen
zurückgehen. Er rechtfertigt nicht, die Dateien öffentlich zugänglich zu machen. Prüfen Sie die
Auswahl für spaces.conf, den Bucket-Namen und den Ursprungsendpunkt. Für diese
Anleitung ist das Auflisten eines bekannten Bucket-Präfixes ein besserer Test als das Auflisten
aller Buckets im Konto.
Ein fehlgeschlagener Kopiervorgang kann einige erfolgreich übertragene Dateien hinterlassen.
Identifizieren Sie diese anhand der Auflistung und wiederholen Sie nach Abschluss der Übertragung
die Byte-Prüfung. Führen Sie keine Synchronisierung durch, um einen unvollständigen Upload zu
beheben. Meldet check eine Abweichung, sollten Sie die genannte Datei
prüfen, bevor Sie deren heruntergeladene Kopie verwenden.
Informationen zu Zeitplanung, Filterung oder clientseitiger Verschlüsselung über diese Übung hinaus
finden Sie in der rclone-Dokumentation. Diese Funktionen erfordern
eine eigene Konfiguration. Die obigen Einstellungen für s3 aktivieren
weder die clientseitige Verschlüsselung noch die Komprimierung von rclone.
