diff --git a/docs/backup_restore/proxmox/paperless/backup_storage.sh b/docs/backup_restore/proxmox/paperless/backup_storage.sh new file mode 100644 index 0000000..b64322d --- /dev/null +++ b/docs/backup_restore/proxmox/paperless/backup_storage.sh @@ -0,0 +1,164 @@ +#!/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} \ No newline at end of file diff --git a/docs/backup_restore/proxmox/paperless/paperless_backup.md b/docs/backup_restore/proxmox/paperless/paperless_backup.md new file mode 100644 index 0000000..74a175e --- /dev/null +++ b/docs/backup_restore/proxmox/paperless/paperless_backup.md @@ -0,0 +1,17 @@ +# Paperless Backup + +- tägliches backup der VM unter Proxmox auf der QNAP [=> Proxmox_Backup](/docs/backup_restore/proxmox/proxmox_backup.md) +- Sicherung der Nutzdaten: + + +/paperless/backup_storage: +``` snippet +--8<-- "/docs/backup_restore/proxmox/paperless/backup_storage.sh" +``` + +[/paperless/backup_storage:](/docs/backup_restore/proxmox/paperless/backup_storage.sh) + + + + + diff --git a/docs/proxmox/paperless/docker-compose.yml b/docs/proxmox/paperless/docker-compose.yml new file mode 100644 index 0000000..00fbea8 --- /dev/null +++ b/docs/proxmox/paperless/docker-compose.yml @@ -0,0 +1,52 @@ +services: + broker: + image: docker.io/library/redis:8 + restart: unless-stopped + volumes: + - redisdata:/data + db: + image: docker.io/library/postgres:17 + restart: unless-stopped + volumes: + - /paperless/database:/var/lib/postgresql/data + environment: + POSTGRES_DB: paperless + POSTGRES_USER: paperless + POSTGRES_PASSWORD: paperless + webserver: + image: ghcr.io/paperless-ngx/paperless-ngx:latest + restart: unless-stopped + depends_on: + - db + - broker + - gotenberg + - tika + ports: + - "8000:8000" + volumes: + - /paperless/data:/usr/src/paperless/data + - /paperless/media:/usr/src/paperless/media + - ./export:/usr/src/paperless/export + - /paperless/paperless-ngx/consume:/usr/src/paperless/consume + env_file: docker-compose.env + environment: + PAPERLESS_REDIS: redis://broker:6379 + PAPERLESS_DBHOST: db + PAPERLESS_TIKA_ENABLED: 1 + PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 + PAPERLESS_TIKA_ENDPOINT: http://tika:9998 + gotenberg: + image: docker.io/gotenberg/gotenberg:8.20 + restart: unless-stopped + # The gotenberg chromium route is used to convert .eml files. We do not + # want to allow external content like tracking pixels or even javascript. + command: + - "gotenberg" + - "--chromium-disable-javascript=true" + - "--chromium-allow-list=file:///tmp/.*" + tika: + image: docker.io/apache/tika:latest + restart: unless-stopped +volumes: + redisdata: + diff --git a/docs/proxmox/paperless/paperless.md b/docs/proxmox/paperless/paperless.md new file mode 100644 index 0000000..342c390 --- /dev/null +++ b/docs/proxmox/paperless/paperless.md @@ -0,0 +1,18 @@ +# Paperless VM + +## Architektur +- läuft als VM direkt auf Proxmox +- Plattform: Ubuntu Server 24 +- Paperless läuft unter Docker + +## docker-compose.yml +``` snippet +--8<-- "/docs/proxmox/paperless/docker-compose.yml" +``` + +** docker-compose.env Datei mit Key in Bitwarden ** + +## Backup +==> + +- \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index e345f57..cca4b69 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -29,11 +29,11 @@ nav: - Wikijs: docker/wikijs/wikijs.md - Backup: - - Backup: backup/backup.md + - Docker: backup_restore/docker/docker_backup.md - christian-linux: backup_restore/workstations/christian-linux_backup.md + - Hetzner: backup_restore/hetzner/hetzner_backup.md - Proxmox: backup_restore/proxmox/proxmox_backup.md - - Storage: backup/storage.md - + - christian-linux: backup/christian-linux.md markdown_extensions: - pymdownx.highlight