#!/bin/bash # ───────────────────────────────────────────────────────────────────────────── # deploy.sh — Build Gigafibre Client Portal and deploy to ERPNext container # # Usage: # ./deploy.sh # deploy to remote server (production) # ./deploy.sh local # deploy to local Docker (development) # ───────────────────────────────────────────────────────────────────────────── set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" SERVER="root@96.125.196.67" SSH_KEY="$HOME/.ssh/proxmox_vm" DEST="/home/frappe/frappe-bench/sites/assets/client-app" echo "==> Installing dependencies..." npm ci --silent echo "==> Building PWA (base=/assets/client-app/)..." VITE_ERP_TOKEN="b273a666c86d2d0:06120709db5e414" DEPLOY_BASE=/assets/client-app/ npx quasar build -m pwa if [ "$1" = "local" ]; then CONTAINER=$(docker ps --format '{{.Names}}' | grep -E 'frontend' | grep -v ops | head -1) [ -z "$CONTAINER" ] && echo "ERROR: ERPNext frontend container not found" && exit 1 echo "==> Deploying to local container ($CONTAINER)..." docker exec "$CONTAINER" sh -c "rm -rf $DEST && mkdir -p $DEST" docker cp "$SCRIPT_DIR/dist/pwa/." "$CONTAINER:$DEST/" echo "" echo "Done! Client Portal: http://localhost:8080/assets/client-app/" else echo "==> Packaging..." tar czf /tmp/client-pwa.tar.gz -C dist/pwa . echo "==> Deploying to $SERVER..." cat /tmp/client-pwa.tar.gz | ssh -i "$SSH_KEY" "$SERVER" \ "cat > /tmp/client.tar.gz && \ CONTAINER=\$(docker ps --format '{{.Names}}' | grep erpnext-frontend | head -1) && \ echo \" Using container: \$CONTAINER\" && \ docker exec -u root \$CONTAINER sh -c 'rm -rf $DEST && mkdir -p $DEST' && \ TMPDIR=\$(mktemp -d) && \ cd \$TMPDIR && tar xzf /tmp/client.tar.gz && \ docker cp \$TMPDIR/. \$CONTAINER:$DEST/ && \ docker exec -u root \$CONTAINER chown -R frappe:frappe $DEST && \ rm -rf \$TMPDIR /tmp/client.tar.gz" rm -f /tmp/client-pwa.tar.gz echo "" echo "Done! Client Portal: https://client.gigafibre.ca/" fi