#!/usr/bin/env bash # ===================================================================== # TeamVis All-in-One — Bootstrap (Referenz-Helfer) # ===================================================================== # Bringt eine frische All-in-One-Instanz hoch: # 1. Keys erzeugen (falls noch Demo-Defaults in der Supabase-.env) # 2. Stack starten (Supabase + TeamVis + Caddy) # 3. TeamVis-Schema einspielen (Migrations-Bündel → Postgres) # 4. ersten Admin anlegen # # NICHT blind ausführen — Schritt für Schritt lesen. Erwartet: # - dieses Skript liegt im supabase/docker-Verzeichnis (neben der # docker-compose.yml + .env + dem Override) # - das TeamVis-Repo ist unter $TEAMVIS_REPO erreichbar (für die # Skripte bundle-migrations.mjs / create-admin.mjs) # - Node 20+, docker compose, openssl auf dem Host # # Aufruf: TEAMVIS_REPO=/pfad/zum/repo ADMIN_EMAIL=chef@kunde.de ./bootstrap.sh set -euo pipefail REPO="${TEAMVIS_REPO:?Bitte TEAMVIS_REPO=/pfad/zum/team-stwhas-repo setzen}" ADMIN_EMAIL="${ADMIN_EMAIL:?Bitte ADMIN_EMAIL=… setzen}" ENV_FILE="./.env" # --- 1. Keys --------------------------------------------------------- if grep -q "your-super-secret-jwt-token" "$ENV_FILE" 2>/dev/null; then echo "→ Erzeuge JWT_SECRET + ANON_KEY + SERVICE_ROLE_KEY …" KEYS=$(node "$REPO/deploy/selfhost/gen-keys.mjs") # Demo-Zeilen ersetzen (macOS/BSD-sed-kompatibel über awk). for k in JWT_SECRET ANON_KEY SERVICE_ROLE_KEY; do val=$(printf '%s\n' "$KEYS" | sed -n "s/^$k=//p") awk -v K="$k" -v V="$val" 'BEGIN{done=0} $0 ~ "^"K"=" && !done {print K"="V; done=1; next} {print}' "$ENV_FILE" > "$ENV_FILE.tmp" mv "$ENV_FILE.tmp" "$ENV_FILE" done echo " ok — Keys in $ENV_FILE gesetzt." else echo "→ Keys schon gesetzt (keine Demo-Defaults gefunden) — überspringe." fi # --- 2. Stack starten ------------------------------------------------ echo "→ Starte Stack …" docker compose up -d echo "→ Warte auf gesunde Datenbank …" until docker compose exec -T db pg_isready -U postgres >/dev/null 2>&1; do sleep 2; done # Storage initialisiert sein storage-Schema beim ersten Start — kurz warten. sleep 8 # --- 3. Schema einspielen ------------------------------------------- echo "→ Spiele TeamVis-Schema ein (Migrations-Bündel) …" node "$REPO/scripts/bundle-migrations.mjs" > /tmp/teamvis-schema.sql docker compose exec -T db psql -v ON_ERROR_STOP=1 -U postgres -d postgres < /tmp/teamvis-schema.sql echo " ok — Schema eingespielt." # --- 4. Admin anlegen ------------------------------------------------ echo "→ Lege Admin '$ADMIN_EMAIL' an (Passwort wird abgefragt) …" SUPABASE_PUBLIC_URL=$(sed -n 's/^SUPABASE_PUBLIC_URL=//p' "$ENV_FILE") SERVICE_ROLE_KEY=$(sed -n 's/^SERVICE_ROLE_KEY=//p' "$ENV_FILE") NEXT_PUBLIC_SUPABASE_URL="$SUPABASE_PUBLIC_URL" \ SUPABASE_SERVICE_ROLE_KEY="$SERVICE_ROLE_KEY" \ node "$REPO/scripts/create-admin.mjs" "$ADMIN_EMAIL" echo echo "Fertig. App: \$SITE_URL · Supabase: \$SUPABASE_PUBLIC_URL" echo "Danach unter Admin → Funktionen die Module gestaffelt freischalten."