docker.dateiverwaltung/Source/README.md
data b196bdc7fe V 2.0.3 - PUID/PGID Support, ZUGFeRD-Fix
- PUID/PGID Unterstützung für Unraid/Docker hinzugefügt
- Entrypoint-Skript für Benutzer-Wechsel
- ZUGFeRD-Dateien werden jetzt direkt in Zielordner verschoben (kein extra zugferd/ Unterordner)
- Dokumentation aktualisiert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 18:33:39 +01:00

160 lines
4 KiB
Markdown
Executable file

# Dateiverwaltung v2.0.3
Dokumenten-Management-System für automatische Verarbeitung, Sortierung und Benennung von Dokumenten.
## Features
- **Mail-Abruf**: Automatischer Abruf von Attachments aus IMAP-Postfächern
- **Grobsortierung**: Dateien nach Typ verschieben (PDF, Bilder, ZUGFeRD, Signiert)
- **PDF-Verarbeitung**: Text-Extraktion und OCR für gescannte Dokumente
- **ZUGFeRD-Erkennung**: Automatische Erkennung von ZUGFeRD-Rechnungen
- **Regel-Engine**: Flexible Regeln für Erkennung und automatische Benennung
- **Zeitpläne**: Automatische Ausführung per Scheduler
## Deployment mit Portainer
### 1. Image bauen oder pullen
**Option A: Image aus tar laden**
```bash
docker load -i dateiverwaltung-image.tar
```
**Option B: Image selbst bauen**
```bash
docker build -t dateiverwaltung:latest .
```
### 2. Container in Portainer erstellen
Neuen Container erstellen mit folgenden Einstellungen:
**Image:** `dateiverwaltung:latest`
**Port Mapping:**
| Host | Container |
|------|-----------|
| 8080 | 8000 |
**Volumes:**
| Host | Container | Beschreibung |
|------|-----------|--------------|
| `/mnt/user/...` | `/mnt/user/...` | Zugriff auf NAS-Ordner |
**Environment Variables:**
| Variable | Beschreibung | Beispiel |
|----------|--------------|----------|
| `DATABASE_URL` | Datenbank-Verbindung (MariaDB/MySQL) | `mysql+pymysql://user:pass@host/db` |
| `TZ` | Zeitzone | `Europe/Berlin` |
| `PUID` | User-ID für Dateiberechtigungen | `1003` |
| `PGID` | Group-ID für Dateiberechtigungen | `100` |
**Wichtig für Unraid/NAS:** PUID und PGID sollten auf den Benutzer gesetzt werden, der Zugriff auf die gemounteten Ordner hat. So werden Dateien mit den richtigen Berechtigungen erstellt.
```bash
# Benutzer-ID herausfinden:
id <benutzername>
# Beispiel: uid=1003(deep) gid=100(users)
```
**Beispiel DATABASE_URL Formate:**
```
# MariaDB/MySQL
mysql+pymysql://benutzer:passwort@192.168.1.100:3306/dateiverwaltung
# SQLite (nur für Tests)
sqlite:///dateiverwaltung.db
```
### 3. Datenbank vorbereiten
Bei MariaDB/MySQL die Datenbank vorher erstellen:
```sql
CREATE DATABASE dateiverwaltung CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'dateiverwaltung'@'%' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON dateiverwaltung.* TO 'dateiverwaltung'@'%';
FLUSH PRIVILEGES;
```
Die Tabellen werden beim ersten Start automatisch erstellt.
### 4. Container starten
Nach dem Start ist die Web-Oberfläche erreichbar unter:
```
http://<server-ip>:8080
```
## Docker Compose (Alternative)
```yaml
version: '3.8'
services:
dateiverwaltung:
image: dateiverwaltung:latest
container_name: dateiverwaltung
restart: unless-stopped
ports:
- "8080:8000"
volumes:
- /mnt:/mnt
environment:
- TZ=Europe/Berlin
- DATABASE_URL=mysql+pymysql://user:pass@db-host/dateiverwaltung
```
## Konfiguration
Alle Einstellungen werden in der Datenbank gespeichert:
- **Postfächer**: IMAP-Server, Zugangsdaten, Filter
- **Quell-Ordner**: Pfade, Dateitypen, ZUGFeRD/Signiert-Behandlung
- **Sortier-Regeln**: Erkennungsmuster, Extraktion, Benennungsschema
- **Zeitpläne**: Automatische Ausführung
## Module
### Mail-Fetcher
Holt Attachments aus IMAP-Postfächern:
- Filter nach Dateitypen und Größe
- Nur ungelesene oder alle Mails
- Alle IMAP-Ordner durchsuchen
### Grobsortierung
Sortiert Dateien nach Typ:
- Konfigurierbare Dateitypen
- ZUGFeRD-Erkennung
- Signierte PDF-Erkennung
- Optional: Direkt verschieben ohne Regeln
### PDF-Processor
- Text-Extraktion mit pdfplumber/pypdf
- OCR mit ocrmypdf + Tesseract (deutsch)
- ZUGFeRD-Erkennung via factur-x
### Sortier-Regeln
- Keyword-basierte Erkennung
- Regex für Feldextraktion (Datum, Betrag, Nummer)
- Flexibles Benennungsschema
## Benennungsschema Beispiele
```
# Rechnungen
{datum} - {firma} - Rechnung {nummer}.pdf
-> 2026-02-01 - Amazon - Rechnung 123456.pdf
# Mit Betrag
{datum} - {firma} - {betrag} EUR.pdf
-> 2026-02-01 - Amazon - 49.99 EUR.pdf
```
## Systemanforderungen
- Docker oder Python 3.11+
- MariaDB/MySQL (empfohlen) oder SQLite
- Für OCR: tesseract-ocr, ocrmypdf