v1.3: Serverseitige Datenbank (PostgreSQL + Node-API) ersetzt localStorage

- server/: Express-API (Auth, Bootstrap, Tickets, Threads, Benutzerverwaltung, Codes)
  mit pg-Schema (11 Tabellen), idempotem Seed (50 Wohnungen, 552 Buchungen)
- mp-db (PostgreSQL 16, Volume mp_pgdata) + mp-api im Compose-Stack,
  nginx proxiet /api/ an mp-api; deploy.sh baut API-Image auf dem Server
- Frontend: Store laedt /api/bootstrap, Schreibzugriff async, kein localStorage
  mehr (ausser Theme), Ladebildschirm beim Session-Check, vite-Proxy fuer Dev
- Rollenrechte serverseitig: Mieter nur eigene Wohnung (getestet, 403-Verweis)
- Mail-Benachrichtigungen komplett serverseitig (server/src/mail.js)
- beispieldaten.py schreibt server/seed/generated.json; Verwaltungs-Mail = axel@hocks.eu
- E2E live verifiziert: Login, Scoping, Ticket + Zustellung (status=sent),
  Registrierung, Codes; Testdaten bereinigt; Doku nachgefuehrt
This commit is contained in:
2026-10-02 12:54:44 +02:00
parent 5503ce5fc5
commit 311153b3c3
26 changed files with 8873 additions and 894 deletions
+15 -8
View File
@@ -1,10 +1,12 @@
#!/usr/bin/env bash
# Hocks Mieterportal – Deploy auf hocks.eu (Workflow aus dem Schulportal)
# Hinterstein Mieterportal – Deploy auf hocks.eu (Workflow aus dem Schulportal)
#
# 1. npm run build 2. Paket (dist + compose + nginx) per pscp hochladen
# 3. Entpacken nach /opt/mieterportal, Container mp-portal neu starten
# 1. npm run build 2. Paket (dist + compose + nginx + server) hochladen
# 3. Entpacken nach /opt/mieterportal, Container bauen & ersetzen
# 4. Status prüfen (Container, Portal-Hash, API-Health)
#
# Voraussetzungen: Pageant mit priv_ionos_hocks_vps.ppk läuft.
# Voraussetzungen: Pageant mit priv_ionos_hocks_vps.ppk läuft,
# portal.env liegt auf dem Server (/opt/mieterportal/portal.env).
# Aufruf: ./deploy.sh
set -euo pipefail
@@ -24,23 +26,28 @@ rm -rf tmp-deploy && mkdir -p tmp-deploy/docker/templates
cp -r dist tmp-deploy/dist
cp docker-compose.yml tmp-deploy/
cp docker/templates/default.conf.template tmp-deploy/docker/templates/
cp -r server tmp-deploy/server
rm -rf tmp-deploy/server/node_modules
tar -czf mp-dist.tar.gz -C tmp-deploy .
rm -rf tmp-deploy
"$PSCP" -batch -hostkey "$HOSTKEY" -i "$KEY" -P "$PORT" \
mp-dist.tar.gz "$SERVER":/tmp/mp-dist.tar.gz
rm -f mp-dist.tar.gz
echo "==> 3/4 Auf Server entpacken und Container ersetzen"
echo "==> 3/4 Auf Server entpacken, API-Image bauen, Stack ersetzen"
"$PLINK" -batch -hostkey "$HOSTKEY" -i "$KEY" -P "$PORT" "$SERVER" "
mkdir -p $REMOTE_DIR &&
tar -xzf /tmp/mp-dist.tar.gz -C $REMOTE_DIR &&
rm -f /tmp/mp-dist.tar.gz &&
cd $REMOTE_DIR && docker compose up -d
cd $REMOTE_DIR && docker compose up -d --build
"
echo "==> 4/4 Status prüfen"
sleep 5
"$PLINK" -batch -hostkey "$HOSTKEY" -i "$KEY" -P "$PORT" "$SERVER" "
docker ps --filter name=mp-portal --format 'table {{.Names}}\t{{.Status}}' &&
curl -s https://mieterportal.hocks.eu/ | grep -o 'index-[^\"]*\.js' | head -1
docker ps --filter name=mp- --format 'table {{.Names}}\t{{.Status}}' &&
curl -s https://mieterportal.hocks.eu/ | grep -o 'index-[^\"]*\.js' | head -1 &&
curl -s https://mieterportal.hocks.eu/api/healthz
"
echo
echo "Fertig: https://mieterportal.hocks.eu"