diff --git a/.env.example b/.env.example index d6993a5..9bd0302 100644 --- a/.env.example +++ b/.env.example @@ -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= diff --git a/README.md b/README.md index c27a9cd..9e9a857 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml index eebcb70..019d7ab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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