docs: .env.example + docker-compose + README komplett aktualisiert

- .env.example: OnlyOffice-Variablen (URL + JWT_SECRET) hinzugefuegt,
  FRONTEND_URL auf HTTPS-Beispiel geaendert
- docker-compose.yml: Nutzt env_file statt einzelner Variablen,
  alle Secrets kommen aus .env (eine Quelle der Wahrheit)
- README.md komplett ueberarbeitet:
  - Alle Features dokumentiert (Papierkorb, Share-Link-Typen,
    Drag&Drop, OnlyOffice, SFTP-Backup, Benachrichtigungen etc.)
  - Docker + nginx Reverse-Proxy Beispiel mit Let's Encrypt
  - OnlyOffice Setup-Anleitung (docker-compose + nginx + .env)
  - Alle Verwendungs-Abschnitte aktualisiert
  - Administration dokumentiert

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker 2026-04-11 21:27:13 +02:00
parent fca2bc2d47
commit 3185b2d41c
3 changed files with 144 additions and 28 deletions

View File

@ -24,7 +24,13 @@ HOST=0.0.0.0
PORT=5000
# Frontend URL (fuer CORS)
FRONTEND_URL=http://localhost:3010
FRONTEND_URL=https://cloud.example.com
# Max Upload-Groesse in MB
MAX_UPLOAD_SIZE_MB=500
# OnlyOffice Document Server (optional)
# Oeffentliche HTTPS-URL unter der OnlyOffice im Browser erreichbar ist
ONLYOFFICE_URL=
# Muss mit JWT_SECRET im OnlyOffice-Container uebereinstimmen
ONLYOFFICE_JWT_SECRET=

146
README.md
View File

@ -1,16 +1,18 @@
# Mini-Cloud
Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-Mail-Webclient, Office-Viewer und Passwort-Manager.
Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-Mail-Webclient, Office-Editor und Passwort-Manager.
## Features
- **Dateiverwaltung** - Upload/Download, Ordner, Berechtigungen, Share-Links (Passwort + Ablaufdatum)
- **Dateiverwaltung** - Upload/Download (Drag & Drop + Ordner-Upload), Berechtigungen, Share-Links (Lesen/Schreiben/Nur-Upload, Passwort, Ablaufdatum), Papierkorb, Ordner als ZIP downloaden
- **Kalender** - CalDAV-kompatibel (iOS, DAVx5, Thunderbird, Outlook), iCal-Export, Teilen mit Benutzern
- **Kontakte** - CardDAV-kompatibel, vCard-Export, Adressbuecher teilen
- **E-Mail-Webclient** - IMAP/SMTP-Proxy (kein eigener Mailserver), Multi-Account, Absender-Logik
- **Office-Viewer** - DOCX, XLSX, PPTX, PDF direkt im Browser anzeigen
- **Passwort-Manager** - AES-256-GCM clientseitig verschluesselt, TOTP, KeePass-Import, Ordner teilen
- **Benutzerverwaltung** - Rollen (Admin/User), Speicher-Quotas
- **Office-Editor** - DOCX, XLSX, PPTX bearbeiten mit OnlyOffice; PDF, Bilder, Text als Vorschau
- **Passwort-Manager** - AES-256-GCM clientseitig verschluesselt, TOTP, Passkeys, KeePass/Firefox/CSV-Import, Ordner teilen
- **Benutzerverwaltung** - Rollen (Admin/User), Speicher-Quotas, Einladungslinks, oeffentliche Registrierung an/aus
- **Backup** - Lokales ZIP-Backup, SFTP-Backup mit Scheduler + Versionierung, Einzeldatei-Restore
- **Benachrichtigungen** - System-Email bei Freigaben, Downloads, neuen Benutzern
- **Sync-API** - Delta-Sync fuer Desktop/Mobile-Clients
## Tech-Stack
@ -21,6 +23,7 @@ Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-M
| Frontend | Vue 3 / Vite / PrimeVue |
| Datenbank | SQLite (WAL-Modus) |
| Auth | JWT (Web-UI) + HTTP Basic Auth (CalDAV/CardDAV) |
| Office-Editor | OnlyOffice Document Server (optional) |
## Installation
@ -29,6 +32,7 @@ Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-M
- Python 3.11+
- Node.js 18+
- npm
- Docker (fuer Produktion)
### Entwicklungsumgebung
@ -80,22 +84,112 @@ Beim ersten Registrieren wird der Benutzer automatisch zum Admin.
```bash
# .env anlegen und Secrets eintragen
cp .env.example .env
# SECRET_KEY und JWT_SECRET_KEY generieren und eintragen:
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
# Starten
docker-compose up --build -d
# -> laeuft auf http://localhost:5000
```
Die Datenbank und hochgeladene Dateien liegen unter `./data/` (Bind Mount, keine Docker Volumes).
### Nginx Reverse-Proxy (Beispiel)
Die Datei `nginx.example.conf` enthaelt eine vollstaendige Beispielkonfiguration:
```nginx
# cloud.example.com -> Mini-Cloud (Port 5000)
server {
listen 443 ssl http2;
server_name cloud.example.com;
ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
Let's Encrypt Zertifikat erstellen:
```bash
certbot --nginx -d cloud.example.com
```
### OnlyOffice Document Server (optional)
Fuer die Bearbeitung von Word, Excel und PowerPoint Dateien direkt im Browser.
**1. docker-compose.yml - OnlyOffice-Service aktivieren:**
```yaml
# In docker-compose.yml auskommentieren:
onlyoffice:
image: onlyoffice/documentserver:latest
environment:
- JWT_ENABLED=true
- JWT_SECRET=${ONLYOFFICE_JWT_SECRET}
volumes:
- ./data/onlyoffice/logs:/var/log/onlyoffice
- ./data/onlyoffice/data:/var/www/onlyoffice/Data
restart: unless-stopped
```
**2. .env - OnlyOffice konfigurieren:**
```bash
ONLYOFFICE_URL=https://office.example.com
ONLYOFFICE_JWT_SECRET=ein-sicheres-secret-hier
```
**3. Nginx - Eigene Subdomain fuer OnlyOffice:**
```nginx
server {
listen 443 ssl http2;
server_name office.example.com;
ssl_certificate /etc/letsencrypt/live/office.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/office.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
```bash
certbot --nginx -d office.example.com
docker-compose up -d
```
**Ohne OnlyOffice** werden Office-Dateien in einer einfachen Vorschau angezeigt (nur Lesen). **Mit OnlyOffice** erhaelt man einen vollwertigen Editor (wie Google Docs).
## Verwendung
### Dateien
- Dateien per Drag-and-Drop oder Upload-Button hochladen
- Ordner erstellen, Dateien verschieben/umbenennen/loeschen
- Share-Links erstellen: optional mit Passwort und Ablaufdatum
- Share-Links funktionieren ohne Login fuer externe Empfaenger
- Ganze Ordner mit Unterordnern hochladen (Drag & Drop oder Ordner-Button)
- Ordner erstellen, Dateien verschieben/umbenennen
- Ordner als ZIP herunterladen
- Geloeschte Dateien landen im Papierkorb (wiederherstellen oder endgueltig loeschen)
- Share-Links erstellen mit drei Berechtigungsstufen:
- **Nur Lesen** - Download, Ordnerinhalt sehen
- **Lesen + Schreiben** - Download, Upload, Loeschen
- **Nur Upload** - Hochladen ohne Einblick (Briefkasten-Modus)
- Optional: Passwort und Ablaufdatum fuer Share-Links
- Dateien/Ordner mit anderen Benutzern teilen (Lesen/Schreiben/Admin)
- Gruenes Icon zeigt an welche Dateien bereits Freigaben haben
### Kalender
@ -118,24 +212,46 @@ Die Datenbank und hochgeladene Dateien liegen unter `./data/` (Bind Mount, keine
### E-Mail
- E-Mail-Konten unter Einstellungen hinzufuegen (IMAP/SMTP-Zugangsdaten)
- Admin kann E-Mail-Konten fuer andere Benutzer anlegen
- Kein eigener Mailserver noetig - verbindet sich mit externen Mailservern
- Bei keinem konfigurierten Konto wird der E-Mail-Bereich ausgeblendet
- Mehrere Konten: Ordner nach Konten gruppiert, Standard-Absender = aktives Konto
- Absender-Dropdown nur sichtbar bei mehr als einem Konto
### Office-Viewer
### Office-Dateien
- DOCX, XLSX, PPTX und PDF direkt im Browser anzeigen (nur Lesen)
- Bilder und Textdateien werden ebenfalls inline dargestellt
- Doppelklick oder Auge-Icon oeffnet die Vorschau
- **Mit OnlyOffice**: Vollwertiger Editor fuer DOCX, XLSX, PPTX (wie Google Docs)
- **Ohne OnlyOffice**: Einfache Vorschau (HTML/Tabelle/Folien), Text-Dateien bearbeitbar
- PDF wird inline angezeigt, Bilder mit Vorschau
### Passwort-Manager
- Alle Daten clientseitig mit AES-256-GCM verschluesselt (Zero Knowledge)
- TOTP-Codes direkt generieren
- Passwort-Generator integriert
- KeePass-Import (.kdbx) mit Ordnerstruktur
- Import aus: KeePass (.kdbx), Firefox (CSV), Chrome/Bitwarden/1Password (CSV)
- Ordner/Gruppen wie in KeePass
- Einzelne Passwoerter oder ganze Ordner mit anderen Benutzern teilen
### Backup & Restore
- **Lokales Backup**: ZIP-Download mit Datenbank + allen Dateien
- **SFTP-Backup**: Automatisch auf SFTP-Server sichern
- Mehrere Backup-Ziele moeglich
- Konfigurierbares Intervall (15 Min. bis woechentlich)
- Versionierung mit automatischem Aufraumen
- Versionen durchsuchen und Einzeldateien wiederherstellen
- **Restore**: ZIP hochladen (Chunked Upload fuer grosse Backups) oder direkt von SFTP
### Administration
- Benutzer anlegen, bearbeiten, deaktivieren, loeschen
- Benutzersuche
- E-Mail-Konten pro Benutzer verwalten
- Oeffentliche Registrierung an/aus
- Einladungslinks (funktionieren auch bei deaktivierter Registrierung)
- System-Email (SMTP) fuer Benachrichtigungen und Einladungen
## Projektstruktur
```
@ -143,7 +259,7 @@ backend/
app/
api/ # REST-Endpunkte
models/ # SQLAlchemy-Models
services/ # Business-Logik (Crypto, etc.)
services/ # Business-Logik (Crypto, SFTP, Email, Scheduler)
dav/ # CalDAV/CardDAV (Radicale-Vorbereitung)
wsgi.py # Einstiegspunkt

View File

@ -5,26 +5,20 @@ services:
- "5000:5000"
volumes:
- ./data:/app/data
environment:
- SECRET_KEY=${SECRET_KEY:-change-me-to-a-random-secret-key}
- JWT_SECRET_KEY=${JWT_SECRET_KEY:-change-me-to-another-random-secret-key}
- DATABASE_PATH=/app/data/minicloud.db
- UPLOAD_PATH=/app/data/files
- FRONTEND_URL=${FRONTEND_URL:-http://localhost:5000}
- MAX_UPLOAD_SIZE_MB=${MAX_UPLOAD_SIZE_MB:-500}
- ONLYOFFICE_URL=${ONLYOFFICE_URL:-}
env_file:
- .env
restart: unless-stopped
# Optional: OnlyOffice Document Server fuer Office-Bearbeitung
# Auskommentieren um DOCX/XLSX/PPTX bearbeiten zu koennen
# Auskommentieren um DOCX/XLSX/PPTX im Browser bearbeiten zu koennen
# Braucht eine eigene Subdomain mit HTTPS (z.B. office.example.com)
# Siehe nginx.example.conf und README.md fuer Setup-Anleitung
#
# onlyoffice:
# image: onlyoffice/documentserver:latest
# # Kein ports-Mapping noetig! Zugriff nur ueber nginx (HTTPS)
# # und intern im Docker-Netzwerk (minicloud -> onlyoffice)
# environment:
# - JWT_ENABLED=true
# - JWT_SECRET=${ONLYOFFICE_JWT_SECRET:-minicloud-onlyoffice-secret}
# - JWT_SECRET=${ONLYOFFICE_JWT_SECRET}
# volumes:
# - ./data/onlyoffice/logs:/var/log/onlyoffice
# - ./data/onlyoffice/data:/var/www/onlyoffice/Data