Anleitung

Installation

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.

1. Voraussetzungen

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.

Zwingend

  • PHP 8.x (getestet mit 8.2) mit den Erweiterungen pdo_mysql, mbstring, zip, zlib, json
  • MariaDB 10 (oder MySQL mit gleichem Funktionsumfang), Zeichensatz utf8mb4
  • Apache oder nginx – oder auf der Synology die Web Station
  • Schreibrechte des Webserver-Benutzers im Projektordner (für .env, documents/, inbox/, trash/)

Optional – für die Volltextsuche gescannter Dokumente

  • Tesseract (OCR für gescannte Seiten und Bilder)
  • Poppler (pdftotext, pdftoppm)
  • Auf dem Server muss shell_exec erlaubt sein, damit die Werkzeuge aufgerufen werden können
Ohne diese Werkzeuge funktioniert DocWeb trotzdem. Der eingebettete Text von PDFs wird auch ohne Poppler gelesen (reiner PHP-Fallback), und Office-Dateien werden über die zip-Erweiterung ausgewertet. Nur gescannte PDFs und Bilder bleiben dann ohne Volltext – Dateiname, Kategorie und Tags sind weiterhin durchsuchbar.
Platzbedarf: DocWeb speichert die Dokumente selbst nicht doppelt. Es fallen die Dokumente, ein Text-Cache (Suchtindex) und die Datenbank an. Der Text-Cache braucht je nach Bestand zusätzlichen Platz.

Weg A

2. Synology NAS (DSM, Web Station)

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.

  1. Web Station, PHP 8 und MariaDB installieren

    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.

  2. App-Dateien ins Web-Verzeichnis legen

    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.

  3. Datenbank anlegen

    Ü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;
  4. Konfigurationsdatei .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
    Port: Das Synology-MariaDB-Paket hört standardmässig auf Port 3307, nicht auf 3306. Bei einer externen Datenbank entsprechend anpassen.
  5. Installation ausführen

    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.

    Danach install.php löschen. Der Assistent verweigert den Dienst, sobald ein Benutzerkonto existiert – trotzdem gehört er nicht dauerhaft auf den Server.
  6. PHP-Einstellungen prüfen

    Unter Web Station → Skriptsprachen → PHP 8.x → Konfiguration:

    • shell_exec darf nicht in disable_functions stehen (sonst kein OCR)
    • Erweiterungen aktivieren: pdo_mysql, mbstring, zip, zlib, json
  7. OCR-Werkzeuge installieren (optional)

    Für gescannte Dokumente Tesseract und Poppler einrichten – die Anleitung steht unter OCR-Werkzeuge einrichten. Ohne diesen Schritt funktioniert DocWeb, nur ohne Volltext in Scans.

  8. Anmelden und Sync ausführen

    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.

Reihenfolge bei bestehendem Bestand: Erst die Dokumente in den Dokumentenordner legen, dann Sync ausführen. Bei sehr vielen Dateien dauert der erste Durchlauf entsprechend lange – er läuft im Hintergrund mit Fortschrittsanzeige weiter.

Weg B

3. Standard-Webserver (Apache oder nginx)

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.

  1. PHP und Datenbank installieren

    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.

  2. Projektordner hochladen

    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/
    Das ist die empfohlene Aufstellung. Damit liegen Quellcode, Konfiguration und Dokumente ausserhalb des Webs und können nicht direkt heruntergeladen werden.

    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.

  3. Datenbank anlegen

    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;"
  4. Konfigurationsdatei .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
  5. Dateirechte setzen

    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 {} \;
  6. Installation ausführen

    https://docweb.example.ch/install.php im Browser aufrufen und das Formular ausfüllen. Danach install.php löschen.

    Kein SSH-Zugang? Der Assistent arbeitet vollständig im Browser – du brauchst kein Kommandozeilen-Werkzeug. Auch der laufende Betrieb kommt ohne aus (siehe nächster Schritt).
  7. Ersten Sync ausführen

    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:

    • Mit CLI-PHP: Der Sync läuft als Hintergrundprozess. Läuft er zuverlässig, ist nichts weiter zu tun. Falls dein Server das PHP-Binary an einem ungewöhnlichen Ort hat, trage den Pfad in der .env ein: PHP_CLI=/usr/bin/php
    • Ohne CLI-PHP (typisch bei Shared Hosting, wenn shell_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.
    Schrittlänge anpassen: Bricht die Web-Variante mit einem Zeitüberschreitungsfehler ab, in der .env einen kleineren Wert setzen, zum Beispiel WEB_WORKER_BUDGET=10 (Sekunden pro Schritt).
  8. Sicherheit bei öffentlicher Erreichbarkeit

    • HTTPS verwenden – mit Let's Encrypt oder einem eigenen Zertifikat
    • Domain auf public/ zeigen lassen (siehe Schritt 2), damit src/, documents/ und die .env nicht über das Web erreichbar sind
    • Den Dokumentenordner auf Wunsch ausserhalb des Projektordners ablegen – dafür DOCS_ROOT in der .env setzen, zum Beispiel DOCS_ROOT=/srv/dokumente
    • Für die Benutzerkonten die Zwei-Faktor-Anmeldung aktivieren
    • Regelmässige Backups einrichten (DocWeb erzeugt ein ZIP aus Datenbank und Dokumenten)

Volltext in Scans

4. OCR-Werkzeuge einrichten

Diese Werkzeuge sind optional. Ohne sie findet die Suche keinen Text in eingescannten Seiten und Bildern. Mit ihnen wird der Inhalt erkannt und durchsuchbar.

Auf einem Standard-Webserver

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

Auf einer Synology NAS

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.

Variante 1: Entware (empfohlen)

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
Wichtig: Das Paket heisst 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.

Variante 2: Docker-Container

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

Status prüfen

Nach der Anmeldung zeigt das Benutzermenü oben rechts an, ob die drei Werkzeuge gefunden wurden: pdftotext (PDF-Text), pdftoppm (Seiten rendern) und tesseract (OCR).

Bereits vorhandene Scans: Nach der Einrichtung einmal Reindex in der oberen Leiste ausführen. Erst damit wird der Volltext aller bestehenden Dokumente neu aufgebaut.

5. Nach der Installation

Erste Schritte

  • Anmelden: Über Anmelden oder direkt unter https://docweb.gregus.ch/.
  • Passwort ändern: Das beim Einrichten vergebene Admin-Passwort nach der ersten Anmeldung ändern.
  • Weitere Benutzer anlegen: Rollen Admin, Editor und Lesen steuern, wer Dokumente sehen und bearbeiten darf.
  • Zwei-Faktor-Anmeldung: Für Konten mit Zugriff von unterwegs empfehlenswert.
  • Dokumentenordner prüfen: Unter Einstellungen → Datenbank den Speicherort kontrollieren – er lässt sich auch nachträglich ändern, der nächste Sync übernimmt den neuen Ort.
  • Sync ausführen: Liest den Dokumentenordner ein und verarbeitet nur neue, geänderte und entfernte Dateien.
  • Reindex ausführen: Einmalig nach der Einrichtung von Tesseract und Poppler.

Dokumente in den Bestand bringen

  • Direkt in den Ordner: Dateien per Dateiexplorer, SMB oder Cloud-Sync in den Dokumentenordner legen und danach Sync ausführen. Die Ordnerstruktur wird zu den Kategorien.
  • Über die Inbox: Neue Scans landen zuerst in der Inbox, werden dort geprüft, gedreht und umbenannt und anschliessend mit Tags in eine Kategorie gelegt – fehlt die passende Kategorie, lässt sie sich beim Ablegen direkt anlegen.
  • Massenscan: Ein ganzer Stapel mit Trennblättern wird in einem Durchgang erfasst und automatisch in einzelne PDFs aufgeteilt.
  • Mail-Archivierung: E-Mails per IMAP oder POP3 abholen und als PDF ablegen.
  • Über die iOS-App: Dokumente mit der Kamera erfassen und direkt ablegen.

Backup

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.

6. Wenn etwas nicht klappt

„Der Server antwortet nicht" oder eine leere Seite

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.

Die Installation meldet, dass 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.

Vor „Ordner" oder „.env" erscheint eine rote Zeile

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.

Nach dem Sync fehlt der Volltext in Scans

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.

Word-, Excel- und PowerPoint-Dateien lassen sich nicht durchsuchen

Dafür wird die PHP-Erweiterung zip gebraucht. Aktivieren und den Reindex erneut starten.

„Sync konnte nicht gestartet werden" bzw. der Vorgang bleibt stehen

Auf Servern ohne startbares Kommandozeilen-PHP übernimmt die Web-Variante automatisch (siehe Schritt 7 in Weg B). Erscheint die Meldung dennoch, prüfe:

  • Ist im Browser-Fenster JavaScript aktiv? Die Steuerung läuft über den Browser.
  • Bricht der Lauf nach einiger Zeit ab, in der .env einen kleineren Wert für WEB_WORKER_BUDGET setzen (z. B. 10).
  • Gibt es einen Kommandozeilen-Pfad, der in der .env helfen kann? PHP_CLI=/usr/bin/php

Der Lauf bricht beim Öffnen anderer Seiten ab

Im 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.

Ich habe das Admin-Passwort vergessen

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.