Neue Features: - 3-Panel Dateimanager (Ordnerbaum, Dateiliste, Vorschau) - Separates Vorschau-Fenster für zweiten Monitor - Resize-Handles für flexible Panel-Größen (horizontal & vertikal) - Vorschau-Panel ausblendbar wenn externes Fenster aktiv - Natürliche Sortierung (Sonderzeichen → Zahlen → Buchstaben) - PDF-Vorschau mit Fit-to-Page - Email-Attachment Abruf erweitert Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
Dateiverwaltung - Installation & Deployment
Version 1.1
Übersicht
Diese Anleitung beschreibt die Installation der Dateiverwaltung mit Docker und Portainer.
Neue Features in Version 1.1
- Dateimanager mit 3-Panel Layout (Ordnerbaum, Dateiliste, Vorschau)
- Separates Vorschau-Fenster - öffnet auf zweitem Monitor
- Resize-Handles für flexible Panel-Größen (auch im vertikalen Modus)
- Vorschau-Panel ausblendbar wenn externes Fenster aktiv
- Natürliche Sortierung (Sonderzeichen → Zahlen → Buchstaben)
- PDF-Vorschau mit Fit-to-Page (erste Seite komplett sichtbar)
1. Voraussetzungen
- Docker & Docker Compose installiert
- Portainer (optional, für Web-UI Verwaltung)
- Zugriff auf die Ordner, die verwaltet werden sollen
2. Image erstellen
Option A: tar.gz erstellen und in Portainer hochladen
-
Auf deinem Rechner - Archiv erstellen:
cd /pfad/zum/projekt/docker.dateiverwaltung tar -czvf dateiverwaltung.tar.gz * -
In Portainer:
- Images → Build image
- Name:
dateiverwaltung:latest - Build method: Upload
- Select file: Die erstellte
dateiverwaltung.tar.gzhochladen - Build the image klicken
-
Warten bis "Successfully built" erscheint
Option B: Auf dem Server bauen (einfacher)
# Projektordner erstellen
mkdir -p /opt/dateiverwaltung
cd /opt/dateiverwaltung
# Dateien kopieren (oder git clone)
# Alle Projektdateien hierhin kopieren
# Image bauen
docker build -t dateiverwaltung:latest .
Option C: Mit Docker Compose bauen
cd /opt/dateiverwaltung
docker compose build
Das Image heißt dann dockerdateiverwaltung-dateiverwaltung (oder je nach Ordnername).
3. Schnellstart mit Docker Compose
2.1 Repository klonen oder Dateien kopieren
git clone <repository-url> /opt/dateiverwaltung
cd /opt/dateiverwaltung
2.2 Umgebungsvariablen konfigurieren
Erstelle eine .env Datei:
cp .env.example .env
nano .env
2.3 Container starten
docker compose up -d
Die Anwendung ist dann unter http://localhost:8000 erreichbar.
4. Installation mit Portainer
4.1 Image bauen (falls noch nicht geschehen)
Methode 1: Direkt auf dem Server
cd /opt/dateiverwaltung
docker build -t dateiverwaltung:latest .
Methode 2: In Portainer
- Images → Build image
- Name:
dateiverwaltung:latest - Upload: Projektdateien als tar.gz hochladen
# Auf deinem PC/Server: cd /pfad/zum/projekt tar -czvf dateiverwaltung.tar.gz . # Diese Datei dann in Portainer hochladen - Build the image klicken
4.2 Stack erstellen
- Öffne Portainer → Stacks → Add Stack
- Name:
dateiverwaltung - Wähle Web editor und füge folgende Konfiguration ein:
services:
dateiverwaltung:
# WICHTIG: Entweder "image" ODER "build" verwenden, nicht beides!
# Option 1: Bereits gebautes Image verwenden
image: dateiverwaltung:latest
# Option 2: Image beim Deploy bauen (Projektdateien müssen auf Server liegen)
# build:
# context: /opt/dateiverwaltung
# dockerfile: Dockerfile
container_name: dateiverwaltung
restart: unless-stopped
ports:
- "${PORT:-8000}:8000"
volumes:
# Persistente Daten (Datenbank) - WICHTIG!
- ${DATA_PATH:-/opt/dateiverwaltung/data}:/app/data
# Quell-Ordner: Hier liegen die zu sortierenden Dateien
- ${INBOX_PATH:-/mnt/inbox}:/mnt/inbox
# Ziel-Ordner: Hierhin werden sortierte Dateien verschoben
- ${ARCHIV_PATH:-/mnt/archiv}:/mnt/archiv
# OCR-Backup Ordner (für Original-PDFs vor OCR)
- ${BACKUP_PATH:-/mnt/backup}:/mnt/backup
# Optional: Zusätzliche Ordner einbinden
# - /mnt/nas/dokumente:/mnt/dokumente
# - /mnt/scans:/mnt/scans
environment:
- TZ=${TIMEZONE:-Europe/Berlin}
- DATABASE_URL=sqlite:////app/data/dateiverwaltung.db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
4.4 Environment Variables in Portainer
Scrolle runter zu Environment variables und füge folgende Variablen hinzu:
| Variable | Beschreibung | Beispielwert |
|---|---|---|
PORT |
Port für Web-UI | 8000 |
TIMEZONE |
Zeitzone | Europe/Berlin |
DATA_PATH |
Pfad für Datenbank (persistent!) | /opt/dateiverwaltung/data |
INBOX_PATH |
Ordner mit unsortieren Dateien | /home/user/Dokumente/Inbox |
ARCHIV_PATH |
Zielordner für sortierte Dateien | /home/user/Dokumente/Archiv |
BACKUP_PATH |
Backup-Ordner für PDFs vor OCR | /home/user/Dokumente/Backup |
4.5 Deploy Stack
Klicke auf Deploy the stack.
5. Komplette Schritt-für-Schritt Anleitung (Portainer)
Schritt 1: Projektdateien auf Server kopieren
# Auf dem Server
mkdir -p /opt/dateiverwaltung
cd /opt/dateiverwaltung
# Projektdateien hierhin kopieren (z.B. per SCP, SFTP, Git)
# scp -r /lokaler/pfad/* user@server:/opt/dateiverwaltung/
Schritt 2: Image bauen
cd /opt/dateiverwaltung
docker build -t dateiverwaltung:latest .
Warte bis "Successfully built" erscheint.
Schritt 3: Datenordner erstellen
# Ordner für Datenbank erstellen
mkdir -p /opt/dateiverwaltung/data
# Ordner für Dateien (falls nicht vorhanden)
mkdir -p /mnt/inbox /mnt/archiv /mnt/backup
Schritt 4: Stack in Portainer erstellen
- Portainer öffnen → Stacks → Add Stack
- Name:
dateiverwaltung - Web editor → Diesen YAML-Code einfügen:
services:
dateiverwaltung:
image: dateiverwaltung:latest
container_name: dateiverwaltung
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- /opt/dateiverwaltung/data:/app/data
- /mnt/inbox:/mnt/inbox
- /mnt/archiv:/mnt/archiv
- /mnt/backup:/mnt/backup
environment:
- TZ=Europe/Berlin
- DATABASE_URL=sqlite:////app/data/dateiverwaltung.db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
- Deploy the stack klicken
Schritt 5: Anwendung öffnen
- URL:
http://<server-ip>:8000 - Dateimanager:
http://<server-ip>:8000/browser
6. Ordner-Struktur
Empfohlene Struktur auf dem Host:
/home/user/Dokumente/
├── Inbox/ # Unsortierte Dateien (Quell-Ordner)
│ ├── mail-anhänge/ # z.B. von Mail-Abruf
│ └── scans/ # z.B. vom Scanner
├── Archiv/ # Sortierte Dateien (Ziel-Ordner)
│ ├── rechnungen/
│ ├── verträge/
│ └── sonstiges/
└── Backup/ # Original-PDFs vor OCR
Im Container sichtbar als:
/mnt/
├── inbox/ → Host: /home/user/Dokumente/Inbox
├── archiv/ → Host: /home/user/Dokumente/Archiv
└── backup/ → Host: /home/user/Dokumente/Backup
7. Erstmalige Einrichtung nach Start
5.1 Web-UI öffnen
Öffne http://<server-ip>:8000
5.2 Quell-Ordner hinzufügen
- Klicke auf + Hinzufügen bei "Quell-Ordner"
- Konfiguriere:
- Name: z.B. "Mail-Inbox"
- Quell-Pfad:
/mnt/inbox(wie im Container gemountet) - Ziel-Ordner:
/mnt/archiv - Dateitypen: PDF, JPG, PNG, etc.
5.3 Regeln erstellen
Schnell-Regeln (Grob-Sortierung nach Typ):
- Klicke auf + Schnell-Regel
- Wähle z.B. "E-Rechnungen (ZUGFeRD)" → Unterordner:
e-rechnungen - Wähle "Bilder" → Unterordner:
bilder
Fein-Regeln (nach Inhalt):
- Klicke auf + Hinzufügen bei "Fein-Regeln"
- Konfiguriere Keywords und Dateinamen-Schema
5.4 OCR-Backup aktivieren (empfohlen)
- Aktiviere "Backup vor OCR-Einbettung erstellen"
- Wähle Backup-Ordner:
/mnt/backup
8. Persistente Daten
Diese Daten werden gespeichert:
| Pfad im Container | Inhalt | Wichtig? |
|---|---|---|
/app/data/dateiverwaltung.db |
SQLite-Datenbank mit allen Einstellungen | JA |
/app/data/ |
Logs und temporäre Dateien | Ja |
Backup der Einstellungen:
# Datenbank sichern
docker cp dateiverwaltung:/app/data/dateiverwaltung.db ./backup/
# Oder Volume-Pfad direkt sichern
cp /opt/dateiverwaltung/data/dateiverwaltung.db ./backup/
9. Beispiel: Komplette docker-compose.yml
version: '3.8'
services:
dateiverwaltung:
build: .
container_name: dateiverwaltung
restart: unless-stopped
ports:
- "8000:8000"
volumes:
# Datenbank (WICHTIG: Persistent!)
- ./data:/app/data
# === ANPASSEN: Deine Ordner ===
# Inbox: Hier landen unsortierte Dateien
- /home/benutzer/Dokumente/Inbox:/mnt/inbox
# Archiv: Hierhin werden Dateien sortiert
- /home/benutzer/Dokumente/Archiv:/mnt/archiv
# Backup: Original-PDFs vor OCR
- /home/benutzer/Dokumente/Backup:/mnt/backup
# NAS-Ordner (optional)
- /mnt/nas/scans:/mnt/scans
environment:
- TZ=Europe/Berlin
- DATABASE_URL=sqlite:////app/data/dateiverwaltung.db
10. Dateimanager (Dual-Pane Browser)
Die Anwendung enthält einen separaten Dateimanager unter /browser:
- URL:
http://<server-ip>:8000/browser - Features:
- Dual-Pane Layout (Ordner links, Vorschau rechts)
- Dateien umbenennen, verschieben, löschen
- PDF/Bild-Vorschau ohne Dateisperrung
- Kann auf separatem Monitor geöffnet werden
Tipp: Öffne den Link in einem neuen Fenster für Multi-Monitor-Setup.
11. Troubleshooting
Container startet nicht
# Logs prüfen
docker logs dateiverwaltung
# Container neu bauen
docker compose build --no-cache
docker compose up -d
Dateien können nicht gelesen/geschrieben werden
# Berechtigungen prüfen
ls -la /home/benutzer/Dokumente/Inbox/
# Container-User prüfen (läuft als root)
docker exec dateiverwaltung id
# Berechtigungen setzen
chmod -R 755 /home/benutzer/Dokumente/
Datenbank zurücksetzen
# Alle Einstellungen löschen
docker exec dateiverwaltung rm /app/data/dateiverwaltung.db
docker restart dateiverwaltung
12. Updates
# Neueste Version holen
git pull
# Container neu bauen und starten
docker compose build
docker compose up -d
13. Portainer Stack Template (Copy & Paste)
Für schnelles Deployment in Portainer, kopiere diesen Stack:
version: '3.8'
services:
dateiverwaltung:
build:
context: /opt/dateiverwaltung
container_name: dateiverwaltung
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- dateiverwaltung_data:/app/data
- /mnt/inbox:/mnt/inbox
- /mnt/archiv:/mnt/archiv
- /mnt/backup:/mnt/backup
environment:
- TZ=Europe/Berlin
- DATABASE_URL=sqlite:////app/data/dateiverwaltung.db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
dateiverwaltung_data:
Nach Deploy:
- Web-UI öffnen:
http://<ip>:8000 - Quell-Ordner hinzufügen:
/mnt/inbox→/mnt/archiv - Regeln erstellen
- Fertig!
Zusammenfassung der wichtigsten Pfade
| Was | Pfad im Container | Host-Pfad (anpassen!) |
|---|---|---|
| Datenbank | /app/data/ |
./data oder Volume |
| Inbox (Quelle) | /mnt/inbox |
/home/user/Inbox |
| Archiv (Ziel) | /mnt/archiv |
/home/user/Archiv |
| OCR-Backup | /mnt/backup |
/home/user/Backup |