bup-Remote-Server in 5 Minuten mit docker-compose einrichten

English Deutsch

Das bup-Backup-System implementiert Remote-Backup auf einem Server, indem es sich per SSH mit dem Server verbindet, dort einen bup-Prozess startet und dann über den SSH-Tunnel kommuniziert.

In diesem Beitrag richten wir einen Server für bup-Remote-Backup basierend auf unserem ulikoehler/bup-server-Image ein (das sowohl bup als auch dropbear als SSH-Server enthält).

1. Verzeichnisstruktur initialisieren & SSH-Schlüsselsatz für den Serverzugriff erstellen

Ich empfehle, dies in /opt/bup zu tun, aber prinzipiell funktioniert jedes Verzeichnis.

bup_init_setup.sh
mkdir -p dotssh bup
# Neuen Elliptic-Curve-Public-Key generieren
ssh-keygen -t ed25519 -f id_bup -N ""
# SSH-Schlüssel zur Liste der autorisierten Schlüssel hinzufügen
cat id_bup.pub | sudo tee -a dotssh/authorized_keys
# Berechtigungen korrigieren, damit dropbear nicht meckert
sudo chown -R 1111:1111 bup
sudo chmod 0600 dotssh/authorized_keys
sudo chmod 0700 dotssh

1111 ist die Benutzer-ID des bup-Benutzers in der VM.

2. docker-compose.yml erstellen

Hinweis: Diese docker-compose.yml verwendet ein lokales Backup-Verzeichnis — du kannst auch ein CIFS-Verzeichnis z.B. von einem NAS-Gerät einhängen. Siehe bup remote server docker-compose config with CIFS-mounted backup store für weitere Details.

docker_compose.yml
services:
  bup-server:
    image: ulikoehler/bup-server:latest
    environment:
      - SSH_PORT=2022
    volumes:
      - ./dotssh:/home/bup/.ssh
      - ./dropbear:/etc/dropbear
      # BUP backup storage:
      - ./bup:/bup
    ports:
      - 2022:2022
    restart: unless-stopped

3. Container starten

An diesem Punkt kannst du docker-compose up verwenden, um den Dienst zu starten. Es ist jedoch typischerweise einfacher, TechOverflow’s Skript zu verwenden, um ein systemd-Skript zu generieren, das den Dienst beim Booten automatisch startet (und ihn sofort startet):

create_docker_compose_service.sh
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin

Wenn du docker-compose logs -f ausführst, solltest du eine Begrüßungsmeldung von dropbear sehen wie

bup_server_logs.txt
bupremotedocker-bup-remote-1  | [1] Dec 25 14:58:20 Not backgrounding

4. .ssh/config-Eintrag auf dem Client erstellen

Du musst dies für jeden Client tun.

Kopiere id_bup (das wir zuvor generiert haben) auf jeden Client in einen Ordner wie ~/.ssh. Wohin du es kopierst, spielt keine Rolle, aber der Benutzer, der später die Backups ausführt, benötigt Zugriff auf diese Datei. Außerdem musst du für diesen Benutzer einen .ssh/config-Eintrag erstellen, der SSH mitteilt, wie auf den bup-Server zugegriffen wird:

ssh_config_bup_server.txt
Host BupServer
    HostName 10.1.2.3
    User bup
    Port 2022
    IdentityFile ~/.ssh/id_bup

Setze HostName auf die IP oder den Domainnamen des Hosts, auf dem der Docker-Container läuft. Setze User auf bup. Dies ist im Container fest codiert. Setze Port auf den Port, den du in docker-compose.yml zugeordnet hast. Wenn die ports:-Zeile in docker-compose.yml - 1234:2022 lautet, ist der korrekte Wert für Port in .ssh/config 1234. Setze IdentityFile auf den Speicherort von id_bup (siehe oben).

Jetzt musst du dich einmal für jeden Client mit dem bup-Server-Container verbinden. Dies dient sowohl dazu, Probleme mit deiner SSH-Konfiguration zu erkennen (z.B. falsche Berechtigungen auf der id_bup-Datei) als auch dazu, den SSH-Host-Schlüssel des Containers als bekannten Schlüssel zu speichern:

ssh_bupserver.sh
ssh BupServer

Wenn dich dies nach einem Passwort fragt, ist etwas mit deiner Konfiguration falsch — möglicherweise verbindest du dich mit dem falschen SSH-Host, da der bup-Server-Container Passwort-Authentifizierung deaktiviert hat.

5. Mit bup verbinden

Jeder Client benötigt installiertes bup. Siehe How to install bup on Ubuntu 22.04 und ähnliche Beiträge.

Du musst verstehen, dass bup sowohl ein lokales Verzeichnis (genannt Index) als auch ein Verzeichnis auf dem bup-Server benötigt, genannt Zielverzeichnis. Du musst ein Index-Verzeichnis und ein Zielverzeichnis pro Backup-Projekt verwenden. Was du als Backup-Projekt definierst, ist dir überlassen, aber ich empfehle dringend, ein Backup-Projekt pro Anwendung zu verwenden, um Datenlokalität zu haben: Backups einer Anwendung gehören zusammen.

Konventionsgemäß ist das /bup-Verzeichnis auf dem Server (d.h. Container) für diesen Zweck vorgesehen (und auf ein Verzeichnis oder Volume außerhalb des Containers abgebildet).

Auf dem lokalen Host empfehle ich, entweder /var/lib/bup/project.index.bup oder ~/bup/project.index.bup zu verwenden und bup projektspezifische Verzeichnisse automatisch erstellen zu lassen. Wenn du einen speziellen Benutzer auf dem Client für Backups verwendest, kannst du die Indizes dort ablegen. Wenn der Index verloren geht, ist das kein Problem, solange das Backup funktioniert (es dauert nur ein paar Minuten, um alle Dateien erneut zu prüfen). Du solltest das Index-Verzeichnis nicht sichern.

Es gibt keine Anforderung für die .bup- oder .index.bup-Endung, aber wenn du sie verwendest, kannst du schnell erkennen, was ein Verzeichnis ist und ob es wichtig ist oder nicht.

Um bup zu verwenden, musst du zuerst die Verzeichnisse initialisieren. Du kannst dies mehrmals ohne Probleme tun, daher mache ich es am Anfang jedes meiner Backup-Skripte.

bup_init_remote.sh
bup -d ~/buptest.index.bup init -r BupServer:/bup/buptest.bup

Danach kannst du mit dem Backup beginnen. Im Allgemeinen wird dies durch zuerst bup index (diese Operation ist nur lokal) und dann bup save (was das Backup auf dem bup-Remote-Server speichert) ausgeführt.

bup_index_and_save.sh
bup -d ~/buptest.index.bup index . && bup save -r BupServer:/bup/buptest.bup -9 --strip-path $(pwd) -n mybackup .

Einige Parameter erfordern weitere Erklärung:

6. Wiederherstellen!

Du möchtest vielleicht sagen hoffentlich muss ich nie wiederherstellen. FALSCH. Du musst jetzt wiederherstellen, und du musst regelmäßig wiederherstellen, als Test, dass wenn du tatsächlich Daten durch Wiederherstellung zurückgewinnen musst, es auch funktioniert.

Um dies zu tun, müssen wir zuerst Zugriff auf den Ordner erhalten. Dies ist typischerweise ohnehin auf einer Art Linux-Server gespeichert, also installiere einfach bup dort. In unserem obigen Beispiel heißt das Verzeichnis, mit dem wir arbeiten, buptest.bup.

Es gibt zwei bequeme Möglichkeiten, bup-Backups anzuzeigen:

  1. Verwende bup web und öffne deinen Browser unter http://localhost:8080, um die Backup-Daten (einschließlich Verlauf) anzuzeigen:
bup_web.sh
bup -d buptest.bup web
  1. Verwende bup fuse, um den gesamten Baum einschließlich Verlauf in ein Verzeichnis wie /tmp/buptest einzuhängen:
bup_fuse_mount.sh
mkdir -p  /tmp/buptest && bup -d buptest.bup fuse /tmp/buptest

Check out similar posts by category: Bup, Container, Docker