55 lines
2.2 KiB
Bash
55 lines
2.2 KiB
Bash
#!/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
|