terraform_data.app_deploy führt per remote-exec auf jedem App-Node ein Update
aus (git reset auf origin + deploy/update.sh: SPA bauen, composer, migrate(app-1),
cache:clear), getriggert über var.deploy_version (z. B. Git-SHA). Server werden
NICHT ersetzt: hcloud_server.app ignoriert user_data-Änderungen (cloud-init nur
Erstboot). Gemeinsames deploy/update.sh (cloud-init ruft es ebenfalls auf).
Fix: ${PRIV:-} in der .tftpl als $${PRIV:-} escaped (templatefile-Kollision).
Workflow: tofu apply -var deploy_version=$(git rev-parse --short HEAD)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
1.5 KiB
Bash
35 lines
1.5 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
|
|
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
|