#!/usr/bin/env bash # Build linux/amd64 binaries + runtime image locally, then load them on the ECS host. # Host layout: # /data/spark-server/compose docker-compose.yaml # /data/spark-server/configs config.yaml # /data/spark-server/logs process logs # /data/spark-server/images spark-server.tar.gz set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" HOST="${SPARK_SSH_HOST:-root@47.236.66.9}" KEY="${SPARK_SSH_KEY:-$HOME/.ssh/spark-ecs}" DATA="${SPARK_DATA_DIR:-/data/spark-server}" IMAGE="${SPARK_IMAGE:-spark-server:latest}" TAR="${SPARK_IMAGE_TAR:-$ROOT/bin/spark-server.tar.gz}" SSH=(ssh -i "$KEY" -o BatchMode=yes -o StrictHostKeyChecking=accept-new "$HOST") SCP=(scp -i "$KEY" -o BatchMode=yes -o StrictHostKeyChecking=accept-new) need() { command -v "$1" >/dev/null || { echo "need $1 on this machine" >&2 exit 1 } } need go need docker need rsync need ssh need scp echo "==> local linux/amd64 binaries + image" make -C "$ROOT" image mkdir -p "$(dirname "$TAR")" docker save "$IMAGE" | gzip -c >"$TAR" echo "image $(docker image inspect "$IMAGE" --format '{{.Size}}') bytes, tar $(wc -c <"$TAR") bytes" echo "==> upload" "${SSH[@]}" "mkdir -p $DATA/compose $DATA/configs $DATA/logs $DATA/images" "${SCP[@]}" "$TAR" "$HOST:$DATA/images/spark-server.tar.gz" "${SCP[@]}" "$ROOT/deploy/docker/docker-compose.yaml" "$HOST:$DATA/compose/docker-compose.yaml" "${SCP[@]}" "$ROOT/deploy/docker/config.docker.yaml" "$HOST:$DATA/configs/config.yaml" rsync -az -e "ssh -i $KEY -o BatchMode=yes" \ "$ROOT/deploy/nginx/host/" "$HOST:/tmp/spark-nginx-host/" echo "==> load and start" "${SSH[@]}" "chown -R 10001:10001 $DATA/logs && docker load -i $DATA/images/spark-server.tar.gz" # Replace any stale spark-server container (e.g. old docker run) so compose can recreate. "${SSH[@]}" "docker rm -f spark-server 2>/dev/null || true" "${SSH[@]}" "cd $DATA/compose && docker compose -f docker-compose.yaml up -d --force-recreate spark-server" "${SSH[@]}" "docker exec spark-server /usr/local/bin/spark-migrate -config /app/configs/config.yaml -dir /app/migrations" "${SSH[@]}" "cp /tmp/spark-nginx-host/spark-sni.conf /etc/nginx/stream.d/spark-sni.conf && if [ -f /etc/letsencrypt/live/sparkr.wyrs365.com/fullchain.pem ]; then cp /tmp/spark-nginx-host/sparkr.conf /etc/nginx/conf.d/sparkr.conf; fi && nginx -t && systemctl reload nginx" "${SSH[@]}" "docker ps --filter name=spark-server --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'" "${SSH[@]}" "curl -fsS http://127.0.0.1:18080/healthz && echo && curl -fsS http://127.0.0.1:18080/readyz && echo"