#!/bin/bash set -euo pipefail VMID="${VMID:-5000}" PROXMOX_HOST="${PROXMOX_HOST_R630_02:-192.168.11.12}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" BACKEND_DIR="$REPO_ROOT/explorer-monorepo/backend" TMP_DIR="$(mktemp -d)" JWT_SECRET_VALUE="${JWT_SECRET_VALUE:-}" EXPLORER_AI_MODEL_VALUE="${EXPLORER_AI_MODEL_VALUE:-grok-3}" EXPLORER_DATABASE_URL_VALUE="${EXPLORER_DATABASE_URL_VALUE:-}" SECURE_AI_ENV_FILE="${SECURE_AI_ENV_FILE:-$HOME/.secure-secrets/explorer-ai.env}" if [ -f "$SECURE_AI_ENV_FILE" ]; then set -a # Source the local secrets file so deploys do not depend on repo-stored API keys. source "$SECURE_AI_ENV_FILE" set +a fi cleanup() { rm -rf "$TMP_DIR" } trap cleanup EXIT echo "==========================================" echo "Deploying Explorer AI Backend to VMID $VMID" echo "==========================================" echo "=== Step 1: Build explorer backend ===" ( cd "$BACKEND_DIR" go build -o "$TMP_DIR/explorer-config-api" ./api/rest/cmd ) echo "✅ Backend built" echo "=== Step 2: Prepare AI docs bundle ===" mkdir -p "$TMP_DIR/explorer-ai-docs/docs/11-references" "$TMP_DIR/explorer-ai-docs/explorer-monorepo/docs" cp "$REPO_ROOT/docs/11-references/ADDRESS_MATRIX_AND_STATUS.md" "$TMP_DIR/explorer-ai-docs/docs/11-references/" cp "$REPO_ROOT/docs/11-references/LIQUIDITY_POOLS_MASTER_MAP.md" "$TMP_DIR/explorer-ai-docs/docs/11-references/" cp "$REPO_ROOT/docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md" "$TMP_DIR/explorer-ai-docs/docs/11-references/" cp "$REPO_ROOT/docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md" "$TMP_DIR/explorer-ai-docs/docs/11-references/" cp "$REPO_ROOT/explorer-monorepo/docs/EXPLORER_API_ACCESS.md" "$TMP_DIR/explorer-ai-docs/explorer-monorepo/docs/" tar -C "$TMP_DIR" -czf "$TMP_DIR/explorer-ai-docs.tar.gz" explorer-ai-docs echo "✅ Docs bundle prepared" echo "=== Step 3: Upload artifacts ===" scp -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$TMP_DIR/explorer-config-api" root@"$PROXMOX_HOST":/tmp/explorer-config-api scp -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$TMP_DIR/explorer-ai-docs.tar.gz" root@"$PROXMOX_HOST":/tmp/explorer-ai-docs.tar.gz echo "✅ Artifacts uploaded" echo "=== Step 4: Install backend, refresh docs, and ensure env ===" if [ -z "$JWT_SECRET_VALUE" ]; then JWT_SECRET_VALUE="$(openssl rand -hex 32)" fi export JWT_SECRET_VALUE export EXPLORER_AI_MODEL_VALUE export XAI_API_KEY_VALUE="${XAI_API_KEY:-}" export EXPLORER_DATABASE_URL_VALUE ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@"$PROXMOX_HOST" \ "JWT_SECRET_VALUE='$JWT_SECRET_VALUE' EXPLORER_AI_MODEL_VALUE='$EXPLORER_AI_MODEL_VALUE' XAI_API_KEY_VALUE='$XAI_API_KEY_VALUE' EXPLORER_DATABASE_URL_VALUE='$EXPLORER_DATABASE_URL_VALUE' bash -s" <<'REMOTE' set -euo pipefail VMID=5000 DB_URL="$EXPLORER_DATABASE_URL_VALUE" if [ -z "$DB_URL" ]; then DB_CONTAINER_IP="$(pct exec "$VMID" -- docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' blockscout-postgres 2>/dev/null || true)" if [ -n "$DB_CONTAINER_IP" ]; then DB_URL="postgresql://blockscout:blockscout@${DB_CONTAINER_IP}:5432/blockscout?sslmode=disable" fi fi pct exec "$VMID" -- bash -lc 'mkdir -p /opt/explorer-ai-docs /etc/systemd/system/explorer-config-api.service.d' pct push "$VMID" /tmp/explorer-ai-docs.tar.gz /tmp/explorer-ai-docs.tar.gz --perms 0644 pct push "$VMID" /tmp/explorer-config-api /usr/local/bin/explorer-config-api.new --perms 0755 pct exec "$VMID" -- env \ DB_URL="$DB_URL" \ EXPLORER_AI_MODEL_VALUE="$EXPLORER_AI_MODEL_VALUE" \ JWT_SECRET_VALUE="$JWT_SECRET_VALUE" \ XAI_API_KEY_VALUE="$XAI_API_KEY_VALUE" \ bash -lc ' set -euo pipefail rm -rf /opt/explorer-ai-docs/* tar -xzf /tmp/explorer-ai-docs.tar.gz -C /opt rm -f /tmp/explorer-ai-docs.tar.gz mv /usr/local/bin/explorer-config-api.new /usr/local/bin/explorer-config-api chmod 0755 /usr/local/bin/explorer-config-api cat > /etc/systemd/system/explorer-config-api.service < /etc/systemd/system/explorer-config-api.service.d/ai.conf < /etc/systemd/system/explorer-config-api.service.d/security.conf < /etc/systemd/system/explorer-config-api.service.d/database.conf < /etc/systemd/system/explorer-config-api.service.d/xai.conf </dev/null curl -fsS "https://explorer.d-bis.org/explorer-api/v1/ai/context?q=cUSDT" >/dev/null echo "✅ Explorer AI routes respond publicly" echo "" echo "Deployment complete."