#!/usr/bin/env bash # Hinterstein Mieterportal – Deploy auf hocks.eu (Workflow aus dem Schulportal) # # 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, # portal.env liegt auf dem Server (/opt/mieterportal/portal.env). # Aufruf: ./deploy.sh set -euo pipefail SERVER="root@hocks.eu" PORT=38592 HOSTKEY="SHA256:4G3UxsugNkHH6BrPXScLXh+vX8P1sLgWKn8cZBKSRxw" KEY="Z:\Devel\ssh\priv_ionos_hocks_vps.ppk" PSCP="/c/Program Files/PuTTY/pscp.exe" PLINK="/c/Program Files/PuTTY/plink.exe" REMOTE_DIR="/opt/mieterportal" echo "==> 1/4 Frontend bauen" npm run build echo "==> 2/4 Paket erstellen und hochladen" 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, 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 --build " echo "==> 4/4 Status prüfen" sleep 5 "$PLINK" -batch -hostkey "$HOSTKEY" -i "$KEY" -P "$PORT" "$SERVER" " 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"