Passkey-Login analog zu werte-next: auf der Login-Seite "Mit Passkey anmelden", Verwaltung der eigenen Passkeys im neuen Tab Einstellungen. Das Passwort bleibt als Alternative bestehen. - lib/webauthn.ts, lib/passkeys.ts sowie API-Routen unter /api/passkey - proxy.ts: /api/passkey/authenticate ohne Session erreichbar - TabLayout: dritter Tab Einstellungen (Index-Tabs statt Route wie werte) - RP-Konfiguration ueber AUSGABEN_RP_*, da sich die .env auf dem Server mit anderen Apps teilt, die RP_ID/RP_ORIGIN bereits belegen - Eigene Tabelle ausgaben_passkeys aus demselben Grund: werte-next nutzt in der gemeinsamen Datenbank RXF bereits die Tabelle passkeys - eslint.config.mjs auf die Flat-Config von eslint-config-next umgestellt Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.8 KiB
Deployment Guide - Ausgaben-Next
Lokale Entwicklung
Voraussetzungen
- Node.js 22+
- MySQL 8+ (Docker container läuft bereits)
- npm oder yarn
Setup
- Dependencies installieren:
npm install
- Umgebungsvariablen konfigurieren:
cp .env.example .env
# Bearbeiten Sie .env mit Ihren Datenbankzugangsdaten
- Development Server starten:
npm run dev
Die Anwendung ist dann unter http://localhost:3000 erreichbar.
Production Deployment
Mit Docker (Empfohlen)
- Lokaler Build:
docker-compose -f docker-compose.local.yml build
docker-compose -f docker-compose.local.yml up -d
Die Anwendung läuft dann auf Port 3001 (konfigurierbar in docker-compose.local.yml).
- Logs prüfen:
docker logs ausgaben-next-app
Ohne Docker
- Production Build:
npm run build
- Production Server starten:
npm start
Datenbank
Schema erstellen
Falls die Tabelle Ausgaben noch nicht existiert:
mysql -u root -p RXF < create_table.sql
Das Script legt auch die Tabelle ausgaben_passkeys für die Passkey-Anmeldung an. Die
Anwendung erstellt diese Tabelle beim ersten Zugriff selbst — hat der DB-Benutzer
keine CREATE-Rechte, das SQL aus create_table.sql manuell ausführen.
Passkeys (WebAuthn) konfigurieren
Im Container erwartet die Anwendung RP_ID, RP_ORIGIN und RP_NAME. In der
Compose-Datei werden diese aus den app-eigenen Variablen AUSGABEN_RP_*
befüllt — mit den Produktionswerten als Default:
- RP_ID=${AUSGABEN_RP_ID:-ausgaben.fuerst-stuttgart.de}
- RP_ORIGIN=${AUSGABEN_RP_ORIGIN:-https://ausgaben.fuerst-stuttgart.de}
- RP_NAME=${AUSGABEN_RP_NAME:-Ausgaben-Log}
Warum eigene Namen: Auf dem Server (/opt/stacks/myapp/) laufen mehrere Apps im
selben Stack und teilen sich eine .env. Dort sind RP_ID/RP_ORIGIN bereits für
werte-next gesetzt. Würde diese App dieselben Namen lesen, bekäme sie werte's Host —
und die Passkey-Anmeldung schlüge fehl. Die Defaults oben greifen, solange in der
geteilten .env keine AUSGABEN_RP_* stehen; ein Eintrag dort überschreibt sie.
Wichtig: RP_ID muss exakt dem Hostnamen entsprechen (ohne https:// und ohne
Port), RP_ORIGIN der vollen URL. Passen die Werte nicht zur aufgerufenen Adresse,
schlägt die Passkey-Anmeldung fehl. Bereits registrierte Passkeys werden bei einer
Änderung von RP_ID ungültig. WebAuthn setzt HTTPS voraus (via Traefik).
Datenbank-Verbindung
Die Anwendung verwendet die gleiche MySQL-Datenbank wie die alte Ausgaben-Anwendung:
- Host: gitea-db (oder localhost für lokale Entwicklung)
- Database: RXF
- Table: Ausgaben
Die Zugangsdaten werden über Umgebungsvariablen in .env konfiguriert.
Umgebungsvariablen
Erforderliche Variablen in .env:
DB_HOST=gitea-db # oder localhost für lokale Entwicklung
DB_USER=root
DB_PASS=Ihr_Passwort
DB_NAME=RXF
Port-Konfiguration
- Development: Port 3000 (npm run dev)
- Production (lokal): Port 3000 (npm start)
- Docker (lokal): Port 3001 (gemappt auf internen Port 3000)
Ändern Sie den Port in docker-compose.local.yml falls nötig:
ports:
- "0.0.0.0:DEIN_PORT:3000"
Troubleshooting
Datenbankverbindung schlägt fehl
- Prüfen Sie die Umgebungsvariablen in
.env - Stellen Sie sicher, dass der MySQL-Container läuft:
docker ps | grep mysql - Falls Docker verwendet wird, prüfen Sie ob die Container im gleichen Netzwerk sind
Build-Fehler
-
Löschen Sie
.nextundnode_modules:rm -rf .next node_modules npm install npm run build -
Prüfen Sie die Node.js Version:
node --version # Sollte >= 22.x sein
Port bereits belegt
Ändern Sie den Port in docker-compose.local.yml oder verwenden Sie einen anderen Port:
PORT=3002 npm run dev
Monitoring
Logs ansehen
Docker:
docker logs -f ausgaben-next-app
Ohne Docker:
Logs werden in der Konsole angezeigt wo npm start läuft.
Updates
- Code aktualisieren:
git pull # falls Git verwendet wird
- Dependencies aktualisieren:
npm install
- Neu bauen und starten:
npm run build
# Dann entweder:
npm start
# oder:
docker-compose -f docker-compose.local.yml up -d --build
Backup
Datenbank
Die Datenbank sollte regelmäßig gesichert werden:
mysqldump -u root -p RXF Ausgaben > backup_$(date +%Y%m%d).sql
Application Files
Wichtige Dateien für Backup:
.env(Konfiguration)public/(falls custom Dateien hinzugefügt wurden)- Die Datenbank (siehe oben)
Security
- Niemals
.envins Git-Repository einchecken! - Verwenden Sie starke Datenbankpasswörter
- Halten Sie Dependencies aktuell:
npm audit npm update