#!/usr/bin/env bash set -Eeuo pipefail APP_DIR="${APP_DIR:-/opt/cmpp-platform}" ENV_FILE="${ENV_FILE:-/etc/cmpp-platform/cmpp-platform.env}" ADMIN_CREDENTIAL_FILE="${ADMIN_CREDENTIAL_FILE:-/root/cmpp-platform-admin.txt}" if [[ "$(id -u)" -ne 0 ]]; then echo "Run as root." >&2 exit 1 fi if [[ ! -f "$ENV_FILE" ]]; then echo "Missing environment file: $ENV_FILE" >&2 exit 1 fi set -a source "$ENV_FILE" set +a cd "$APP_DIR" echo "[deploy] Installing dependencies" npm ci npm --prefix api ci echo "[deploy] Generating Prisma client and applying migrations" npm --prefix api run prisma:generate npm --prefix api run prisma:migrate:deploy echo "[deploy] Building frontend, API and gateway" npm run build npm --prefix api run build (cd gateway && /usr/local/bin/go build -o "$APP_DIR/dist/cmpp-gateway" ./cmd/gateway) echo "[deploy] Ensuring production admin" PROD_ADMIN_CREDENTIAL_FILE="$ADMIN_CREDENTIAL_FILE" node tools/deploy/ensure-production-admin.mjs chmod 600 "$ADMIN_CREDENTIAL_FILE" || true echo "[deploy] Restarting services" systemctl daemon-reload if [[ "${OBJECT_STORAGE_DRIVER:-minio}" == "local" ]]; then systemctl disable --now cmpp-minio 2>/dev/null || true systemctl enable --now cmpp-api cmpp-gateway nginx else systemctl enable --now cmpp-minio systemctl restart cmpp-minio systemctl enable --now cmpp-api cmpp-gateway nginx fi systemctl restart cmpp-api systemctl restart cmpp-gateway systemctl restart nginx echo "[deploy] Health checks" sleep 3 curl -fsS "http://127.0.0.1:${API_PORT:-3000}/api/health" >/dev/null curl -fsS "http://127.0.0.1:8090/health" >/dev/null redis-cli -h "${REDIS_HOST:-127.0.0.1}" -p "${REDIS_PORT:-6379}" ping >/dev/null pg_isready -d "$DATABASE_URL" >/dev/null echo "[deploy] Done"