#!/usr/bin/env bash # 一键部署:上传编排文件 -> SSH 到 ECS 拉取镜像并启动(CAS,依赖公共 mysql8/redis/rabbitmq) # 用法: ./deploy.sh # 前置环境变量: # DEPLOY_HOST (必填) ECS 公网/私网 IP 或域名(SSH 目标,不是 ACR 仓库地址!) # SSHPASS (必填) ECS 上 $DEPLOY_USER 的 SSH 密码 # ACR_NAMESPACE (必填) 阿里云镜像命名空间,如 damaomi_docker # ACR_PASSWORD (可选) 若提供则在 ECS 上自动 docker login,避免 ECS 未登录导致 pull 失败 # ACR_USERNAME (可选) 默认 15121037482 # DEPLOY_USER / DEPLOY_PORT / REMOTE_DIR 均有默认值 set -euo pipefail VERSION="${1:-latest}" HOST="${DEPLOY_HOST:?请设置 DEPLOY_HOST(ECS 的 IP/域名,不是 ACR 仓库地址)}" PORT="${DEPLOY_PORT:-22}" USER="${DEPLOY_USER:-yunhai}" REMOTE_DIR="${REMOTE_DIR:-/opt/docker/apps/cas-sso}" ACR_NAMESPACE="${ACR_NAMESPACE:?请设置 ACR_NAMESPACE(如 damaomi_docker)}" ACR_USERNAME="${ACR_USERNAME:-15121037482}" ACR_PASSWORD="${ACR_PASSWORD:-}" # 镜像走公网端点(内网 registry-vpc 在不在 VPC 的 ECS 上连不通) ACR_REGISTRY="${ACR_REGISTRY:-registry.cn-hangzhou.aliyuncs.com}" cd "$(dirname "$0")" echo "== 1/2 上传 compose + run-cas.sh + init.sql + cas.war 到 $HOST:$REMOTE_DIR ==" python3 upload.py "$HOST" "$PORT" "$USER" \ docker-compose.cas.yml "$REMOTE_DIR/docker-compose.cas.yml" \ run-cas.sh "$REMOTE_DIR/run-cas.sh" \ init.sql "$REMOTE_DIR/init.sql" # 若提供了 ACR 密码,生成自动登录命令(避免 ECS 未登录导致 pull 失败) LOGIN_CMD="" if [ -n "$ACR_PASSWORD" ]; then LOGIN_CMD="docker login $ACR_REGISTRY -u $ACR_USERNAME -p $ACR_PASSWORD" fi echo "== 2/2 远端拉取镜像并启动 ==" python3 remote_run.py "$HOST" "$PORT" "$USER" < .env <