TeamVis Self-Host-Bundle v0.31.0

This commit is contained in:
TeamVis Release
2026-06-25 16:43:22 +02:00
commit 138502b675
68 changed files with 3766 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
#!/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."