Bereiche
Bereich Docker
Allgemein
Parameter
Anwendungen
- Mattermost
- Unifi-Video
Duplicati ist eine Software, die verschlüsselte, komprimierte, inkrementelle Datensicherungen (Backups) erstellt und diese auf Netzwerklaufwerke, integrierte oder externe USB-Festplatten oder Onlinespeicher überträgt. (aus Duplicati)
Duplicati zeichnet sich durch die folgenden Punkte aus:
Duplicati ist mit .NET entwickelt und läuft unter unixoiden Betriebssystemen wie Linux oder nacOS mit Mono. Das Windows-Erbe ist beispielsweise beim Namen des Commandline-Tools Duplicati.CommandLine.exe
deutlich erkennbar.
Auf jeden Fall nichts, was ich „direkt“ auf meinen Linux- oder macOS-Rechner installieren möchte. Also so oder so ein Fall für eine Virtualisiserung.
Image | |
---|---|
Docker Hub | linuxserver/duplicati |
GitHub | linuxserver/docker-duplicati |
Architektur | x86-64, armhf, arm64 |
Software | |
Projekt | Duplicati |
GitHub | duplicati/duplicati |
Anmerkung | |
Es gibt bei DockerHub ein Repository duplicati mit dem Image duplicati/duplicati, das durch die Namensgebung den Eindruck erwecken könnte. dass es vom Duplicati-Projekt gepflegt wird. Jedoch finde ich keinerlei Bezug zwischen dem Repository und dem Projekt und es gibt auch keine andere Möglichkeit den Maintainer zu identifizieren oder zu kontaktieren. Weiterhin ist das Image nur sehr lückenhaft dokumentiert. |
Der Container wird wie folgt mit docker run
eingerichtet und gestartet:
docker run -d \ --name=duplicati \ -e PUID=2000 \ -e PGID=2000 \ -e TZ=Europe/Berlin \ -e CLI_ARGS= `#optional` \ -p 8200:8200 \ -v /path/to/appdata/config:/config \ -v /path/to/backups:/backups \ -v /path/to/source:/source \ --restart unless-stopped \ linuxserver/duplicati
Dies sind die wichtigsten Parameter. Sofern sie mit einem „*“ markiert sind, sollte eine Anpassung erfolgen:
Parameter | Funktion |
---|---|
-e PUID= * | Vorgabe des Users und der Gruppe, mit denen die Daten auf dem Docker-Host in die gemounteten Verzeichnisse geschrieben werden. Sofern Daten aus anderen Docker-Containern gesichert werden sollen, dann ist es notwendig, dass die PUID und PGID der Containerkonfigurationen übereinstimmt, damit der Duplicati-Container die Verzeichnisse der anderen Container lesen und gff. schreiben kann. |
-e PGID= * | |
-e TZ= * | Vorgabe der lokalen Zeitzone im Format Gebiet/Ort. |
-p 8200:8200 | Netzwerkport, über den die Benutzeroberfläche zu erreichen ist. Sofern die Oberfläche über einen anderen Port erreichbar sein soll, ist der erste Wert zu ändern (z.B.: -p 80:8200 ). |
-v * | Volumes, siehe Unterabschnitt Volumes |
-e CLI_ARGS= | Vorgabe von Kommendozeilenparametern, die an Duplicati übergeben werden (optional). Die Zeile kann in den meisten Fällen weggelassen werden. |
In der Konfiguration werden Volumes in der Regel im folgenden Format angegeben:
<Pfad auf dem Host>:<Pfad im Container>[:<Optionen>]
Die Volumes haben die folgenden Funktionen (maßgeblich ist der Pfad im Container):
Pfad im Container | Funktion |
---|---|
/config | Ablageort der Konfigurationsdateien |
/backups | Ablageort von lokalen Backups. Kann weggelassen werden, wenn ausschließlich Online-Backups auf andere Server oder in die Cloud erstellt werden. |
/source | Das Verzeichnis auf dem Host, in dem die Daten außerhalb des Duplicati-Containers liegen, von denen die Backups erstellt werden sollen. Hier bietet sich ein Verzeichnis an, unterhalb dessen auf dem Docker-Host zentral die Daten der einzelnen Docker-Container abgelegt sind. |
Dieser Abschnitt ist nicht relevant, wenn ausschließlich Online-Backups (d.h. Backups werden per Netzwerkverbindung auf einem anderen Server oder in der Cloud abgelegt) erstellt werden.
Beim Einrichten eines Backups in Duplicati ist nach der Vorgabe der Meta-Daten und des Kryptoschlüssels das Sicherungsziel (=Ort an den das backup abgelegt wird) auszuwählen. Sofern das Backup nicht per Netzwerkverbindung auf einem anderen Server oder nicht der Cloud abgelegt werden soll, ist das Sicherungszeil auszuwählen. Bei diesem lokalen Backup muss beim Anlegen des Container eine Volume-Zuweisung für das Volume /backups
erfolgt sein.
/backups
auch dann angezeigt, wenn das Volume nicht konfiguriert ist.grün | Die lokalen Backups sind unterhalb dieses Verzeichnisses abzulegen. |
orange | Diese Verzeichnisse liegen zwar bei einer korrekten Konfiguration außerhalb des Container, sind aufgrund ihrer Bestimmung jedoch nicht als Sicherungsziel geeignet. |
rot | Diese Verzeichnisse liegen innerhalb des Containers und sind deshalb als Sicherungsziel nicht geeignet. |
Das Ziel eines dockerized Duplicati ist nicht die Sicherung von Dateien aus dem Duplicati-Container, sondern die Sicherung der außerhalb der Container auf dem Host abgelegten Volumes. Der Ablageort dieser Volumes ist über das Volume /sources
in den Duplicati-Container einzubinden.
grün | In diesem Verzeichnis des Containers sind die über das Volume /sources eingebundenen, außerhalb des Container liegenden Verzeichnisse erreichbar und können für die Backups ausgewählt werden. |
blau | Die ausgewählt Verzeichnisse und Dateien werden hier zusammengefasst angezeigt. |
orange | Diese Verzeichnisse liegen bei einer korrekten Konfiguration außerhalb des Containers. Eine Sicherung des Verzeichnisses /backups ist nicht sinnvoll, weil es die lokalen Backups enthält. Die Konfiguration im Verzeichnis /config sollte über das Verzeichnis /sources erfolgen. |
rot | Diese Verzeichnisse liegen innerhalb des Containers und eine Sicherung ist nicht notwendig. |
Der Container wird wie folgt in der Datei docker-compose.yml
konfiguriert:
version: "2.1" services: duplicati: image: linuxserver/duplicati container_name: duplicati environment: - PUID=2000 - PGID=2000 - TZ=Europe/Berlin # - CLI_ARGS= #optional volumes: - /path/to/appdata/config:/config - /path/to/backups:/backups - /path/to/source:/source ports: - 8200:8200 restart: unless-stopped
Die Integration des Containers in das Træfik-Setup gestaltete sich unerwartet schwierig. Im Nachhinein stellte sich heraus, dass für die Cloud-Instanz der Port 8200 nicht geöffnet war. Dies dürfte der Grund für die Probleme gewesen sein.
Die derzeitige Umsetzung setzt auf ein Routing durch _Træfik_ und funktioniert ohne den Port 8200.
Es sind hierfür die folgenden Ergänzungen in der docker-compose.yml
und der static.yml
:
docker-compose.yml
:
duplicati: image: linuxserver/duplicati container_name: duplicati environment: - PUID=2000 - PGID=2000 - TZ=Europe/Berlin volumes: - /path/to/DockerData/duplicati/config:/config - /path/to/DockerData/:/source # ports: # Inbound traafik via Traefik # - 8200:8200 # Port 8200 not ued restart: unless-stopped labels: - traefik.http.routers.duplicati.rule=Host(`subdomain.example.com`) - "traefik.http.routers.duplicati.tls.certResolver=default" - "traefik.http.routers.duplicati.tls=true"
static.yml
:
web-duplicati: address: ":8200"
Da Duplicati zur Sicherung nur ein Passwort (keine Vorgabe eines Usernamens) verlangt, sollte ein sehr starkes Passwort verwendet werden.
Weitere Ansätze zur Integration: