93 lines
3.9 KiB
Bash
93 lines
3.9 KiB
Bash
#!/bin/sh
|
|||
|
|
# Avvia tutto il necessario per lo sviluppo locale di CrAPP: stack Supabase self-hosted,
|
||
|
|
# CMS Strapi (stesso Postgres dello stack Supabase, database logico "strapi") e il dev server Vite.
|
||
|
|
# Idempotente: rilanciabile, salta i passi già fatti (creazione .env, migration già applicate).
|
||
|
|
#
|
||
|
|
# Uso: sh scripts/dev-up.sh
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# bun si installa in ~/.bun/bin: non sempre sul PATH in shell non interattive.
|
||
|
|
export PATH="$HOME/.bun/bin:$PATH"
|
||
|
|
|
||
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
|
|
SUPA_DIR="$ROOT/infra/supabase/docker"
|
||
|
|
STRAPI_DIR="$ROOT/infra/strapi"
|
||
|
|
|
||
|
|
echo "==> Stack Supabase self-hosted"
|
||
|
|
if [ ! -f "$SUPA_DIR/.env" ]; then
|
||
|
|
cp "$SUPA_DIR/.env.example" "$SUPA_DIR/.env"
|
||
|
|
(cd "$SUPA_DIR" && sh utils/generate-keys.sh --update-env >/dev/null)
|
||
|
|
echo " .env creato e chiavi generate"
|
||
|
|
fi
|
||
|
|
|
||
|
|
(cd "$SUPA_DIR" && docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d)
|
||
|
|
|
||
|
|
echo "==> Attendo che supabase-db sia pronto"
|
||
|
|
until docker exec supabase-db pg_isready -U postgres >/dev/null 2>&1; do sleep 1; done
|
||
|
|
|
||
|
|
MIGRATIONS_APPLIED=$(docker exec supabase-db psql -U postgres -d postgres -tAc \
|
||
|
|
"SELECT to_regclass('public.turni_palloni') IS NOT NULL")
|
||
|
|
if [ "$MIGRATIONS_APPLIED" != "t" ]; then
|
||
|
|
echo "==> Applico le migration SQL (prima volta)"
|
||
|
|
for f in "$ROOT"/supabase/migrations/*.sql; do
|
||
|
|
docker exec -i supabase-db psql -U postgres -d postgres -v ON_ERROR_STOP=1 <"$f"
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ANON_KEY/SERVICE_ROLE_KEY sono su una riga sola nel .env dello stack self-hosted.
|
||
|
|
ANON_KEY=$(grep -m1 '^ANON_KEY=' "$SUPA_DIR/.env" | cut -d= -f2-)
|
||
|
|
SERVICE_ROLE_KEY=$(grep -m1 '^SERVICE_ROLE_KEY=' "$SUPA_DIR/.env" | cut -d= -f2-)
|
||
|
|
|
||
|
|
echo "==> CMS Strapi (Postgres condiviso con lo stack Supabase, database logico 'strapi')"
|
||
|
|
if [ ! -f "$STRAPI_DIR/.env" ]; then
|
||
|
|
# DB e utente si creano solo insieme al .env: la password generata qui è l'unica copia,
|
||
|
|
# quindi user/password vengono (ri)allineati ad ogni creazione del .env.
|
||
|
|
DB_PASSWORD=$(openssl rand -base64 24)
|
||
|
|
docker exec supabase-db psql -U postgres -v ON_ERROR_STOP=1 -tAc \
|
||
|
|
"DO \$\$ BEGIN
|
||
|
|
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'strapi') THEN
|
||
|
|
CREATE USER strapi WITH PASSWORD '${DB_PASSWORD}';
|
||
|
|
ELSE
|
||
|
|
ALTER USER strapi WITH PASSWORD '${DB_PASSWORD}';
|
||
|
|
END IF;
|
||
|
|
END \$\$;"
|
||
|
|
# "postgres" qui non è superuser (immagine Supabase): serve la membership del ruolo
|
||
|
|
# target per poterlo assegnare come OWNER di un database.
|
||
|
|
docker exec supabase-db psql -U postgres -v ON_ERROR_STOP=1 -c "GRANT strapi TO postgres;"
|
||
|
|
docker exec supabase-db psql -U postgres -tAc \
|
||
|
|
"SELECT 1 FROM pg_database WHERE datname='strapi'" | grep -q 1 ||
|
||
|
|
docker exec supabase-db psql -U postgres -v ON_ERROR_STOP=1 \
|
||
|
|
-c "CREATE DATABASE strapi OWNER strapi;"
|
||
|
|
|
||
|
|
cp "$STRAPI_DIR/.env.production.example" "$STRAPI_DIR/.env"
|
||
|
|
for key in APP_KEYS API_TOKEN_SALT ADMIN_JWT_SECRET JWT_SECRET TRANSFER_TOKEN_SALT ENCRYPTION_KEY; do
|
||
|
|
val=$(openssl rand -base64 32)
|
||
|
|
sed -i "s#^${key}=.*#${key}=${val}#" "$STRAPI_DIR/.env"
|
||
|
|
done
|
||
|
|
sed -i "s#^DATABASE_HOST=.*#DATABASE_HOST=supabase-db#" "$STRAPI_DIR/.env"
|
||
|
|
sed -i "s#^DATABASE_PASSWORD=.*#DATABASE_PASSWORD=${DB_PASSWORD}#" "$STRAPI_DIR/.env"
|
||
|
|
echo " database 'strapi', utente e .env creati con secret generati"
|
||
|
|
fi
|
||
|
|
|
||
|
|
(cd "$STRAPI_DIR" && docker compose up -d --build)
|
||
|
|
|
||
|
|
echo "==> .env dell'app (root)"
|
||
|
|
if [ ! -f "$ROOT/.env" ]; then
|
||
|
|
cat >"$ROOT/.env" <<EOF
|
||
|
|
VITE_SUPABASE_URL=http://localhost:8000
|
||
|
|
VITE_SUPABASE_PUBLISHABLE_KEY=$ANON_KEY
|
||
|
|
SUPABASE_SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY
|
||
|
|
VITE_STRAPI_URL=http://localhost:1337
|
||
|
|
STRAPI_WRITE_TOKEN=
|
||
|
|
EOF
|
||
|
|
echo " .env creato"
|
||
|
|
echo ""
|
||
|
|
echo " NOTA: al primo avvio vai su http://localhost:1337/admin per creare l'utente"
|
||
|
|
echo " Strapi, poi abilita i permessi pubblici find/findOne su Giocatore,"
|
||
|
|
echo " Riga-classifica e Match-storico (Settings -> Users & Permissions -> Roles"
|
||
|
|
echo " -> Public) — altrimenti rosa/classifica/storico restano vuoti."
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "==> bun run dev"
|
||
|
|
cd "$ROOT" && exec bun run dev
|