1de5cf3891
Pre-pulling the base Docker image in the deploy script prevents potential TLS certificate errors during the `docker build` process. This ensures a smoother deployment by leveraging the cached image layer.
42 lines
1.3 KiB
Bash
Executable File
42 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy the canary service to a remote host via rsync + ssh.
|
|
# Usage: ./deploy.sh [host] (default: minerva.lan)
|
|
set -euo pipefail
|
|
|
|
HOST="${1:-minerva.lan}"
|
|
REMOTE_DIR="/opt/stacks/doctate-canary"
|
|
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
echo ">>> Syncing $LOCAL_DIR -> $HOST:$REMOTE_DIR"
|
|
rsync -av \
|
|
--exclude 'deploy.sh' \
|
|
--exclude 'models/' \
|
|
"$LOCAL_DIR/" "$HOST:$REMOTE_DIR/"
|
|
|
|
echo ">>> Rebuilding + restarting on $HOST"
|
|
# Pre-pull the base image with the Docker engine before `docker build`.
|
|
# Docker's legacy builder hits a TLS cert error on the pull path; pulling
|
|
# first means the build finds the layer in cache and skips that step.
|
|
# Keep this tag in sync with the FROM line in the Dockerfile.
|
|
ssh "$HOST" "cd $REMOTE_DIR && \
|
|
docker compose down && \
|
|
docker pull nvidia/cuda:12.6.1-devel-ubuntu22.04 && \
|
|
docker build -t doctate-canary . && \
|
|
docker compose up -d"
|
|
|
|
echo ">>> Waiting for /health (up to 10 min for first model download + warmup)"
|
|
for i in $(seq 1 120); do
|
|
if ssh "$HOST" "curl -sf http://localhost:9002/health" 2>/dev/null; then
|
|
echo
|
|
echo ">>> OK"
|
|
ssh "$HOST" "curl -s http://localhost:9002/info"
|
|
echo
|
|
exit 0
|
|
fi
|
|
sleep 5
|
|
done
|
|
|
|
echo ">>> TIMEOUT — last logs:"
|
|
ssh "$HOST" "docker logs doctate-canary --tail 60"
|
|
exit 1
|