spark-server/deploy/docker/deploy.sh

55 lines
2.5 KiB
Bash
Executable File

#!/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"