Files
Bruchtal/docs/backup_restore/proxmox/paperless/paperless_backup.md
2026-03-02 19:21:09 +01:00

7.2 KiB

Paperless Backup

  • tägliches backup der VM unter Proxmox auf der QNAP => Proxmox_Backup
  • Sicherung der Nutzdaten:

??? example "Location /paperless/backup_storage.sh" ``` #!/usr/bin/env bash #####!/bin/bash

########### Initialisierung ##############
#### https://docs.hetzner.com/de/robot/storage-box/backup-space-ssh-keys/

## Führe auf dem Clienten die folgenden Befehle aus:
# ssh-keygen
# cat ~/.ssh/id_rsa.pub | ssh -p23 u338XXX@u338XXX.your-storagebox.de install-ssh-key

###### Hier deine Daten einfügen #########
export BORG_PASSPHRASE="%ci5pKqWvXj!iBm9khAR@Z2ohJ2inMMht8ZNsU*"

BACKUP_USER="u358899"
REPOSITORY_DIR="paperless"
##########################################

LOG_DIR="/paperless/backuplogs"
LOG="$LOG_DIR/backup_storage.log"

echo "MOIN!" >> /paperless/test.log

if [ ! -d "$LOG_DIR" ]; then
    mkdir -p "$LOG_DIR"
fi


full_path=$(realpath $0)
dir_path=$(dirname $full_path)
echo $dir_path

## Hinweis: Für die Verwendung mit einem Backup-Account muss
## 'your-storagebox.de' in 'your-backup.de' geändert werden.

REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"

## Zeitstempel-Variable setzen
TIMESTAMP=$(date +'%Y-%m-%d_%H:%M')

##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

start_time=$(date +'%Y-%m-%d %H:%M:%S')
echo "###### Backup gestartet: $start_time ######"

## Überprüfen, ob eine spezielle Aktion durchgeführt werden soll
BACKUP_SUFFIX=""
case "$1" in
NEW_INIT)
    echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..."
    ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}"
    echo "Das Repository wird komplett gelöscht und neu angelegt..."
    borg delete --force --stats $REPOSITORY
    borg init --encryption=repokey $REPOSITORY
    BACKUP_SUFFIX="_NEW_INIT"
    ;;
INIT)
    echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..."
    ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}"
    echo "Überprüfe, ob das Repository existiert..."
    if borg info $REPOSITORY > /dev/null 2>&1; then
    echo "Das Repository existiert bereits. Vorgang wird abgebrochen."
    exit 1
    else
    echo "Das Repository wird neu angelegt..."
    borg init --encryption=repokey $REPOSITORY
    fi
    BACKUP_SUFFIX="_INIT"
    ;;
?)
    echo -e "\n######################################"
    echo -e "Verwendung des Backup-Skripts:"
    echo -e "######################################"
    echo -e "Ohne Parameter:"
    echo -e "  Führt ein reguläres Backup durch und hängt an den Backup-Namen das aktuelle Datum und die Uhrzeit."
    echo -e "\nParameter:"
    echo -e "  NEW_INIT  - Löscht das Repository komplett und legt es neu an."
    echo -e "  INIT      - Legt das Repository neu an, wenn es nicht bereits existiert."
    echo -e "  ?         - Zeigt diese Hilfemeldung an und bricht das Skript ab."
    echo -e "\nBeispiele:"
    echo -e "  ./backup_script.sh"
    echo -e "  ./backup_script.sh NEW_INIT"
    echo -e "  ./backup_script.sh INIT"
    echo -e "  ./backup_script.sh ?"
    echo -e "\nBackups auflisten mit:"
    echo -e "  borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n"
    echo -e "Rücksichern einzelner Verzeichnisse mit:"
    echo -e "  cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen."
    echo -e "  borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin"
    echo -e "######################################\n"
    echo -e "Komplette Rücksicherung mit:"
    echo -e "cd / # Wechseln Sie in das Root-Verzeichnis, um das gesamte System wiederherzustellen."
    echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}"
    echo -e "######################################\n"
    echo -e "Auf den Backup-Server verbinden:"
    echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de"
    echo -e "Verzeichnisinhalt anzeigen:"
    echo -e "ls backups/${REPOSITORY_DIR}"
    echo -e "Verzeichnis der aktuellen Backups löschen:"
    echo -e "rm -rf backups/${REPOSITORY_DIR}"
    echo -e "######################################\n"
    exit 0
    ;;
esac

## Überprüfen, ob ein zusätzlicher Parameter übergeben wurde
if [ -n "$1" ] && [ "$1" != "INIT" ] && [ "$1" != "NEW_INIT" ]; then
BACKUP_SUFFIX="_$1"
fi

##
## Zu sichernde Verzeichnisse
##
# Hier werden alle Verzeichnisse im Root-Verzeichnis gesichert, außer den ausgeschlossenen Verzeichnissen
DIRS_TO_BACKUP=(
    "/paperless/paperless-ngx/export"
)

##
## Dateien ins Repository übertragen
##

echo "Übertrage Dateien ..."
borg create -v --stats                   \
    $REPOSITORY::"${TIMESTAMP}${BACKUP_SUFFIX}"  \
    "${DIRS_TO_BACKUP[@]}"              # \


end_time=$(date +'%Y-%m-%d %H:%M:%S')
duration=$(date -u -d @$(( $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) )) +%H:%M:%S)

echo "###### Backup beendet: $end_time ######"
echo "Time (start): $start_time"
echo "Time (end):   $end_time"
echo "Duration:     $duration"

echo -e "\n######################################"
echo -e "Backups auflisten mit:"
echo -e "borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n"

echo -e "Rücksichern einzelner Verzeichnisse mit:"
echo -e "cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen."
echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin"
echo -e "######################################\n"

echo -e "Komplette Rücksicherung mit:"
echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}"
echo -e "######################################\n"

echo -e "Auf den Backup-Server verbinden:"
echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de"
echo -e "Verzeichnisinhalt anzeigen:"
echo -e "ls backups/${REPOSITORY_DIR}"
echo -e "Verzeichnis der aktuellen Backups löschen:"
echo

echo -e "rm -rf backups/${REPOSITORY_DIR}"
echo -e "######################################\n"

borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR} >> ${LOG}






/paperless/backup_storage:
``` snippet
--8<-- "/docs/backup_restore/proxmox/paperless/backup_storage.sh"

Location /paperless/backup_storage: