docker.dateiverwaltung/INSTALLATION.md
data 21e1ffe9e2 Version 1.1: Dateimanager mit 3-Panel Layout
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>
2026-02-02 12:51:40 +01:00

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

  1. Auf deinem Rechner - Archiv erstellen:

    cd /pfad/zum/projekt/docker.dateiverwaltung
    tar -czvf dateiverwaltung.tar.gz *
    
  2. In Portainer:

    • ImagesBuild image
    • Name: dateiverwaltung:latest
    • Build method: Upload
    • Select file: Die erstellte dateiverwaltung.tar.gz hochladen
    • Build the image klicken
  3. 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

  1. ImagesBuild image
  2. Name: dateiverwaltung:latest
  3. 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
    
  4. Build the image klicken

4.2 Stack erstellen

  1. Öffne Portainer → StacksAdd Stack
  2. Name: dateiverwaltung
  3. 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

  1. Portainer öffnen → StacksAdd Stack
  2. Name: dateiverwaltung
  3. 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
  1. 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

  1. Klicke auf + Hinzufügen bei "Quell-Ordner"
  2. 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):

  1. Klicke auf + Schnell-Regel
  2. Wähle z.B. "E-Rechnungen (ZUGFeRD)" → Unterordner: e-rechnungen
  3. Wähle "Bilder" → Unterordner: bilder

Fein-Regeln (nach Inhalt):

  1. Klicke auf + Hinzufügen bei "Fein-Regeln"
  2. Konfiguriere Keywords und Dateinamen-Schema

5.4 OCR-Backup aktivieren (empfohlen)

  1. Aktiviere "Backup vor OCR-Einbettung erstellen"
  2. 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:

  1. Web-UI öffnen: http://<ip>:8000
  2. Quell-Ordner hinzufügen: /mnt/inbox/mnt/archiv
  3. Regeln erstellen
  4. 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