Papra auf ZimaOS installieren – die schlanke Alternative zu Paperless-ngx?
Wer seine Dokumente selbst verwalten und digitalisieren möchte, stößt früher oder später auf Lösungen wie Paperless-ngx. Eine interessante und deutlich schlankere Alternative ist Papra.
Papra lässt sich auch unter ZimaOS betreiben. Allerdings findet ihr die Anwendung aktuell nicht direkt im ZimaOS App Store. Wir installieren Papra deshalb als benutzerdefinierte App über Docker Compose.
In dieser Anleitung zeige ich euch Schritt für Schritt, wie die Installation funktioniert – inklusive eines wichtigen Berechtigungsproblems, über das ich bei meiner eigenen Installation unter ZimaOS gestolpert bin.
Was benötigen wir?
Für die Installation braucht ihr:
- ein laufendes ZimaOS-System
- Zugriff auf das ZimaOS-Terminal per SSH
- eure lokale IP-Adresse von ZimaOS
- einen Texteditor
- eine Docker-Compose-YAML
- wenige Minuten Zeit
Die Installation erfolgt komplett als Docker-Container.
1. SSH-Zugriff auf ZimaOS aktivieren
Für einige Schritte benötigen wir Zugriff auf das Terminal von ZimaOS.
Öffnet in ZimaOS die Einstellungen und aktiviert unter dem Entwicklermodus den SSH-Zugang.
Anschließend könnt ihr euch beispielsweise unter macOS oder Linux über das Terminal verbinden:
ssh BENUTZERNAME@IP-ADRESSE
Beispiel:
ssh daniel@192.168.178.52
Anschließend gebt ihr euer ZimaOS-Kennwort ein.
Hinweis: Bei der Eingabe des Kennworts werden im Terminal keine Zeichen oder Sternchen angezeigt. Das ist normal.
2. Papra-Verzeichnisse anlegen
Papra benötigt persistenten Speicher für seine Datenbank und Dokumente.
Auf meinem ZimaOS-System verwende ich dafür:
sudo mkdir -p /DATA/AppData/papra/app-data/db
sudo mkdir -p /DATA/AppData/papra/app-data/documents
Damit entsteht folgende Struktur:
/DATA/AppData/papra/
└── app-data/
├── db/
└── documents/
Der Ordner db wird für die Datenbank benötigt, während documents für die Dokumentdaten vorgesehen ist.
Sollte eure AppData-Struktur an einer anderen Stelle liegen, müsst ihr die Pfade entsprechend anpassen.
3. AUTH_SECRET für Papra erzeugen
Papra benötigt ein zufälliges AUTH_SECRET für die Authentifizierung.
ZimaOS ist als schlankes NAS-Betriebssystem aufgebaut. Auf meinem ZimaOS-System war das OpenSSL-Kommandozeilentool nicht vorhanden. Deshalb erzeugen wir das Secret direkt über /dev/urandom:
head -c 48 /dev/urandom | od -An -tx1 | tr -d ' \n'; echo
Anschließend erscheint eine lange zufällige Zeichenfolge.
Beispielsweise:
adaf7b448a87654ee4f864e5091047b77ba1110672af7f3cc6b2a0dd772e72e8397ab1d5a4202e4d
Wichtig: Das ist nur ein Beispiel. Verwendet nicht diesen Schlüssel, sondern erzeugt euer eigenes AUTH_SECRET.
Kopiert die erzeugte Zeichenfolge. Wir benötigen sie gleich für unsere YAML-Datei.
4. Docker-Compose-Datei erstellen
Jetzt erstellen wir die eigentliche Docker-Compose-Konfiguration.
Unter macOS könnt ihr dafür beispielsweise TextEdit verwenden.
Öffnet ein neues Dokument und wählt:
Format → In reinen Text umwandeln
Das ist wichtig, damit TextEdit keine formatierte Textdatei erzeugt.
Fügt anschließend folgende Konfiguration ein:
services:
papra:
image: ghcr.io/papra-hq/papra:latest
container_name: papra
hostname: papra
restart: unless-stopped
ports:
- "1221:1221"
environment:
TZ: Europe/Berlin
AUTH_SECRET: "HIER_DEIN_SECRET_EINFUEGEN"
APP_BASE_URL: "http://DEINE-ZIMAOS-IP:1221"
DOCUMENTS_OCR_LANGUAGES: "deu,eng"
volumes:
- /DATA/AppData/papra/app-data:/app/app-data
user: "1000:1000"
Jetzt müssen wir einige Werte anpassen.
5. AUTH_SECRET eintragen
Ersetzt:
AUTH_SECRET: "HIER_DEIN_SECRET_EINFUEGEN"
durch das zuvor erzeugte Secret.
Beispiel:
AUTH_SECRET: "EUER_EIGENES_LANGES_SECRET"
Verwendet für eure Installation unbedingt einen eigenen Schlüssel.
6. IP-Adresse von ZimaOS eintragen
Bei:
APP_BASE_URL: "http://DEINE-ZIMAOS-IP:1221"
tragt ihr die lokale IP-Adresse eures ZimaOS-Systems ein.
Beispielsweise:
APP_BASE_URL: "http://192.168.178.52:1221"
Papra wäre anschließend unter dieser Adresse erreichbar.
Warum Port 1221?
In unserer Konfiguration steht:
ports:
- "1221:1221"
Bei Docker gilt:
HOST-PORT : CONTAINER-PORT
Papra verwendet innerhalb des Containers Port 1221. Deshalb stellen wir diesen Port ebenfalls auf unserem ZimaOS-System bereit.
Sollte Port 1221 bei euch bereits von einer anderen Anwendung verwendet werden, könnt ihr beispielsweise Folgendes verwenden:
ports:
- "8122:1221"
Papra wäre dann über Port 8122 erreichbar.
Entsprechend müsstet ihr auch die APP_BASE_URL anpassen.
Was bedeutet restart: unless-stopped?
Die Zeile:
restart: unless-stopped
legt die Neustart-Richtlinie des Docker-Containers fest.
Dadurch wird Papra beispielsweise nach einem Neustart des ZimaOS-Servers automatisch wieder gestartet.
Stoppt ihr den Container dagegen bewusst selbst, bleibt er gestoppt.
Für einen dauerhaft laufenden Dienst auf einem NAS ist diese Einstellung sehr praktisch.
OCR für Deutsch und Englisch
Mit:
DOCUMENTS_OCR_LANGUAGES: "deu,eng"
legen wir die Sprachen für die OCR-Texterkennung fest.
Dabei steht:
deu = Deutsch
eng = Englisch
Wer andere Sprachen benötigt, muss die Konfiguration entsprechend anpassen.
Was bedeutet user: "1000:1000"?
Diese Zeile wird später noch wichtig:
user: "1000:1000"
Damit läuft Papra innerhalb des Containers mit:
UID 1000
GID 1000
also nicht einfach als root.
Das ist grundsätzlich sinnvoll, führt unter ZimaOS allerdings zu einer Besonderheit bei den Berechtigungen unseres Datenverzeichnisses.
Dazu kommen wir gleich.
7. YAML-Datei richtig speichern
Unter TextEdit speichert ihr die Datei beispielsweise als:
docker-compose.yml
Achtet darauf, dass TextEdit daraus nicht:
docker-compose.yml.txt
macht.
Falls macOS fragt, ob ihr .txt oder .yml verwenden möchtet, wählt .yml verwenden.
8. Papra in ZimaOS importieren
Jetzt wechseln wir zurück zu ZimaOS.
Öffnet:
App Store → Benutzerdefinierte App installieren → Import → Docker Compose
Wählt eure zuvor erstellte:
docker-compose.yml
aus.
ZimaOS liest anschließend die Compose-Konfiguration ein und übernimmt unter anderem Container, Port, Umgebungsvariablen und Volume.
Danach startet ihr die Installation.
Je nach System kann es einen Moment dauern, bis der Container vollständig eingerichtet wurde.
Wichtig: Berechtigungsproblem unter ZimaOS
Bei meiner Installation trat an dieser Stelle ein Problem auf.
Papra startete immer wieder neu und die Weboberfläche war nicht erreichbar.
Der Grund war nicht Papra selbst, sondern die Berechtigung des Datenverzeichnisses.
ZimaOS hatte die zuvor angelegten Verzeichnisse als:
root:root
angelegt.
Das bedeutet:
root : root
│ │
│ └── Gruppe
└───────── Benutzer/Eigentümer
Unser Papra-Container läuft dagegen aufgrund unserer Compose-Konfiguration als:
1000:1000
Papra konnte deshalb nicht in das Datenbankverzeichnis schreiben und seine SQLite-Datenbank nicht korrekt anlegen.
9. Berechtigungen korrigieren
Sollte Papra bei euch ebenfalls nicht starten, führt folgende Befehle aus:
sudo chown -R 1000:1000 /DATA/AppData/papra/app-data
sudo chmod -R u+rwX /DATA/AppData/papra/app-data
Anschließend starten wir den Container neu:
sudo docker restart papra
Mit chown ändern wir Eigentümer und Gruppe des Datenverzeichnisses auf die UID/GID, unter der Papra läuft.
Danach konnte Papra auf meinem ZimaOS-System seine Datenbank korrekt erstellen und starten.
10. Papra-Container kontrollieren
Ob der Container läuft, könnt ihr über das ZimaOS-Interface oder im Terminal überprüfen:
sudo docker ps
Sollte Papra weiterhin nicht starten, sind die Container-Logs besonders hilfreich:
sudo docker logs -f papra
Die Live-Anzeige beendet ihr mit:
CTRL + C
Solltet ihr einen Fehler rund um:
db.sqlite
bzw. das Öffnen der lokalen Datenbank sehen, überprüft insbesondere die oben beschriebenen Berechtigungen.
11. Papra öffnen
Wenn der Container läuft, öffnet ihr Papra über:
http://DEINE-ZIMAOS-IP:1221
Beispielsweise:
http://192.168.178.52:1221
Jetzt könnt ihr euch registrieren, Papra einrichten und mit dem Import eurer Dokumente beginnen.
Papra oder Paperless-ngx?
Papra verfolgt einen etwas anderen Ansatz als Paperless-ngx und wirkt deutlich schlanker und moderner.
Wer ein umfangreiches Dokumentenmanagement benötigt, sollte sich Paperless-ngx ebenfalls ansehen. Wer dagegen eine übersichtliche Self-Hosted-Lösung für seine Dokumente sucht, für den kann Papra eine interessante Alternative sein.
Ich werde Papra auf meinem ZimaOS-System weiter ausprobieren und bin gespannt, wie sich das Projekt entwickelt.
Video zur Anleitung
Das komplette Tutorial mit allen Schritten findet ihr auch auf meinem YouTube-Kanal:
▶ Papra auf ZimaOS installieren – die schlanke Paperless-ngx Alternative?
Weitere Videos rund um ZimaOS, Docker, NAS und Self-Hosting findet ihr ebenfalls auf meinem Kanal.
Hinweis: Die Anleitung basiert auf meiner eigenen Installation und Konfiguration. Je nach ZimaOS- und Papra-Version können sich einzelne Schritte oder Einstellungen ändern.