66 lines
3.0 KiB
Bash
Executable File
66 lines
3.0 KiB
Bash
Executable File
#!/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."
|