Backups mit Restic gegen den lokalen S3 Server Minio

Seit einiger Zeit ist restic mein Backupwerkzeug der Wahl. Jede Nacht “wacht” der Backup Server auf und zieht ein Backup von den relevante Servern. Das funktioniert auch gut nur leider kann ich damit nicht das gelegentliche manuelle Backup von Workstations implementieren. Hier ist eher ein Backup nach dem Push Prinzip auf “Abruf” notwendig. Durch diesen exzellenten Beitrag motiviert habe ich mir minio genauer angeschaut und werde damit erst einmal weiter machen. Hier die Dokumentation meiner Schritte

1. Installation Go und minio

 mkdir golang
 cd golang/
 wget https://dl.google.com/go/go1.10.linux-386.tar.gz
 tar -C /usr/local -xzf go1.10.linux-386.tar.gz
 export PATH=$PATH:/usr/local/go/bin
 go get -u github.com/minio/minio
 mv /root/go/bin/minio  /usr/local/bin/

2. Start des Dienstes auf dem Server

  minio server /backup3/minio-hbauer/
  Created minio configuration file successfully at /root/.minio
  Drive Capacity: 1.3 TiB Free, 1.7 TiB Total

  Endpoint:  http://192.xxx.yyy.zz:9000  http://127.0.0.1:9000
  AccessKey: 7QWExxxxxxxxxxxxxxxxI
  SecretKey: /LOnyyyyyyyyyyyyyyyyyyyyyyyyyyy8tcccc

  Browser Access:
     http://192.xxx.yyy.zzz:9000  http://127.0.0.1:9000

  Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
     $ mc config host add myminio http://192.xxx.yyyy.zzz:9000 77QWExxxxxxxxxxxxxxxxI /LOnyyyyyyyyyyyyyyyyyyyyyyyyyyy8tcccc

  Object API (Amazon S3 compatible):
     Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
     Java:       https://docs.minio.io/docs/java-client-quickstart-guide
     Python:     https://docs.minio.io/docs/python-client-quickstart-guide
     JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
     .NET:       https://docs.minio.io/docs/dotnet-client-quickstart-guide

Mit dem Browser kann man sich jetzt anmelden.

3. Einrichten des Repositories.

Ich verwende dieses von JP Mens empfohlen Tool auf dem Client.

wget https://raw.githubusercontent.com/binarybucks/restic-tools/master/bin/backup
mv backup restic-minio-backup.sh
chmod +x restic-minio-backup.sh

das noch konfiguriert werden muss

sudo mkdir /etc/backup
cd /etc/backup
vi local.config
  BACKUP_HOSTNAME="myclient"
  BACKUP_DIR="/home/hbauer/Dokumente/"
  BACKUP_ARGS="--tag filesystem"
  # HEALTHCHECK_URL="<URL from https://healthchecks.io/checks/ to notify>

 vi /etc/backup/firsttest.repo
   RESTIC_REPOSITORY="s3:http://192.xxx.yyy.zzz:9000/first-test"
   AWS_ACCESS_KEY_ID="77QWExxxxxxxxxxxxxxxxI "
   AWS_SECRET_ACCESS_KEY="/LOnyyyyyyyyyyyyyyyyyyyyyyyyyyy8tcccc"
   RESTIC_PASSWORD='verygeheim'

Und nun der erste Start. Erstelle ein neues restic Repository

  ./restic-minio-backup.sh firsttest init
   created restic backend 4271f8a2f7 at s3:http://192.xxx.yyy.zzz:9000/first-test
    ....
    ....

Erstelle ein Backup der in local.config definierten Daten

  ./restic-minio-backup.sh firsttest local
  scan [/home/hbauer/Dokumente]
  scanned 21 directories, 160 files in 0:00
  [0:08] 100.00%  10.816 MiB/s  86.528 MiB / 86.528 MiB  181 / 181 items  0 errors  ETA 0:00
  duration: 0:08, 10.25MiB/s
  snapshot 3a38485c saved

Soweit so gut. Jetzt mal einen kompletten Durchlauf.

Erstelle ein Dokument im Datenpfad, Sicherung durchführen, Dokument löschen und Daten wieder herstellen

 echo first-test > /home/hbauer/Dokumente/minio-restic-test
 ./restic-minio-backup.sh firsttest local
 using parent snapshot 3a38485c
 scan [/home/hbauer/Dokumente]
 scanned 21 directories, 161 files in 0:00
 [0:01] 100.00%  86.528 MiB/s  86.528 MiB / 86.528 MiB  182 / 182 items  0 errors  ......
 snapshot a868b7d5 saved
 rm /home/hbauer/Dokumente/minio-restic-test
 ./restic-minio-backup.sh firsttest  restore a868b7d5 --target restic-restore/
 password is correct
 restoring <Snapshot a868b7d5 of [/home/hbauer/Dokumente] at 2018-03-04 07:21:16.86621425 +0100 CET by root@pedro> to restic-restore/
 more restic-restore/Dokumente/minio-restic-test
   first-test

So, die ersten Test scheinen gut gelaufen zu sein. Jetzt das ganze produktiv nehmen.

4. Autostart des minio Servers

gemäß dieser Beschreibung

  vi /etc/default/minio
  more /etc/default/minio
  # Local export path.
  MINIO_VOLUMES="/backup3/minio-hbauer/"
  # Use if you want to run Minio on a custom port.
  #MINIO_OPTS="--address :9199"

Service beim Start hochfahren

 cd /etc/systemd/system/
 curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
 systemctl enable minio.service
 systemctl daemon-reload
 systemctl start minio.service

5. Next Steps

Einiges ist noch offen:

  • ein Setup für verschiedene Benutzer
  • NGinx Proxy mit TLS

aber die ersten Backups können von meiner Workstation in einem separaten VLAN schon mal laufen