#!/usr/bin/env bash # Deploy dbis-frontend build to Proxmox container (VMID 10130) # Builds locally, pushes dist to container, reloads nginx. # Usage: ./scripts/dbis/deploy-dbis-frontend-to-container.sh # Env: DBIS_FRONTEND_DEPLOY_PATH, VITE_API_BASE_URL (for build), DEBUG=1 (verbose) # Version: 2026-01-31 set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" source "${SCRIPT_DIR}/../lib/load-project-env.sh" VMID="${VMID_DBIS_FRONTEND:-10130}" FRONTEND_DIR="${DBIS_CORE_DIR:-${PROJECT_ROOT}/dbis_core}/frontend" DIST_DIR="${FRONTEND_DIR}/dist" PROXMOX_HOST="$(get_host_for_vmid "$VMID")" SSH_OPTS="-o ConnectTimeout=30 -o ServerAliveInterval=60 -o ServerAliveCountMax=3" [[ "${DEBUG:-0}" = "1" ]] && set -x [[ ! -d "$FRONTEND_DIR" ]] && err_exit "Frontend dir not found: $FRONTEND_DIR" command -v npm &>/dev/null || err_exit "npm not found (required for build)" # Pre-flight: SSH connectivity ssh $SSH_OPTS -o BatchMode=yes "root@${PROXMOX_HOST}" "exit" 2>/dev/null || err_exit "Cannot SSH to $PROXMOX_HOST (check keys/network)" # Pre-flight: container exists ssh $SSH_OPTS "root@${PROXMOX_HOST}" "pct status $VMID" &>/dev/null || err_exit "Container $VMID not found on $PROXMOX_HOST" echo "=== Deploy DBIS Frontend to Container $VMID ===" echo "Host: $PROXMOX_HOST | Frontend: $FRONTEND_DIR" # Build (VITE_API_BASE_URL can be set for API URL; see dbis_core/frontend/.env.example) echo "Building frontend..." (cd "$FRONTEND_DIR" && npm run build) || err_exit "Build failed" [[ ! -d "$DIST_DIR" ]] && err_exit "dist not found after build" TMP_TAR="/tmp/dbis_frontend_$$.tar.gz" tar czf "$TMP_TAR" -C "$DIST_DIR" . trap "rm -f $TMP_TAR" EXIT # Path: DBIS_FRONTEND_DEPLOY_PATH env override, else auto-detect if [[ -n "${DBIS_FRONTEND_DEPLOY_PATH:-}" ]]; then CONTAINER_DEPLOY_PATH="$DBIS_FRONTEND_DEPLOY_PATH" else CONTAINER_DEPLOY_PATH="$( ssh $SSH_OPTS "root@${PROXMOX_HOST}" " if pct exec $VMID -- mkdir -p /opt/dbis-core/frontend/dist 2>/dev/null; then echo /opt/dbis-core/frontend/dist else pct exec $VMID -- mkdir -p /tmp/dbis-frontend/dist 2>/dev/null echo /tmp/dbis-frontend/dist fi " 2>/dev/null || echo "/tmp/dbis-frontend/dist" )" fi echo "Deploy path: $CONTAINER_DEPLOY_PATH" echo "Pushing to container $VMID..." scp $SSH_OPTS "$TMP_TAR" "root@${PROXMOX_HOST}:/tmp/dbis_frontend_deploy.tar.gz" ssh $SSH_OPTS "root@${PROXMOX_HOST}" " pct push $VMID /tmp/dbis_frontend_deploy.tar.gz /tmp/dbis_frontend_deploy.tar.gz pct exec $VMID -- bash -c 'rm -rf \"${CONTAINER_DEPLOY_PATH}\" && mkdir -p \"${CONTAINER_DEPLOY_PATH}\" && tar xzf /tmp/dbis_frontend_deploy.tar.gz -C \"${CONTAINER_DEPLOY_PATH}\" && rm -f /tmp/dbis_frontend_deploy.tar.gz' if pct exec $VMID -- systemctl reload nginx 2>/dev/null || pct exec $VMID -- systemctl restart nginx 2>/dev/null; then : nginx reloaded else pct exec $VMID -- pkill -f 'python3 -m http.server' 2>/dev/null || true if pct exec $VMID -- bash -c "cd ${CONTAINER_DEPLOY_PATH} && nohup python3 -m http.server 80 >/tmp/http.log 2>&1 & sleep 1"; then echo 'Started python3 http.server on port 80' else echo "Note: nginx not running; configure a web server to serve $CONTAINER_DEPLOY_PATH" fi fi rm -f /tmp/dbis_frontend_deploy.tar.gz " FRONTEND_URL="http://${IP_DBIS_FRONTEND:-192.168.11.130}" echo "Done. Frontend: $FRONTEND_URL" # Post-deploy health check curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "$FRONTEND_URL" 2>/dev/null | grep -q "200\|301\|302" && echo "Health check: OK" || echo "Health check: (run curl $FRONTEND_URL to verify)"