vcard4reseller/deploy/update.sh
Thomas Peterson faece5870d Deploy-Fix: nginx routet /w (Wallet) zum Backend + nginx-Recreate bei Rollout
- nginx.prod.conf: /w (Wallet-Landing, .pkpass, Google-Redirect, Logo) fehlte in
  der Backend-Location-Regex → Wallet-Routen landeten in der SPA (index.html).
- update.sh: nginx.prod.conf ist ein Single-File-Bind-Mount (am Inode gepinnt);
  git reset ersetzt die Datei → nginx-Container force-recreaten, damit die
  aktuelle Config greift (statt nur reload).

Live-Nodes bereits nachgezogen; Apple-Wallet-Pass funktioniert über Caddy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:17:30 +02:00

38 lines
1.7 KiB
Bash

#!/usr/bin/env bash
# Baut/aktualisiert die App auf einem App-Node aus dem bereits ausgecheckten Repo.
# Erwartet: Repo unter dem Repo-Root vorhanden, backend/.env.prod.local + JWT-Keys da.
# Aufruf: DOMAIN=<domain> RUN_MIGRATIONS=true|false bash deploy/update.sh
# Genutzt von cloud-init (Erstprovisionierung) und vom Terraform-Code-Rollout.
set -euo pipefail
REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$REPO_DIR"
DOMAIN="${DOMAIN:-localhost}"
RUN_MIGRATIONS="${RUN_MIGRATIONS:-false}"
COMPOSE="docker compose --project-directory $REPO_DIR -f deploy/compose/docker-compose.prod.yml"
# SPA bauen (Profil-/QR-Links zeigen auf die öffentliche Domain)
docker run --rm -e VITE_PUBLIC_BASE="https://$DOMAIN" -v "$REPO_DIR/frontend":/app -w /app \
node:25-alpine sh -c "npm ci && npm run build"
chown -R 1000:1000 "$REPO_DIR"
$COMPOSE up -d --build
# nginx.prod.conf ist ein Single-File-Bind-Mount (am Inode gepinnt). git reset ersetzt
# die Datei (neuer Inode) → Container neu erzeugen, damit die aktuelle Config gemountet wird.
$COMPOSE up -d --force-recreate nginx
sleep 8
# PHP-Abhängigkeiten + Autoloader (vendor/ gitignored, /app als Volume gemountet →
# im Container installieren; composer install erneuert den optimierten Autoloader,
# damit neue Klassen aus dem Update gefunden werden).
$COMPOSE exec -T -e COMPOSER_HOME=/tmp/composer php \
composer install --no-dev --optimize-autoloader --no-interaction --no-scripts
if [ "$RUN_MIGRATIONS" = "true" ]; then
$COMPOSE exec -T php php bin/console doctrine:migrations:migrate --no-interaction
# Erst-Befüllung (idempotent: überspringt, wenn admin@vcard4reseller.de existiert)
$COMPOSE exec -T php php bin/console app:seed || true
fi
$COMPOSE exec -T php php bin/console cache:clear