NIE WIEDER Papierkram suchen! đŸ˜± Paperless-NGX in der Praxis

Da ich jetzt endlich die, fĂŒr mich, perfekte und einwandfrei funktionierende Lösung fĂŒr Paperless gefunden habe, möchte ich meine Erfahrungen gerne mit euch teilen.
Ich habe mich auch von dem Video von Simon42 animieren lassen und Paperless zuerst in HA installiert. Das hatte den Vorteil, dass es sehr einfach zu installieren war, aber die Nachteile, dass es da eigentlich nichts zu suchen hat, Backups sehr groß wurden und dass neue Versionen von Paperless erst mal von dem Entwickler des Add-on in das Add-on integriert werden mĂŒssen, was immer eine Weile dauern kann.

Dann habe ich eine sehr gute und auch sehr gut funktionierende Anleitung fĂŒr die Installation als Docker Container auf meiner QNAP gefunden.

Die Verarbeitung der Dokumente lief aber immer sehr zÀh und trÀge ab. Ansonsten ist das aber ein sehr empfehlenswerter Weg, um Paperless zu betreiben.

Dann habe ich aber die beste Variante gefunden, Paperless zu installieren und zu betreiben.
Jetzt lÀuft Paperless als LXC Container auf Proxmox, inkl. einer tÀglichen Sicherung der Dokumente auf meinem QNAP.
Die Anleitung stammt von Tobias Lerch. Er erklĂ€rt alles perfekt Schritt fĂŒr Schritt und die Skripte funktionieren einwandfrei und fehlerfrei.
Ich habe dem LXC Container 2 CPUs, 2 GB RAM und 50 GB SSD gegeben, womit Paperless auch beim Importieren mehrerer Dokumente recht flĂŒssig lĂ€uft (wesentlich schneller als auf der QNAP).

https://blog.smarthomeundmore.de/paperless-ngx-komplett-einrichten-mit-rest-api-home-assistant-sensor/

Die Saba Shares habe ich in der Datei /etc/samba/smb.conf noch wie folgt erweitert, um alle Ordner von außen zu sehen:

[consume]
   comment = Eingangsordner fĂŒr neue Dockumente
   path = /data/paperless/consume
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

[backup]
   comment = Paperless Backup
   path = /data/paperless/backup
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

[restore]
   comment = Paperless Restore
   path = /data/paperless/restore
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

[media]
   comment = Ausgabeordner fĂŒr gespeicherte Dokumente
   path = /data/paperless/media
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

[data]
   comment = Arbeitsdaten
   path = /data/paperless/data
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

[export]
   comment = Daten Export
   path = /data/paperless/export
   browsable = yes
   writable = yes
   guest ok = no
   create mask = 0770
   directory mask = 0770
   valid users = paperless

Und dann wollte ich noch, neben der tÀglichen Sicherung des Containers in Proxmox, eine tÀgliche Sicherung der Dokumente in ein Share auf meinem NAS.
Das hat mich aufgrund der EinschrÀnkungen eines unprivilegierten Containers sehr viel Zeit und Nerven gekostet. Daher möchte ich euch auch hier, meine Lösung nicht vorenthalten.

Erstellt bitte vor allen Änderungen ein Backup!

  1. Auf dem Proxmox Host (z.B. PVE) ein Mount mit dem NAS-Share mit uid=100000 und gid=100000 anlegen:
    Dazu ein Verzeichnis im Ordner /mnt anlegen:
mkdir /mnt/nas_paperless_backup
  1. Auf dem Proxmox Host (z.B. PVE) eine Credential Datei fĂŒr Username und Passwort des NAS-Share anlegen:
nano /root/.smbcredentials

username=[Benutzername]
password=[Passwort]

Dann die Datei absichern:

chmod 600 /root/.smbcredentials
  1. Auf dem Proxmox Host (z.B. PVE) den Mount Befehl in die fstab eintragen, damit die Verbindung nach einem Reboot wieder hergestellt wird
nano /etc/fstab

//[NAS IP-Adresse]/[Freigabename] /mnt/qnap_paperless_backup cifs credentials=root/.smbcredentials,uid=100000,gid=100000,file_mode=0775,dir_mode=0775,_netdev,nofail,x-systemd.automount 0 0

Den Eintrag prĂŒfen:

mount -a

Jetzt sollte man unter dem Ordner /mnt/qnap_paperless_backup den Inhalt der Freigabe sehen können.
Und mit

touch /mnt/qnap_paperless_backup/test.txt

kann man auch ĂŒberprĂŒfen, ob man Schreibrechte hat.

  1. Auf dem Proxmox Host (z.B. PVE) fĂŒr den LXC Container einen Mount mit dem eben erstellten Mount des Host herstellen
    Wenn der LXC Container z.B. die CT ID 120 hat (ansonsten bitte anpassen):
nano /etc/pve/lxc/120.conf

mp0: /mnt/qnap_paperless_backup,mp=/mnt/qnap_paperless_backup

Nach dem Neustart des LXC Containers sollte man jetzt auch hier unter

/mnt/qnap_paperless_backup

den Inhalt des NAS Shares sehen können und mit

touch /mnt/qnap_paperless_backup/test1.txt

ĂŒberprĂŒfen, ob man Schreibrechte darauf hat.

  1. Ein Backup Skript erstellen, dass die Dokumente tÀglich auf das NAS sichert
    Ich habe dazu eine Kopie des Backup-Skriptes von Tobias Lerch entsprechend angepasst:
nano /root/daily_qnap_backup.sh

#!/bin/bash
# Skript: backup.sh
# Dieses Skript fĂŒhrt ein Backup ĂŒber docker-compose aus und verschiebt anschließend die Backup-Datei(en).

echo "Starte Backup: Ein Backup wird jetzt durchgefĂŒhrt..."

# Wechsel in das Verzeichnis, in dem sich die docker-compose Datei befindet
cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }

# FĂŒhre den docker-compose Befehl aus
sudo docker compose exec webserver document_exporter ../export -z

# PrĂŒfe, ob der Befehl erfolgreich war
if [ $? -eq 0 ]; then
  echo "Backup erfolgreich abgeschlossen."
  
  # PrĂŒfen, ob das Quellverzeichnis existiert
  if [ -d "/data/paperless/export" ]; then
    # Sicherstellen, dass das Zielverzeichnis existiert (falls nicht, wird es angelegt)
   #  mkdir -p /data/paperless/backup

    # PrĂŒfen, ob im Quellverzeichnis Dateien vorhanden sind
    if compgen -G "/data/paperless/export/*" > /dev/null; then
      echo "Verschiebe Backup-Datei(en) nach [NAS]/[NAS_Paperless_Backup]..."
      mv /data/paperless/export/* /mnt/qnap_paperless_backup/

      echo "Lösche Sicherungen, die Àlter als 7 Tage sind..."
      find /mnt/qnap_paperless_backup -name 'export-*.zip' -mtime +7 -delete

      if [ $? -eq 0 ]; then
        echo "Datei(en) erfolgreich verschoben."
      else
        echo "Fehler beim Verschieben der Datei(en)."
      fi
    else
      echo "Keine Datei(en) im Verzeichnis /data/paperless/export gefunden."
    fi
  else
    echo "Quellverzeichnis /data/paperless/export existiert nicht."
  fi
else
  echo "Fehler beim Backup."
fi

Das Sktipt muss noch ausfĂŒhrbar gemacht werden:

chmod +x /root/daily_qnap_backup.sh

Mit dem folgenden Befehl kann man es mal ausprobieren:

sh /root/daily_qnap_backup.sh

Und dann muss es noch in die crontab eingetragen werden, damit es wirklich tÀglich lÀuft (bei mir 2:07 Uhr):

nano /etc/crontab

7  2    * * *   root    /root/daily_qnap_backup.sh

Da der Container von Haus aus mit UTC-Zeit lÀuft, sollte man auch noch die Zeitzone anpassen, damit das Skript auch wirklich zur richtigen Zeit lÀuft:
Die aktuelle Zeiteinstellung prĂŒfen:

date

Zeitzone Àndern

rm /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Und dann noch mal mit date prĂŒfen

3 „GefĂ€llt mir“