Zum Hauptinhalt springenZur Hauptnavigation springen

Empfohlene Produkte

📦 Shopping-Tipps für dich

Ausgewählte Empfehlungen für dein Smart Home Projekt

Lädt Produkte... (smartswitch → wifi)

Paperless-ngx ist eine großartige Lösung zur Dokumentenverwaltung – besonders, wenn man es als Bare-Metal-Installation (ohne Docker) in einem Proxmox LXC-Container betreibt. Doch genau das macht das Aktualisieren manchmal tricky – vor allem mit strukturellen Änderungen in neueren Versionen.

In diesem Beitrag zeigen wir dir ein zukunftssicheres Bash-Skript, mit dem du dein Paperless-ngx zuverlässig und bequem auf die neueste Version bringst – komplett automatisch.


🧰 Voraussetzungen

  • Paperless-ngx ist unter /opt/paperless installiert
  • Keine Verwendung von Docker oder venv (System-Python)
  • Die Dienste werden über systemd gestartet (z. B. paperless-webserver)

✨ Was das Skript leistet

  • Erkennt die aktuell installierte Version
  • Ermittelt automatisch die neueste GitHub-Version
  • Erstellt ein Backup der Konfiguration
  • Lädt & entpackt die neue Version
  • Installiert Python-Abhängigkeiten
  • Führt Datenbankmigrationen durch
  • Aktualisiert statische Dateien
  • Startet alle Dienste neu
  • Erkennt und ersetzt veraltete gunicorn.conf.py

🛡️ Das Bash-Skript

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #!/bin/bash set -e APP_DIR="/opt/paperless" TMP_DIR="/tmp/paperless-update" RELEASES_URL="https://github.com/paperless-ngx/paperless-ngx/releases" LATEST=$(curl -s https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep tag_name | cut -d '"' -f4) TAR_NAME="paperless-ngx-${LATEST}.tar.xz" DOWNLOAD_URL="${RELEASES_URL}/download/${LATEST}/${TAR_NAME}" ARCHIVE_PATH="/tmp/${TAR_NAME}" INSTALLED_VERSION=$(grep -Po 'v[0-9]+\.[0-9]+\.[0-9]+' "$APP_DIR/static/VERSION" 2>/dev/null || echo "unbekannt") echo "🔍 Prüfe auf neue Paperless-ngx-Version..." echo "📦 Installiert: ${INSTALLED_VERSION} | Verfügbar: ${LATEST}" echo "🧾 Backup der Konfiguration..." cp "$APP_DIR/paperless.conf" "$APP_DIR/paperless.conf.$(date +%Y%m%d)" if [[ -f "$ARCHIVE_PATH" ]]; then echo "📁 Archiv bereits vorhanden: $TAR_NAME" else echo "⬇️ Lade Release: $TAR_NAME" wget -q --show-progress -O "$ARCHIVE_PATH" "$DOWNLOAD_URL" fi echo "📂 Entpacke Archiv..." rm -rf "$TMP_DIR" mkdir "$TMP_DIR" tar --strip-components=1 -xf "$ARCHIVE_PATH" -C "$TMP_DIR" echo "🔎 Vergleiche Konfiguration..." cp "$TMP_DIR/paperless.conf" "$TMP_DIR/paperless.conf.release" diff "$APP_DIR/paperless.conf" "$TMP_DIR/paperless.conf.release" || echo "⚠️ Unterschiede gefunden – ggf. manuell prüfen." echo "🛑 Stoppe Dienste..." systemctl stop paperless-*.service if grep -q "paperless.workers" "$APP_DIR/gunicorn.conf.py" 2>/dev/null; then echo "⚠️ Alte gunicorn.conf.py erkannt – wird ersetzt." cp "$APP_DIR/gunicorn.conf.py" "$APP_DIR/gunicorn.conf.py.bak.$(date +%Y%m%d)" curl -fsSL https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/deployment/gunicorn.conf.py -o "$APP_DIR/gunicorn.conf.py" || echo "❗ Neue gunicorn.conf.py konnte nicht geladen werden." fi echo "🧹 Lösche alte Dateien..." cd "$TMP_DIR" for f in * .*; do [[ "$f" != "." && "$f" != ".." && "$f" != "paperless.conf" ]] && rm -rf "$APP_DIR/$f" done echo "📁 Kopiere neue Dateien..." chown -R paperless:paperless "$TMP_DIR" cp -r "$TMP_DIR/"* "$APP_DIR/" cp "$TMP_DIR"/.* "$APP_DIR/" 2>/dev/null || true echo "📦 Installiere Python-Abhängigkeiten..." pip3 install --upgrade -r "$APP_DIR/requirements.txt" --break-system-packages echo "🛠️ Migriere Datenbank..." cd "$APP_DIR/src" python3 manage.py migrate echo "🖼️ Sammle statische Dateien..." python3 manage.py collectstatic --noinput echo "${LATEST}" > "$APP_DIR/static/VERSION" echo "🚀 Starte Dienste..." systemctl start paperless-*.service echo "✅ Update auf ${LATEST} abgeschlossen!"

💡 WICHTIG

  • Erstelle vor dem Update einen Snapshot des LXC-Containers in Proxmox
  • Optional: Backup der Datenbank separat speichern
  • Konfiguration manuell vergleichen, falls nötig (diff)

🧩 Fazit

Mit diesem Script wird das Paperless-Update deutlich entspannter. Du brauchst keine Sorge mehr vor fehlenden Modulen oder alten Konfigs zu haben. Das Ganze lässt sich sogar per cron oder systemd-Timer regelmäßig automatisieren.

Happy Archiving! 📁✌️

Shopping-Empfehlungen

Passende smartswitch-Produkte

Weitere empfohlene Produkte für dein Smart Home

Lädt Produkte... (smartswitch → wifi)

Artikel teilen

Teilen: