Files
heicode-win/heicode/bin/azure_vm_deploy.sh
T
gongzhiyong 1f21309597 refactor: rename manager codebase dir new-api → heicode, module github.com/heicode/manager
Remove user-facing new-api naming; Docker/network/container names use heicode.
Go imports updated; Dockerfiles and workflows ldflags fixed.

Made-with: Cursor
2026-05-01 01:47:23 +08:00

58 lines
1.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Azure VM deployment script with canary gate and rollback pointer.
# Prerequisites:
# - SSH access to VM
# - docker + docker compose installed on VM
# - project already synced to VM path
#
# Example:
# VM_HOST=20.1.2.3 VM_USER=azureuser REMOTE_DIR=/opt/heicode/heicode \
# IMAGE_TAG=heicode-manager:local ./bin/azure_vm_deploy.sh
VM_HOST="${VM_HOST:-}"
VM_USER="${VM_USER:-azureuser}"
REMOTE_DIR="${REMOTE_DIR:-/opt/heicode/heicode}"
IMAGE_TAG="${IMAGE_TAG:-heicode-manager:local}"
HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:3000/api/status}"
SSH_OPTS="${SSH_OPTS:-}"
if [[ -z "${VM_HOST}" ]]; then
echo "ERROR: VM_HOST is required"
exit 1
fi
REMOTE="${VM_USER}@${VM_HOST}"
SSH="ssh ${SSH_OPTS} ${REMOTE}"
echo "== Azure VM deploy start =="
echo "remote=${REMOTE}"
echo "dir=${REMOTE_DIR}"
echo "image=${IMAGE_TAG}"
# Persist previous image for rollback.
${SSH} "cd '${REMOTE_DIR}' && \
PREV=\$(docker inspect --format='{{.Config.Image}}' heicode 2>/dev/null || true) && \
echo \"\${PREV}\" > .last_success_image && \
echo \"last_success_image=\${PREV}\""
# Update compose image tag and redeploy.
${SSH} "cd '${REMOTE_DIR}' && \
docker compose pull || true && \
IMAGE_TAG='${IMAGE_TAG}' docker compose up -d --force-recreate"
echo "Waiting for health endpoint..."
for i in {1..20}; do
if ${SSH} "curl -fsS '${HEALTH_URL}' | grep -q '\"success\":true'"; then
echo "Health check passed."
echo "${IMAGE_TAG}" | ${SSH} "cat > '${REMOTE_DIR}/.last_success_image'"
echo "Deploy completed."
exit 0
fi
sleep 3
done
echo "Health check failed. Run rollback script."
exit 2