#!/usr/bin/env bash # PANELS · Cloud Agent · bootstrap idempotente del entorno de desarrollo. # Instala toolchain (Postgres 16, Redis, Java, Deno), aprovisiona la base # de datos local, aplica migraciones Liquibase (contexto dev con datos de # demostración), crea los administradores semilla e instala dependencias. set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" echo "== [1/8] Toolchain del sistema (Postgres 16, Redis, Java, unzip) ==" export DEBIAN_FRONTEND=noninteractive sudo apt-get update -y sudo apt-get install -y --no-install-recommends \ postgresql postgresql-contrib redis-server openjdk-21-jre-headless unzip curl ca-certificates echo "== [2/8] Deno ==" if [ ! -x "$HOME/.deno/bin/deno" ]; then curl -fsSL https://deno.land/install.sh | DENO_INSTALL="$HOME/.deno" sh fi export PATH="$HOME/.deno/bin:$PATH" echo "== [3/8] Arrancar Postgres + Redis ==" sudo service postgresql start sudo service redis-server start for _ in $(seq 1 30); do sudo -u postgres pg_isready -q && break; sleep 1; done echo "== [4/8] Aprovisionar roles/bases/esquemas + ACL de Redis (idempotente) ==" chmod +x db/*.sh db/provision/*.sh if [ ! -f "$ROOT/.env.dev-local" ]; then bash db/provision/dev-local.sh else echo " .env.dev-local ya existe; se omite el aprovisionamiento." fi echo "== [5/8] Archivo .env de la API ==" if [ ! -f "$ROOT/.env" ]; then { grep -v '^#' .env.dev-local | grep . echo "" echo "# --- Secretos de aplicación (solo desarrollo) ---" echo "PORT=8000" echo "SESSION_SECRET=$(openssl rand -hex 24)" echo "DOCS_KEY=$(openssl rand -hex 32)" echo "SEED_PASSWORD=PanelsDev2026!" echo "PANEL_LOGIN_URL=http://localhost:3000/login" echo "COOKIE_SECURE=false" echo "DENO_ENV=development" } > "$ROOT/.env" else echo " .env ya existe; se conserva." fi echo "== [6/8] Migraciones Liquibase (contexto dev) ==" set -a; source .env.dev-local; set +a ./db/update.sh all --context-filter=dev echo "== [7/8] Administradores semilla (platform + tenant) ==" ( cd api set -a; source ../.env; set +a deno run --allow-net --allow-env --allow-read scripts/bootstrap-admin.ts platform deno run --allow-net --allow-env --allow-read scripts/bootstrap-admin.ts tenant --tenant-id=1 ) echo "== [8/8] Dependencias web + caché de Deno ==" ( cd web-panel && npm install --no-audit --no-fund ) ( cd web-saas && npm install --no-audit --no-fund ) ( cd api && deno cache main.ts ) echo "Entorno PANELS listo."