#!/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= 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 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