Files
CasSsoService/docker/deploy.sh
T

55 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 一键部署:上传编排文件 -> SSH 到 ECS 拉取镜像并启动(CAS,依赖公共 mysql8/redis/rabbitmq)
# 用法: ./deploy.sh <version>
# 前置环境变量:
# 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" <<EOF
set -e
mkdir -p "$REMOTE_DIR"
cd "$REMOTE_DIR"
cat > .env <<ENV
ACR_REGISTRY=$ACR_REGISTRY
ACR_NAMESPACE=$ACR_NAMESPACE
VERSION=$VERSION
MYSQL_PASSWORD=${MYSQL_PASSWORD:-Cas@123456}
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Root@123456}
ENV
/bin/chmod +x "$REMOTE_DIR/run-cas.sh"
$LOGIN_CMD
docker compose -f docker-compose.cas.yml pull cas
docker compose -f docker-compose.cas.yml up -d --force-recreate
docker image prune -f
echo DEPLOY_OK
EOF