Anleitung
DocWeb läuft auf einer Synology NAS oder auf einem gewöhnlichen Webserver. Wähle den Weg, der zu deiner Umgebung passt – die Schritte für die OCR-Werkzeuge und die Einrichtung nach der Installation gelten für beide.
DocWeb ist bewusst genügsam: keine Framework-Abhängigkeit, kein Node.js, keine Build-Schritte. Du brauchst im Wesentlichen einen Webserver mit PHP und eine Datenbank.
pdo_mysql, mbstring, zip, zlib, jsonutf8mb4.env, documents/, inbox/, trash/)pdftotext, pdftoppm)shell_exec erlaubt sein, damit die Werkzeuge aufgerufen werden könnenzip-Erweiterung ausgewertet. Nur gescannte PDFs und Bilder bleiben dann ohne Volltext – Dateiname, Kategorie und Tags sind weiterhin durchsuchbar. Weg A
Der empfohlene Weg, wenn DocWeb im eigenen Netz auf einer Synology laufen soll. Der Zugriff ist dann typischerweise nur im lokalen Netz oder über ein VPN möglich.
Im Paket-Zentrum der Synology die Pakete Web Station, PHP 8.x und MariaDB 10 installieren. Danach unter Web Station → Webserver einen Webserver mit PHP 8 anlegen, falls noch keiner besteht.
Den kompletten Projektordner nach /volume1/web/docweb kopieren – also den Ordner, der public/, src/ und sql/ enthält. Die Ordner documents/, inbox/ und trash/ werden bei der Installation automatisch angelegt.
Über phpMyAdmin (oder per SSH) eine Datenbank samt Benutzer anlegen:
CREATE DATABASE docweb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'docweb'@'localhost' IDENTIFIED BY 'DEIN_PASSWORT';
GRANT ALL PRIVILEGES ON docweb.* TO 'docweb'@'localhost';
FLUSH PRIVILEGES;
.env anlegen
Im Projektordner (eine Ebene über public/) eine Datei .env anlegen:
DB_HOST=localhost
DB_PORT=3307
DB_NAME=docweb
DB_USER=docweb
DB_PASSWORD=DEIN_PASSWORT
3307, nicht auf 3306. Bei einer externen Datenbank entsprechend anpassen.
Im Browser http://NAS-ADRESSE/docweb/install.php aufrufen und das Formular ausfüllen. Der Assistent legt alle Tabellen an, schreibt die Zugangsdaten in die .env, erstellt die Ordner und richtet den ersten Admin-Account ein.
Alternativ per SSH im Projektordner: php install.php. Ohne --admin-pass wird dabei ein zufälliges Passwort erzeugt und einmalig ausgegeben.
install.php löschen.
Der Assistent verweigert den Dienst, sobald ein Benutzerkonto existiert – trotzdem gehört er nicht dauerhaft auf den Server. Unter Web Station → Skriptsprachen → PHP 8.x → Konfiguration:
shell_exec darf nicht in disable_functions stehen (sonst kein OCR)pdo_mysql, mbstring, zip, zlib, jsonFür gescannte Dokumente Tesseract und Poppler einrichten – die Anleitung steht unter OCR-Werkzeuge einrichten. Ohne diesen Schritt funktioniert DocWeb, nur ohne Volltext in Scans.
Unter http://NAS-ADRESSE/docweb/ anmelden und in der oberen Leiste Sync anklicken. Danach einmal Reindex ausführen, falls die OCR-Werkzeuge eingerichtet wurden – damit werden auch bereits vorhandene Scans erfasst.
Weg B
Für einen gemieteten Server, einen eigenen Rechner oder eine virtuelle Maschine. Damit wird DocWeb auch von unterwegs erreichbar – achte dann besonders auf die Sicherheitshinweise am Ende dieses Abschnitts.
Auf Debian oder Ubuntu genügen wenige Pakete:
sudo apt install apache2 mariadb-server php php-mysql php-mbstring \
php-zip php-gd php-curl libapache2-mod-php
sudo mysql_secure_installation
Für nginx statt Apache die gleichen PHP-Pakete mit php-fpm installieren.
Den kompletten Projektordner auf den Server kopieren. Lege ihn ausserhalb des öffentlich erreichbaren Verzeichnisses ab und richte die Domain auf den Unterordner public/ aus:
/var/www/docweb/ <- Projektordner (nicht öffentlich)├── public/ <- hierhin zeigt die Domain├── src/
├── sql/
├── documents/
├── inbox/
└── trash/
Bei Apache zum Beispiel:
<VirtualHost *:443>
ServerName docweb.example.ch
DocumentRoot /var/www/docweb/public
<Directory /var/www/docweb/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Alternativ kann der Projektordner selbst das Web-Verzeichnis sein – dann liegt die Anwendung unter /public/ und ist zum Beispiel über https://example.ch/public/ erreichbar. Auch diese Aufstellung wird unterstützt; die erste Variante ist aber sauberer.
sudo mysql -e "CREATE DATABASE docweb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'docweb'@'localhost' IDENTIFIED BY 'DEIN_PASSWORT';"
sudo mysql -e "GRANT ALL PRIVILEGES ON docweb.* TO 'docweb'@'localhost'; FLUSH PRIVILEGES;"
.env anlegen
Im Projektordner (eine Ebene über public/):
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=docweb
DB_USER=docweb
DB_PASSWORD=DEIN_PASSWORT
Der Webserver-Benutzer (bei Debian/Ubuntu www-data) muss im Projektordner schreiben dürfen – für die .env und die Ordner documents/, inbox/ und trash/:
sudo chown -R www-data:www-data /var/www/docweb
sudo find /var/www/docweb -type d -exec chmod 750 {} \;
sudo find /var/www/docweb -type f -exec chmod 640 {} \;
https://docweb.example.ch/install.php im Browser aufrufen und das Formular ausfüllen. Danach install.php löschen.
Nach der Anmeldung Sync in der oberen Leiste anklicken. Wie der Sync abläuft, hängt davon ab, ob auf dem Server ein Kommandozeilen-PHP startbar ist:
.env ein: PHP_CLI=/usr/bin/phpshell_exec oder popen gesperrt sind): DocWeb schaltet automatisch auf die Web-Variante um und arbeitet den Sync in kurzen Schritten über den Webserver ab. In der Statusleiste erscheint dann der Hinweis, das Fenster geöffnet zu lassen – der Vorgang läuft so lange weiter, wie die Seite offen ist. Wird sie geschlossen, macht der nächste Aufruf am letzten Stand weiter..env einen kleineren Wert setzen, zum Beispiel WEB_WORKER_BUDGET=10 (Sekunden pro Schritt). public/ zeigen lassen (siehe Schritt 2), damit src/, documents/ und die .env nicht über das Web erreichbar sindDOCS_ROOT in der .env setzen, zum Beispiel DOCS_ROOT=/srv/dokumenteVolltext in Scans
Diese Werkzeuge sind optional. Ohne sie findet die Suche keinen Text in eingescannten Seiten und Bildern. Mit ihnen wird der Inhalt erkannt und durchsuchbar.
Tesseract und Poppler kommen aus der Paketverwaltung, dazu die Sprachdaten:
sudo apt install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng \
tesseract-ocr-fra tesseract-ocr-ita poppler-utils
Danach prüfen, ob die Werkzeuge gefunden werden:
which pdftotext pdftoppm tesseract
tesseract --list-langs
Die früheren Pakete für Tesseract und Poppler sind für neuere DSM-Versionen nicht mehr verfügbar. Zwei Wege funktionieren: Entware (Binaries direkt auf dem Dateisystem, empfohlen) oder ein Docker-Container, der die Binaries über ein Verzeichnis bereitstellt.
Zuerst per SSH als admin anmelden und mit sudo -i zu root werden. SSH vorher unter Systemsteuerung → Terminal & SNMP aktivieren.
# Persistentes Verzeichnis anlegen (überlebt DSM-Updates)
mkdir -p /volume1/@Entware/opt
mount -o bind /volume1/@Entware/opt /opt
# Entware installieren – URL passend zur CPU-Architektur wählen
# x86_64 (z. B. RS1221RP):
wget -O - https://bin.entware.net/x64-k3.2/installer/generic.sh | /bin/sh
# ARMv8 (z. B. DS920+):
# wget -O - https://bin.entware.net/aarch64-k3.10/installer/generic.sh | /bin/sh
Danach die Pakete installieren:
/opt/bin/opkg update
/opt/bin/opkg install tesseract tesseract-data-eng poppler-utils
poppler-utils, nicht poppler. Ein deutsches Sprachpaket gibt es in Entware nicht – deu muss von Hand nachinstalliert werden. cd /opt/share/tessdata
wget -O deu.traineddata https://raw.githubusercontent.com/tesseract-ocr/tessdata/main/deu.traineddata
/opt/bin/tesseract --list-langs # "deu" muss erscheinen
Die Binaries liegen danach unter /opt/bin/. Werden sie nicht automatisch gefunden, in der .env eintragen:
PDFTOTEXT_PATH=/opt/bin/pdftotext
PDFTOPPM_PATH=/opt/bin/pdftoppm
TESSERACT_PATH=/opt/bin/tesseract
Damit die Werkzeuge einen Neustart der NAS überstehen, im Aufgabenplaner (Systemsteuerung → Aufgabenplaner → Ausgelöste Aufgabe, Auslöser „Beim Hochfahren", Benutzer root) das mitgelieferte Skript hinterlegen:
/bin/sh /volume1/web/docweb/scripts/entware_boot.sh
Das Skript hängt /opt wieder ein, installiert Entware und die Pakete bei Bedarf neu und sorgt für die OCR-Sprachdaten.
Ein Container stellt die Binaries über ein freigegebenes Verzeichnis bereit:
docker run -d --name ocr-tools \
-v /volume1/web/docweb/tools:/tools \
debian:bookworm-slim \
bash -c "apt-get update && apt-get install -y tesseract-ocr tesseract-ocr-deu \
tesseract-ocr-eng poppler-utils && \
cp /usr/bin/tesseract /usr/bin/pdftotext /usr/bin/pdftoppm /tools/ && sleep infinity"
Da die Dateien nicht im Suchpfad liegen, die Pfade in der .env setzen:
PDFTOTEXT_PATH=/volume1/web/docweb/tools/pdftotext
PDFTOPPM_PATH=/volume1/web/docweb/tools/pdftoppm
TESSERACT_PATH=/volume1/web/docweb/tools/tesseract
Nach der Anmeldung zeigt das Benutzermenü oben rechts an, ob die drei Werkzeuge gefunden wurden: pdftotext (PDF-Text), pdftoppm (Seiten rendern) und tesseract (OCR).
https://docweb.gregus.ch/.
DocWeb erstellt ein Backup aus Datenbank und Dokumenten als ZIP. Da die Dokumente ohnehin als normale Dateien vorliegen, genügt für den Bestand auch eine Sicherung des Dokumentenordners mit den üblichen Mitteln – für einen vollständigen Umzug gehören die Datenbank und die .env dazu.
Meist fehlt eine PHP-Erweiterung oder die Datenbank ist nicht erreichbar. In der PHP-Fehlerausgabe des Servers nachsehen (Apache: error.log, nginx: /var/log/nginx/error.log). Häufige Ursachen: pdo_mysql fehlt, falscher Port, falsches Passwort in der .env.
src/config.php fehlt
Dann liegt install.php nicht im Projektordner bzw. die Ebene darüber enthält kein src/. Lade den kompletten Projektordner hoch – nicht nur den Inhalt von public/. Der Installer erkennt beide Aufstellorte (Projektordner und public/) selbst.
Der Webserver-Benutzer darf im Projektordner nicht schreiben. Rechte gemäss Schritt 5 (Weg B) setzen. Auf der Synology prüfen, ob der Freigabeordner für den Web Station-Benutzer beschreibbar ist.
Die OCR-Werkzeuge fehlen oder sind nicht aufrufbar. Das Benutzermenü zeigt den Status der drei Werkzeuge. Fehlen alle drei, ist meist shell_exec in disable_functions gesperrt – oder die Pfade müssen in der .env gesetzt werden. Nach der Korrektur einmal Reindex ausführen.
Dafür wird die PHP-Erweiterung zip gebraucht. Aktivieren und den Reindex erneut starten.
Auf Servern ohne startbares Kommandozeilen-PHP übernimmt die Web-Variante automatisch (siehe Schritt 7 in Weg B). Erscheint die Meldung dennoch, prüfe:
.env einen kleineren Wert für WEB_WORKER_BUDGET setzen (z. B. 10)..env helfen kann? PHP_CLI=/usr/bin/phpIm Web-Betrieb führt der Browser die Arbeitsschritte aus. Wird die Seite geschlossen, pausiert der Vorgang – verloren geht nichts. Der nächste Aufruf setzt am letzten Stand fort.
Der Installer legt kein zweites Konto an, sobald eines existiert – das ist Absicht. Setze das Passwort direkt in der Datenbank zurück oder lege über phpMyAdmin einen neuen Benutzer mit der Rolle Admin an.