Release 0.8.0: Cloud-Variante (Supabase, Multi-Studio, Realtime, Web-Deploy)
Rapport ist jetzt dual: lokal (wie bisher) ODER Cloud auf eigenem Supabase-Server. Beide Modi haben dieselben Funktionen, Cloud zusätzlich Multi-User + Live-Sync. Storage-Architektur - src/storage/adapter.js: einheitliche Promise-API, LocalStorage- und SupabaseAdapter - src/storage/migrations.js: applyMigrations als reine Funktion, für beide Backends - Konfig-driven: VITE_SUPABASE_URL im Production-Build → automatisch Cloud-Modus Postgres-Schema (supabase/migrations/0001–0010) - 29 Tabellen, multi-tenant via studio_id + Row-Level-Security - Audit-Spalten (created_by/updated_by/at) + Trigger - Seed-Trigger pro neuem Studio (Rollen, Templates, Absenz-Typen) - Realtime-Publication für Live-Sync - RPCs: ensure_profile, create_studio_with_admin (mit Personen-Sharing), list_studios, load_persons_for_studio, attach_user_to_studio Cloud-Features (App) - BackendChoice.jsx als Erst-Screen «Lokal oder Cloud» - CloudSetup.jsx: 3-Schritt-Wizard für Erst-Einrichtung - Login.jsx: Modus-Switcher + Server-URL + Studio-Dropdown + Passwort-Vergessen - ResetPassword.jsx: empfängt Mail-Link-Klick via PASSWORD_RECOVERY-Event - Realtime: Änderungen zwischen Browsern ohne Reload sichtbar - Settings → System: Cloud-Verbindung, Studio-Switcher, weiteres Studio anlegen - Settings → Team: Mitarbeiter via Email einladen (Admin-Aktion) - Personen-Sharing: bei neuem Studio Personen aus anderen Studios übernehmen - Reload-Resume: studio_id in sessionStorage, kein erneuter Login nötig Web-Deploy - deploy/docker-compose.yml + nginx.conf: dist/ via nginx-Container, Port 8080 - .env.production.example: Build-time Cloud-URL - DEPLOY.md: Anleitung für LAN-only und extern via Nginx Proxy Manager Doku - README.md: Cloud-Variante prominent erklärt - ARCHITECTURE.md: Storage-Adapter, Migrations, neue Views in Risiko-Tabelle - DEPLOY.md: Schritt-für-Schritt für Mac Mini + NPM Version-Bump auf 0.8.0 in package.json, src-tauri/tauri.conf.json, Cargo.toml. Changelog-Entry im App.jsx-Modal (Karim sieht ihn beim ersten Start). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
# Rapport-Web-App Deploy
|
||||
|
||||
> Wer kein Tauri installieren will, kann Rapport im Browser nutzen. Diese
|
||||
> Anleitung beschreibt, wie du die Web-Version auf dem Mac Mini hostest.
|
||||
|
||||
---
|
||||
|
||||
## Option 2 — Im LAN erreichbar (ohne SSL)
|
||||
|
||||
Ziel: jedes Gerät im Studio-Netz kann `http://<mac-mini.local>:8080` öffnen.
|
||||
|
||||
### Voraussetzungen
|
||||
|
||||
- Mac Mini hat OrbStack/Docker und Supabase wie in [README.md](README.md) eingerichtet.
|
||||
- `supabase start` läuft (Supabase auf Port 54321).
|
||||
- Der Mac Mini ist im LAN erreichbar (`mac-mini.local` per Bonjour oder feste IP).
|
||||
|
||||
### Schritt-für-Schritt
|
||||
|
||||
1. **Repo auf den Mac Mini kopieren** (falls noch nicht da).
|
||||
|
||||
2. **`.env.production` anlegen** (im Repo-Root):
|
||||
|
||||
```bash
|
||||
cp .env.production.example .env.production
|
||||
```
|
||||
|
||||
Dann den Anon-Key aus `supabase status` einsetzen und `VITE_SUPABASE_URL`
|
||||
auf die LAN-Adresse stellen, z.B. `http://mac-mini.local:54321`.
|
||||
|
||||
3. **Build:**
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Erzeugt `dist/` mit statischen Files (~500 kB).
|
||||
|
||||
4. **Static-Container starten:**
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
Liefert `dist/` auf Port `8080` aus.
|
||||
|
||||
5. **Test:** anderes Gerät im LAN öffnet `http://<mac-mini.local>:8080`
|
||||
im Browser. Login-Screen erscheint, Cloud-Modus ist bereits korrekt
|
||||
konfiguriert (Server-URL ist gebakene `.env.production`).
|
||||
|
||||
### Update auf neue Version
|
||||
|
||||
```bash
|
||||
git pull
|
||||
npm run build
|
||||
docker compose -f deploy/docker-compose.yml restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Option 3 — Auch extern erreichbar (mit SSL)
|
||||
|
||||
Zusätzlich zu Option 2: Nginx Proxy Manager (NPM) auf dem Mac Mini macht
|
||||
Domain-Routing und holt Let's-Encrypt-Zertifikate.
|
||||
|
||||
### Voraussetzungen
|
||||
|
||||
- NPM läuft bereits auf dem Mac Mini (typisch Port 81 für UI, 80/443 für
|
||||
Traffic).
|
||||
- DNS-Records `app.rapport.kgva.ch` und `api.rapport.kgva.ch` zeigen auf den
|
||||
Mac Mini (z.B. via Tailscale Funnel, DDNS oder feste IP).
|
||||
|
||||
### Schritt-für-Schritt
|
||||
|
||||
1. **In NPM-UI zwei Proxy-Hosts anlegen:**
|
||||
|
||||
| Domain | Forward zu | SSL |
|
||||
|---|---|---|
|
||||
| `app.rapport.kgva.ch` | `mac-mini-ip:8080` | Force HTTPS + Let's Encrypt |
|
||||
| `api.rapport.kgva.ch` | `mac-mini-ip:54321` | Force HTTPS + Let's Encrypt |
|
||||
|
||||
Beide mit «Block Common Exploits» und «Cache Assets» an. Für `api.*`
|
||||
zusätzlich Websocket-Support an (Realtime braucht WS).
|
||||
|
||||
2. **`.env.production` umstellen auf die externe URL:**
|
||||
|
||||
```env
|
||||
VITE_SUPABASE_URL=https://api.rapport.kgva.ch
|
||||
VITE_SUPABASE_ANON_KEY=<aus supabase status>
|
||||
```
|
||||
|
||||
3. **Supabase-Config anpassen** in `supabase/config.toml`:
|
||||
|
||||
```toml
|
||||
[api]
|
||||
external_url = "https://api.rapport.kgva.ch"
|
||||
|
||||
[auth]
|
||||
site_url = "https://app.rapport.kgva.ch"
|
||||
additional_redirect_urls = ["https://app.rapport.kgva.ch"]
|
||||
```
|
||||
|
||||
Dann `supabase stop && supabase start`, damit GoTrue die neuen URLs nutzt.
|
||||
|
||||
4. **Rebuild + restart:**
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
docker compose -f deploy/docker-compose.yml restart
|
||||
```
|
||||
|
||||
5. **Test:** von außen (Smartphone mit Mobile-Data) `https://app.rapport.kgva.ch`
|
||||
öffnen → Login funktioniert.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Other devices see "Login" without auto-filled Server-URL?**
|
||||
→ `.env.production` enthält nicht den richtigen `VITE_SUPABASE_URL`, oder das
|
||||
Build wurde vor der Änderung gemacht. `npm run build` neu ausführen.
|
||||
|
||||
**Realtime funktioniert nicht von extern?**
|
||||
→ NPM braucht «Websocket Support» an im Proxy-Host für `api.*`.
|
||||
|
||||
**Auth-Mails kommen nicht an?**
|
||||
→ Lokales Supabase nutzt Inbucket (Port 54324). Für Production brauchst du
|
||||
einen echten SMTP-Server in `config.toml`.
|
||||
|
||||
**Mac Mini wird neugestartet, Rapport-App weg?**
|
||||
→ `restart: unless-stopped` im docker-compose sorgt für Auto-Start. Plus:
|
||||
Supabase als LaunchAgent registrieren, damit `supabase start` beim Boot läuft.
|
||||
Reference in New Issue
Block a user