diff --git a/backend/shell/deploy-admin-vue-shccd159.sh b/backend/shell/deploy-admin-vue-shccd159.sh new file mode 100755 index 0000000..15a7c6a --- /dev/null +++ b/backend/shell/deploy-admin-vue-shccd159.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# 仅打包部署 backend-adminend(后台 Vue 前端)到 shccd159 云服务器 +# 部署前在云服务器上备份原有静态文件 +# 使用: ./shell/deploy-admin-vue-shccd159.sh(在 backend 目录下) +# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-vue-shccd159.sh + +set -e +SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)" +FRONTEND_DIR="${ROOT_DIR}/backend-adminend" +[[ ! -d "$FRONTEND_DIR" ]] && FRONTEND_DIR="${ROOT_DIR}/frontend" +DEPLOY_CONF="$BACKEND_DIR/deploy.conf" + +get_conf() { + sed -n '/^shccd159:/,$p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2- +} +SERVER_HOST=$(get_conf SERVER_HOST) +SERVER_USER=$(get_conf SERVER_USER) +SERVER_PORT=$(get_conf SERVER_PORT) +REMOTE_DIR_ADMIN=$(get_conf REMOTE_DIR_ADMIN) + +[[ -z "$SERVER_HOST" ]] && SERVER_HOST=182.92.78.159 +[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/ccd-jfadmin.fwxgpt.com +[[ -z "$SERVER_USER" ]] && SERVER_USER=root +[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22 + +[[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=() +SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST") + +BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)" + +[[ ! -d "$FRONTEND_DIR" ]] && { echo "错误: 未找到 admin 前端目录 (backend-adminend 或 frontend)"; exit 1; } + +echo "=== 仅部署 backend-adminend(后台 Vue 前端)到 shccd159 ===" +echo " 服务器: $SERVER_USER@$SERVER_HOST" +echo " 目标: $REMOTE_DIR_ADMIN" +echo "" + +echo "=== 1. 编译 backend-adminend (npm run build:prod) ===" +cd "$FRONTEND_DIR" +# Node 17–18 需要 --openssl-legacy-provider;Node 22+ 已不支持,不设置 +NODE_MAJOR=$(node -v 2>/dev/null | sed -E 's/^v([0-9]+).*/\1/' || echo 0) +if [[ "$NODE_MAJOR" -ge 17 && "$NODE_MAJOR" -le 21 ]]; then + export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider" +fi +npm run build:prod +echo "已生成: $FRONTEND_DIR/dist" +[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; } + +echo "" +echo "=== 2. 云服务器备份原有静态 ===" +"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP +set -e +if [ -d "$REMOTE_DIR_ADMIN" ] && [ "\$(ls -A $REMOTE_DIR_ADMIN 2>/dev/null)" ]; then + BACKUP_TAR="$REMOTE_DIR_ADMIN/../ccd_jfadmin_${BACKUP_SUFFIX}.tar.gz" + tar -czf "\$BACKUP_TAR" -C "$REMOTE_DIR_ADMIN" . + echo "已备份: \$BACKUP_TAR" +else + echo "远程目录为空或不存在,跳过备份" +fi +REMOTE_BACKUP + +echo "" +echo "=== 3. 上传 dist 到 $REMOTE_DIR_ADMIN ===" +"${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && (rm -rf ${REMOTE_DIR_ADMIN}/* ${REMOTE_DIR_ADMIN}/.??* 2>/dev/null; true)" +(cd "$FRONTEND_DIR/dist" && tar cf - .) | "${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && cd $REMOTE_DIR_ADMIN && tar xf -" +echo "后台 Vue 静态上传完成." + +echo "" +echo "=== backend-adminend 部署完成 ==="