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:
parent
fca2bc2d47
commit
3185b2d41c
|
|
@ -24,7 +24,13 @@ HOST=0.0.0.0
|
||||||
PORT=5000
|
PORT=5000
|
||||||
|
|
||||||
# Frontend URL (fuer CORS)
|
# Frontend URL (fuer CORS)
|
||||||
FRONTEND_URL=http://localhost:3010
|
FRONTEND_URL=https://cloud.example.com
|
||||||
|
|
||||||
# Max Upload-Groesse in MB
|
# Max Upload-Groesse in MB
|
||||||
MAX_UPLOAD_SIZE_MB=500
|
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
146
README.md
|
|
@ -1,16 +1,18 @@
|
||||||
# Mini-Cloud
|
# 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
|
## 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
|
- **Kalender** - CalDAV-kompatibel (iOS, DAVx5, Thunderbird, Outlook), iCal-Export, Teilen mit Benutzern
|
||||||
- **Kontakte** - CardDAV-kompatibel, vCard-Export, Adressbuecher teilen
|
- **Kontakte** - CardDAV-kompatibel, vCard-Export, Adressbuecher teilen
|
||||||
- **E-Mail-Webclient** - IMAP/SMTP-Proxy (kein eigener Mailserver), Multi-Account, Absender-Logik
|
- **E-Mail-Webclient** - IMAP/SMTP-Proxy (kein eigener Mailserver), Multi-Account, Absender-Logik
|
||||||
- **Office-Viewer** - DOCX, XLSX, PPTX, PDF direkt im Browser anzeigen
|
- **Office-Editor** - DOCX, XLSX, PPTX bearbeiten mit OnlyOffice; PDF, Bilder, Text als Vorschau
|
||||||
- **Passwort-Manager** - AES-256-GCM clientseitig verschluesselt, TOTP, KeePass-Import, Ordner teilen
|
- **Passwort-Manager** - AES-256-GCM clientseitig verschluesselt, TOTP, Passkeys, KeePass/Firefox/CSV-Import, Ordner teilen
|
||||||
- **Benutzerverwaltung** - Rollen (Admin/User), Speicher-Quotas
|
- **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
|
- **Sync-API** - Delta-Sync fuer Desktop/Mobile-Clients
|
||||||
|
|
||||||
## Tech-Stack
|
## Tech-Stack
|
||||||
|
|
@ -21,6 +23,7 @@ Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-M
|
||||||
| Frontend | Vue 3 / Vite / PrimeVue |
|
| Frontend | Vue 3 / Vite / PrimeVue |
|
||||||
| Datenbank | SQLite (WAL-Modus) |
|
| Datenbank | SQLite (WAL-Modus) |
|
||||||
| Auth | JWT (Web-UI) + HTTP Basic Auth (CalDAV/CardDAV) |
|
| Auth | JWT (Web-UI) + HTTP Basic Auth (CalDAV/CardDAV) |
|
||||||
|
| Office-Editor | OnlyOffice Document Server (optional) |
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
@ -29,6 +32,7 @@ Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-M
|
||||||
- Python 3.11+
|
- Python 3.11+
|
||||||
- Node.js 18+
|
- Node.js 18+
|
||||||
- npm
|
- npm
|
||||||
|
- Docker (fuer Produktion)
|
||||||
|
|
||||||
### Entwicklungsumgebung
|
### Entwicklungsumgebung
|
||||||
|
|
||||||
|
|
@ -80,22 +84,112 @@ Beim ersten Registrieren wird der Benutzer automatisch zum Admin.
|
||||||
```bash
|
```bash
|
||||||
# .env anlegen und Secrets eintragen
|
# .env anlegen und Secrets eintragen
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
|
# SECRET_KEY und JWT_SECRET_KEY generieren und eintragen:
|
||||||
|
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
|
||||||
|
|
||||||
# Starten
|
# Starten
|
||||||
docker-compose up --build -d
|
docker-compose up --build -d
|
||||||
# -> laeuft auf http://localhost:5000
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Datenbank und hochgeladene Dateien liegen unter `./data/` (Bind Mount, keine Docker Volumes).
|
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
|
## Verwendung
|
||||||
|
|
||||||
### Dateien
|
### Dateien
|
||||||
|
|
||||||
- Dateien per Drag-and-Drop oder Upload-Button hochladen
|
- Dateien per Drag-and-Drop oder Upload-Button hochladen
|
||||||
- Ordner erstellen, Dateien verschieben/umbenennen/loeschen
|
- Ganze Ordner mit Unterordnern hochladen (Drag & Drop oder Ordner-Button)
|
||||||
- Share-Links erstellen: optional mit Passwort und Ablaufdatum
|
- Ordner erstellen, Dateien verschieben/umbenennen
|
||||||
- Share-Links funktionieren ohne Login fuer externe Empfaenger
|
- 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
|
### Kalender
|
||||||
|
|
||||||
|
|
@ -118,24 +212,46 @@ Die Datenbank und hochgeladene Dateien liegen unter `./data/` (Bind Mount, keine
|
||||||
### E-Mail
|
### E-Mail
|
||||||
|
|
||||||
- E-Mail-Konten unter Einstellungen hinzufuegen (IMAP/SMTP-Zugangsdaten)
|
- 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
|
- Kein eigener Mailserver noetig - verbindet sich mit externen Mailservern
|
||||||
- Bei keinem konfigurierten Konto wird der E-Mail-Bereich ausgeblendet
|
- Bei keinem konfigurierten Konto wird der E-Mail-Bereich ausgeblendet
|
||||||
- Mehrere Konten: Ordner nach Konten gruppiert, Standard-Absender = aktives Konto
|
- 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)
|
- Doppelklick oder Auge-Icon oeffnet die Vorschau
|
||||||
- Bilder und Textdateien werden ebenfalls inline dargestellt
|
- **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
|
### Passwort-Manager
|
||||||
|
|
||||||
- Alle Daten clientseitig mit AES-256-GCM verschluesselt (Zero Knowledge)
|
- Alle Daten clientseitig mit AES-256-GCM verschluesselt (Zero Knowledge)
|
||||||
- TOTP-Codes direkt generieren
|
- TOTP-Codes direkt generieren
|
||||||
- Passwort-Generator integriert
|
- 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
|
- 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
|
## Projektstruktur
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -143,7 +259,7 @@ backend/
|
||||||
app/
|
app/
|
||||||
api/ # REST-Endpunkte
|
api/ # REST-Endpunkte
|
||||||
models/ # SQLAlchemy-Models
|
models/ # SQLAlchemy-Models
|
||||||
services/ # Business-Logik (Crypto, etc.)
|
services/ # Business-Logik (Crypto, SFTP, Email, Scheduler)
|
||||||
dav/ # CalDAV/CardDAV (Radicale-Vorbereitung)
|
dav/ # CalDAV/CardDAV (Radicale-Vorbereitung)
|
||||||
wsgi.py # Einstiegspunkt
|
wsgi.py # Einstiegspunkt
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,26 +5,20 @@ services:
|
||||||
- "5000:5000"
|
- "5000:5000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
environment:
|
env_file:
|
||||||
- SECRET_KEY=${SECRET_KEY:-change-me-to-a-random-secret-key}
|
- .env
|
||||||
- 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:-}
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# Optional: OnlyOffice Document Server fuer Office-Bearbeitung
|
# 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:
|
# onlyoffice:
|
||||||
# image: onlyoffice/documentserver:latest
|
# image: onlyoffice/documentserver:latest
|
||||||
# # Kein ports-Mapping noetig! Zugriff nur ueber nginx (HTTPS)
|
|
||||||
# # und intern im Docker-Netzwerk (minicloud -> onlyoffice)
|
|
||||||
# environment:
|
# environment:
|
||||||
# - JWT_ENABLED=true
|
# - JWT_ENABLED=true
|
||||||
# - JWT_SECRET=${ONLYOFFICE_JWT_SECRET:-minicloud-onlyoffice-secret}
|
# - JWT_SECRET=${ONLYOFFICE_JWT_SECRET}
|
||||||
# volumes:
|
# volumes:
|
||||||
# - ./data/onlyoffice/logs:/var/log/onlyoffice
|
# - ./data/onlyoffice/logs:/var/log/onlyoffice
|
||||||
# - ./data/onlyoffice/data:/var/www/onlyoffice/Data
|
# - ./data/onlyoffice/data:/var/www/onlyoffice/Data
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue