Files
integral-shop/backend/shell/deploy-admin-vue-shjjy153.sh
2026-03-19 17:24:15 +08:00

73 lines
3.0 KiB
Bash
Executable File
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.
#!/bin/bash
# 仅打包部署 backend-adminend后台 Vue 前端)到 shjjy153 云服务器
# 部署前在云服务器上备份原有静态文件
# 使用: ./shell/deploy-admin-vue-shjjy153.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-vue-shjjy153.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 '/^shjjy153:/,/^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=101.132.245.153
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/jjy-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 前端)到 shjjy153 ==="
echo " 服务器: $SERVER_USER@$SERVER_HOST"
echo " 目标: $REMOTE_DIR_ADMIN"
echo ""
echo "=== 1. 编译 backend-adminend (npm run build:prod) ==="
cd "$FRONTEND_DIR"
# Node 1718 需要 --openssl-legacy-providerNode 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/../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 部署完成 ==="