#!/usr/bin/env bash # Deploy the quant service to the DGX Spark: # 1. rsync the repository to ~/services/work/Portfolio_Risk_Optimization # 2. optionally rsync an already built data directory (saves the 15-minute setup on the Spark) # 3. add the `quantcore` service block to ~/services/docker-compose.yml (idempotent) # 4. build the image and start the container # # Usage: deploy/deploy_to_spark.sh [--with-data] [--host user_fh_fhgr@spark-6d4a] set -euo pipefail HOST="user_fh_fhgr@spark-6d4a" WITH_DATA=0 for arg in "$@"; do case "$arg" in --with-data) WITH_DATA=1 ;; --host=*) HOST="${arg#--host=}" ;; --host) shift; HOST="$1" ;; esac done REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" REMOTE_SERVICES="services" REMOTE_REPO="$REMOTE_SERVICES/work/Portfolio_Risk_Optimization" REMOTE_DATA="$REMOTE_SERVICES/work/quantcore_data" echo ">> rsync repository -> $HOST:$REMOTE_REPO" ssh "$HOST" "mkdir -p $REMOTE_REPO $REMOTE_DATA" rsync -az --delete \ --exclude '.git' --exclude '/data/' --exclude '__pycache__' --exclude '*.pyc' --exclude '.pytest_cache' \ --exclude '*.egg-info' --exclude '.ruff_cache' --exclude 'scratch/' \ "$REPO_DIR/" "$HOST:$REMOTE_REPO/" if [[ "$WITH_DATA" == "1" && -d "$REPO_DIR/data" ]]; then echo ">> rsync data directory -> $HOST:$REMOTE_DATA" rsync -az --exclude 'jobs/' --exclude '*.log' "$REPO_DIR/data/" "$HOST:$REMOTE_DATA/" fi echo ">> register the service in ~/services/docker-compose.yml (if missing)" ssh "$HOST" bash -s <<'REMOTE' set -euo pipefail cd ~/services if ! grep -q '^ quantcore:' docker-compose.yml; then cp docker-compose.yml "docker-compose.yml.bak.$(date +%Y%m%d%H%M%S)" # append the service block (everything below "services:" of the snippet) awk 'f{print} /^services:/{f=1}' work/Portfolio_Risk_Optimization/deploy/docker-compose.quantcore.yml >> docker-compose.yml echo " added quantcore service block" else echo " quantcore service already present" fi docker compose build quantcore docker compose up -d quantcore sleep 3 docker compose ps quantcore curl -s http://localhost:5001/health | head -c 600; echo REMOTE echo ">> done. API: http://spark-6d4a:5001/docs"