Kopie zapasową możemy przechowywać na serwerze MinIO https://min.io/, jest to serwer służący do przechowywania danych kompatybilny z Amazon S3.

Serwer można uruchomić z pliku binarnego na lokalnymsystemie lub w dockerze.

Uruchomienie serwera

Po pobraniu pliku minio tworzymy katalog gdzie będą przechowywane dane:

mkdir data

Uruchomieni serwera

minio server data
Endpoint:  http://192.168.122.1:9000  http://127.0.0.1:9000
AccessKey: HWSZL5OL9X37S0DSC3EW
SecretKey: d5ByBS50pffe90s9bKqWxxse4jBmEp9Zp5sv0c4c

Browser Access:
   http://192.168.122.1:9000  http://127.0.0.1:9000

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.122.1:9000 HWSZL5OL9X37S0DSC3EW d5ByBS50pffe90s9bKqWxxse4jBmEp9Zp5sv0c4c

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

W tym listingu interesują nas cztery wartości:

  • AcessKey

  • SecretKey

  • Command-line Access

  • Adres interfejsu webowego

Korzystając z klienta utworzymy bukiet, na powyszym listingu możemy znaleźć polecenie $ mc config …​ to polecenie doda serwer pod nazwą myminio oczywiście możemy zmienić nazwę.

./mc config host add myminio http://192.168.122.1:9000 HWSZL5OL9X37S0DSC3EW d5ByBS50pffe90s9bKqWxxse4jBmEp9Zp5sv0c4c

Dodanie bukietu

./mc mb myminio/nazwabukietu

Skrypt do obsługi kopii zapasowych wykonywanych przez Restic

#!/bin/bash

# Dostęp do serwera MinIO.
export AWS_ACCESS_KEY_ID=HWSZL5OL9X37S0DSC3EW
export AWS_SECRET_ACCESS_KEY=d5ByBS50pffe90s9bKqWxxse4jBmEp9Zp5sv0c4c

# Dostęp do serwera MinIO + integracja z programem pass
# export AWS_ACCESS_KEY_ID=$(pass show restic/x230/key)
# export AWS_SECRET_ACCESS_KEY=$(pass show restic/x230/access)

# Integracja restic i pass dostęp do haseł.
export RESTIC_PASSWORD_COMMAND='pass show restic/x230'

# Adres repozytorium.
REPO="s3:http://192.168.122.1:9000/backup-x230"
RESTORE_DIR=$HOME/restic/restore
MOUNT_DIR=$HOME/restic/mount
FILES=$HOME/restic/files.txt

init() {
    restic -r $REPO init
}

backup() {
    restic -r $REPO backup --files-from $FILES
}

snapshots() {
    restic -r $REPO snapshots --cleanup-cache -c
}

restore() {
    if [ -z "$1" ]; then
        read -p "Brak ID migawki, wyświetlić listę? [T/n]: " SNAPSHOT
        case $SNAPSHOT in
            t|T)
                snapshots
                ;;
            n|N)
                exit
                ;;
            *)
                snapshots
                ;;
        esac
    else
        restic -r $REPO restore $1 \
            --target $RESTORE_DIR
    fi
}

restore-latest() {
    restic -r $REPO restore -v latest \
        --target $RESTORE_DIR
}

mount() {
    restic -r $REPO mount $MOUNT_DIR
}

pomoc() {
    echo
    echo "------------------------------------------------------"
    echo "| init           - inicjuje repozytorium             |"
    echo "| backup         - wykonanie kopii zapasowej         |"
    echo "| snapshots      - lista backupów                    |"
    echo "| restore        - odtworzenie konkretnego snapshota |"
    echo "| restore-latest - odtwarza ostatni snapshot         |"
    echo "| mount          - podmontowuje repozytorium         |"
    echo "| help           - wyświetla pomoc                   |"
    echo "------------------------------------------------------"
    echo
}

case $1 in
    init)
        init
        ;;
    backup)
        backup
        ;;
    snapshots)
        snapshots
        ;;
    restore)
        restore $2
        ;;
    restore-latest)
        restore-latest
        ;;
    mount)
        mount
        ;;
    help|pomoc)
        pomoc
        ;;
    *)
        pomoc
        ;;
esac

Date: 2020-10-22T01:24:15+02:00