Vite-Proxy für lokale Appwrite-Entwicklung

Leitet /v1 an ticket.webklar.com weiter und dokumentiert .env.local,
damit Session-Cookies auf localhost wie auf dem Server funktionieren.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Webklar Deploy
2026-05-22 18:23:37 +00:00
parent 4f4de7f290
commit d2e7088146
3 changed files with 88 additions and 3 deletions

14
.env.example Normal file
View File

@@ -0,0 +1,14 @@
# Kopieren nach .env.local (wird nicht von Git versioniert):
# cp .env.example .env.local
#
# Lokal mit Vite-Proxy (empfohlen <20> Session-Cookies wie auf dem Server):
VITE_APPWRITE_ENDPOINT=http://localhost:5173/v1
VITE_APPWRITE_PROJECT_ID=6a1058610003c5a13a05
VITE_APPWRITE_DATABASE_ID=woms-database
VITE_APPWRITE_BUCKET_ID=woms-attachments
# Optional: anderes Proxy-Ziel (Standard: https://ticket.webklar.com)
# VITE_APPWRITE_PROXY_TARGET=https://ticket.webklar.com
# Produktion / Build (ohne Vite-Proxy):
# VITE_APPWRITE_ENDPOINT=https://ticket.webklar.com/v1

55
LOCAL_DEV.md Normal file
View File

@@ -0,0 +1,55 @@
# Lokale Entwicklung (Appwrite)
## Warum funktioniert es auf dem Server, aber nicht mit `npm run dev`?
| | Server (`ticket.webklar.com`) | Lokal (`localhost:5173`) |
|---|---|---|
| App-URL | `https://ticket.webklar.com` | `http://localhost:5173` |
| API-URL | `https://ticket.webklar.com/v1` (nginx-Proxy) | oft `https://ticket.webklar.com/v1` direkt |
| **Gleiche Origin?** | Ja | **Nein** (Cross-Origin) |
| Session-Cookie | `domain=.ticket.webklar.com` | Browser speichert Cookie **nicht** f<>r localhost |
Auf dem Server leitet nginx `/v1/` an Appwrite weiter und schreibt Cookies auf `ticket.webklar.com` um. Die React-App und die API sind **dieselbe Site** <20> Login funktioniert.
Lokal ruft der Browser die API auf einer **anderen Domain** auf. Appwrite setzt Cookies f<>r `.ticket.webklar.com`. Die werden bei Requests von `localhost:5173` **nicht mitgeschickt** ? `guests missing scopes`, Login scheint tot.
CORS f<>r `http://localhost:5173` ist auf dem Server erlaubt <20> das reicht allein nicht f<>r HttpOnly-Session-Cookies.
## L<>sung: Vite-Proxy + `.env.local`
1. Datei anlegen (nicht in Git):
```bash
cp .env.example .env.local
```
2. In `.env.local` muss stehen:
```env
VITE_APPWRITE_ENDPOINT=http://localhost:5173/v1
VITE_APPWRITE_PROJECT_ID=6a1058610003c5a13a05
VITE_APPWRITE_DATABASE_ID=woms-database
VITE_APPWRITE_BUCKET_ID=woms-attachments
```
3. Dev-Server starten:
```bash
npm install
npm run dev
```
`vite.config.js` leitet `/v1` an `https://ticket.webklar.com` weiter und schreibt Cookie-Domains auf `localhost` um <20> Verhalten wie nginx auf dem Server.
## Checkliste bei Problemen
- [ ] `.env.local` existiert (`.env` allein reicht; Vite l<>dt `.env.local` mit h<>herer Priorit<69>t)
- [ ] Endpoint ist `http://localhost:5173/v1`, **nicht** `https://appwrite.webklar.com/v1` (altes Projekt)
- [ ] Nach Login: DevTools ? Application ? Cookies ? `localhost` ? `a_session_6a1058610003c5a13a05`
- [ ] Appwrite Console ? Projekt **Ticket-System** ? Platforms ? `localhost` eingetragen
## Git / Deploy
- `.env` und `.env.local` sind in `.gitignore` <20> jeder Entwickler braucht eigene `.env.local`
- Server-Build nutzt Container-Env (`VITE_APPWRITE_ENDPOINT=https://ticket.webklar.com/v1`)
- Push nach Gitea deployt nur den **Frontend-Code**, nicht deine lokale `.env.local`

View File

@@ -1,6 +1,22 @@
import { defineConfig } from 'vite' import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react' import react from '@vitejs/plugin-react'
export default defineConfig({ export default defineConfig(({ mode }) => {
plugins: [react()], const env = loadEnv(mode, process.cwd(), '')
const apiTarget = env.VITE_APPWRITE_PROXY_TARGET || 'https://ticket.webklar.com'
return {
plugins: [react()],
server: {
proxy: {
// Lokal: Appwrite über gleiche Origin wie die App (wie nginx auf dem Server)
'/v1': {
target: apiTarget,
changeOrigin: true,
secure: true,
cookieDomainRewrite: 'localhost',
},
},
},
}
}) })