web/scripts/appwrite-setup.mjs legt Datenbank aircard, Tabelle cards (4 Spalten) und Bucket card-images idempotent per fetch an, wartet auf Spalten-Status available und meldet Abweichungen, ohne sie zu ändern (--check: nichts anlegen, Exit 1 bei Fehlendem/Abweichendem). docs/appwrite-console.md ist die Klickliste für Projekt, Plattformen, Auth, Dienste und API-Key. Tests laufen mit node --test gegen einen Fake-Appwrite; Vitest nimmt nur src/**/*.test.ts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
72 lines
3.3 KiB
Markdown
72 lines
3.3 KiB
Markdown
# Appwrite-Console: Projekt „AirCard“ einrichten
|
||
|
||
Klickliste für Kenso. Dauer: etwa 5 Minuten. Console: <https://appwrite.webklar.com/console>
|
||
|
||
Alles passiert in der bestehenden Organisation. Das Schema (Datenbank, Tabelle, Bucket) legt danach das Skript `web/scripts/appwrite-setup.mjs` an – dafür musst du nichts anklicken.
|
||
|
||
## 1. Projekt anlegen
|
||
|
||
1. In der Console anmelden und die bestehende Organisation öffnen.
|
||
2. **Create project** klicken.
|
||
3. Name: `AirCard`.
|
||
4. Beim Feld **Project ID** auf das Stift-Symbol (bzw. „Edit“) klicken und `aircard` eintragen. Die ID lässt sich später nicht mehr ändern; sie muss genau `aircard` heißen.
|
||
5. **Create** klicken.
|
||
|
||
## 2. Web-Plattformen eintragen
|
||
|
||
Projekt `AirCard` → **Overview** → **Integrations** → **Platforms** → **Add platform** → **Web**.
|
||
|
||
1. Name `AirCard Website`, Hostname `aircard-ios.org` → **Create**.
|
||
2. Noch einmal **Add platform** → **Web**: Name `Entwicklung`, Hostname `localhost` → **Create**.
|
||
|
||
## 3. Auth-Einstellungen
|
||
|
||
Linke Leiste → **Auth** → **Settings**.
|
||
|
||
1. Bei **Auth methods** nur **Email/Password** eingeschaltet lassen. Ausschalten: **Magic URL**, **Email OTP**, **Phone**, **Anonymous**, **JWT** (steht dort auch **Invites**: ebenfalls aus).
|
||
2. **Session duration**: `30` Tage → **Update**.
|
||
3. **Max sessions** (Sitzungen pro Nutzer): `5` → **Update**.
|
||
4. **Limit** (Nutzerlimit): `2000` → **Update**.
|
||
5. **Password dictionary**: einschalten.
|
||
|
||
Keine E-Mail-Bestätigung nötig, Mindestlänge 8 Zeichen ist Standard – dafür ist nichts einzustellen. Die „Passwort vergessen“-Mail geht über den globalen Server-SMTP (Absender WEBklar), auch dafür ist nichts einzustellen.
|
||
|
||
## 4. Nicht benötigte Dienste abschalten
|
||
|
||
Linke Leiste → **Settings** → Reiter **Services**.
|
||
|
||
1. Ausschalten: **Functions**, **Sites**, **Messaging**, **Teams**, **GraphQL**.
|
||
2. Alles andere (Account, Avatars, Databases, Locale, Storage …) bleibt an.
|
||
|
||
## 5. API-Key `aircard-provision` anlegen
|
||
|
||
Dieser Key gehört nur dem Setup-Skript. Die Website selbst braucht ihn nicht.
|
||
|
||
1. **Overview** → **Integrations** → **API keys** → **Create API key**.
|
||
2. Name: `aircard-provision`. Ablauf (Expiration): **Never**.
|
||
3. Unter **Scopes** genau diese acht ankreuzen (Gruppe Database bzw. Storage):
|
||
- `databases.read` und `databases.write`
|
||
- `tables.read` und `tables.write`
|
||
- `columns.read` und `columns.write`
|
||
- `buckets.read` und `buckets.write`
|
||
4. **Create** klicken.
|
||
5. Auf der Seite des neuen Keys den **Secret**-Wert kopieren (Auge-Symbol zum Einblenden, dann kopieren).
|
||
|
||
## 6. Key auf dem Server eintragen
|
||
|
||
Der Key gehört in die Datei `/home/webklar/apps/.env`, nirgendwo sonst.
|
||
|
||
1. Auf dem Server die Datei öffnen, z. B. `nano /home/webklar/apps/.env`.
|
||
2. Ans Ende springen und eine neue Zeile anfügen, ohne Anführungszeichen und ohne Leerzeichen um das `=`:
|
||
|
||
```
|
||
AIRCARD_APPWRITE_API_KEY=<hier den kopierten Secret-Wert einfügen>
|
||
```
|
||
|
||
3. Speichern (in `nano`: Strg+O, Enter, Strg+X). Andere Zeilen nicht verändern.
|
||
4. Den Key **nicht im Chat teilen**, nicht in Screenshots zeigen und nirgends einchecken. Claude liest ihn nie selbst, das Skript bekommt ihn über `node --env-file=/home/webklar/apps/.env`.
|
||
|
||
## 7. Bescheid geben
|
||
|
||
Schreib Claude „Console fertig“. Danach legt Claude Datenbank `aircard`, Tabelle `cards` und Bucket `card-images` mit dem Skript an und prüft sie.
|