Kopia als Backup einrichten

Wie ihr wisst, liebe ich Open Source. Open Source bietet diverse Vorteile, die einen komplett eigenen Blog-Eintrag brauchen.

Momentan brauche ich eine Backup-Lösung für mein Paperless-ngx, dass ich auf meinen kleinen Homeserver gehostet habe.

Ich habe mich Kopia unter den verschiedenen Open Source Lösungen wie restic oder borg entschieden. Warum? Der ausschlaggebende Grund war für mich, dass Kopia ein Server Modus bietet, Deduplizierung und Verschlüsselung beherrscht und zusätzlich CLI Tools für Clients hat. Kopia läuft zum Zeitpunkt des Erstellen dieses Blogbeitrages unter einer Apache-2.0, dass auch ein kommerziellen Nutzer theoretisch erlaubt.

Warum war für mich Deduplizierung ein wichtiges Feature? Die Deduplizierung verhindert dass Speichern von redundanten Daten. Kopia unterteilt die zu speichernden Daten in Chunks auf und speichert deren Hash. Falls der Hash bereits existiert muss dieser nicht nochmal gespeichert werden. Im Anschluss werd der Chunk verschlüsselt.

When Kopia sees a file to backup, it first splits its data into “chunks” with the configured splitter. Then compute its hash with the configured hash algorithm, and compare it against the existing database. If a matching hash is found, this chunk is already stored, thus can be safely discarded

Quelle: https://kopia.io/docs/advanced/compression/

Kopia installieren

Ich arbeite auf einen Ubuntu Machine und erstelle als Erstes einen neuen Ordner. Damit man die Anleitung folgen kann, muss man bereits Docker installiert haben.

mkdir -p /opt/kopia

Als nächstes legt man die Docker Compose Datei in den \opt Ordner.

Installation mit Docker Compose nach Anleitung. Quelle: https://kopia.io/docs/installation/
sudo mkdir -p /opt/kopia/tls
sudo openssl req -x509 -newkey rsa:4096 -nodes \
  -keyout /opt/kopia/tls/kopia.key \
  -out /opt/kopia/tls/kopia.crt \
  -days 825 \
  -subj "/CN=kopia"

Schlüssel und Zertifikat erstellen.

In dem Kopia Pfad \opt\kopia starte nun die Compose Datei

sudo docker compose up -d

In der WebUI kannst du dich mit deinem Passwort und User, dass du in der Compose Datei angegeben hast anmelden. Danach erstelle ein Repository erstellen und dann den Pfand /repository/XXX angeben.

Repository erstellen.

Wenn man ein Kopia Repository anlegt, dann muss der Ordner in dem Pfad repository auch existieren:

Caddy Reverse Proxy

Damit man einen Zugriff auf den Kopia Server von außerhalb mit HTTPS ermöglicht, braucht es einen Reverse Proxy wie Caddy.
Als erstes erstellt man die Ordner, die Caddy benötigt:

mkdir -p /opt/caddy/Caddyfile
mkdir -p /opt/caddy/data
mkdir -p /opt/caddy/config:

Einstellung für das Caddyfile:

{
    email   MAIL-ADRESSE
}

kopia.DOMAIN.de {
    reverse_proxy https://kopia:51515 {
    transport http {
      # weil wir oben self-signed nutzen:
      tls_insecure_skip_verify
    }
  }
}

Verbindung vom Client A zum Server

Nutzer erstellen

Auf dem Client A:

whoami
hostname -s

Auf dem Kopia Server:

sudo docker exec -it Kopia kopia server users add USER@HOSTNAME_CLIENT_A --user-password 'EIN_STARKES_PASSWORT'

Um die Änderung sofort wirksam zu machen, einmal die compose file runter und hochfahren.

sudo docker compose down && sudo docker compose up sudo docker compose down && sudo docker compose up -d

Auf Client A:


kopia repository connect server --url=https://kopia.deinedomain.de:443

Dann User und Passwort eingeben das man im vorherigen Schritt angegeben hat angeben.

Repository befühlen:

kopia snapshot create /etc
kopia snapshot create /var/lib/docker
kopia snapshot list

Auf Client B Snapshot herunterladen und überprüfen

User für Client B auf Server erstellen.


sudo docker exec -it Kopia kopia server users add USER@HOSTNAME_CLIENT_B --user-password 'EIN_STARKES_PASSWORT'

User z.B. noahk und hostname beispeilweise mabookpro

Richtige Rechte setzen um den Snapshot herunterladen zu können:

sudo docker exec -it Kopia kopia server acl add --user "USER@HOSTNAME_CLIENT_B" --access READ --target type=snapshot,username=USER_NAME,hostname=HOSTNAME_CLIENT_A
sudo docker exec -it Kopia kopia server acl add \
  --user="noahk@macbookpro" --access=READ --target=type=content

Minimale Permission um Daten zu lesen ist ein READ Access für den bestimmten Nutzer zu haben und den eigentlich Content Blob lesen zu können.

sudo docker exec -it Kopia kopia server acl remove --delete a01f3f94ba05b972d9ae8b1c6f27e76d

Eine Regel löschen

Erst in den Docker Container einloggen

sudo docker exec -it Kopia sh
kopia snapshot restore "root@tower:/data"  /tmp

Fazit

Mit Docker kann man schnell eine Kopia Instanz aufsetzen. Kopia unterstützt diverser Clients mit dem hauseigenen CLI Tools. Ich hoffe, dass ich die grundlegenden Schritte ausführlich genug erklärt habe, damit man erfolgreich Kopia auf seinen eigenen Server installieren kann.