55 lines
2.5 KiB
Bash
Executable File
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"
|