#!/bin/bash # 部署到 Kr宝塔 (43.139.27.93):打包 → SCP(端口22022) → SSH 解压构建 → 宝塔 API 重启 # 不用 pm2 命令,用宝塔 API 操作。在「一场soul的创业实验」目录下执行。 set -e cd "$(dirname "$0")" SSH_PORT="22022" BT_HOST="43.139.27.93" BT_PORT="9988" BT_KEY="qcWubCdlfFjS2b2DMT1lzPFaDfmv1cBT" PROJECT_PATH="/www/wwwroot/soul" PROJECT_NAME="soul" echo "===== 1. 打包 =====" tar --exclude='node_modules' --exclude='.next' --exclude='.git' -czf /tmp/soul_update.tar.gz . echo "===== 2. 上传到 Kr宝塔 (${BT_HOST}:${SSH_PORT}) =====" sshpass -p 'Zhiqun1984' scp -P "$SSH_PORT" /tmp/soul_update.tar.gz root@${BT_HOST}:/tmp/ echo "===== 3. SSH:解压、安装、构建(不执行 pm2)=====" sshpass -p 'Zhiqun1984' ssh -p "$SSH_PORT" root@${BT_HOST} " mkdir -p ${PROJECT_PATH} cd ${PROJECT_PATH} rm -rf app components lib public styles *.json *.js *.ts *.mjs *.md .next tar -xzf /tmp/soul_update.tar.gz rm /tmp/soul_update.tar.gz export PATH=/www/server/nodejs/v22.14.0/bin:\$PATH [ -x \"\$(command -v pnpm)\" ] || npm i -g pnpm pnpm install pnpm run build " echo "===== 4. 宝塔 API 重启 Node 项目 ${PROJECT_NAME} =====" REQUEST_TIME=$(date +%s) md5hex() { printf '%s' "$1" | openssl md5 2>/dev/null | awk '{print $NF}' || true; } MD5_KEY=$(md5hex "$BT_KEY") SIGN_STR="${REQUEST_TIME}${MD5_KEY}" REQUEST_TOKEN=$(md5hex "$SIGN_STR") RESP=$(curl -s -k -X POST "https://${BT_HOST}:${BT_PORT}/project/nodejs/restart_project" \ -d "request_time=${REQUEST_TIME}" \ -d "request_token=${REQUEST_TOKEN}" \ -d "project_name=${PROJECT_NAME}" 2>/dev/null || true) if echo "$RESP" | grep -q '"status":true\|"status": true'; then echo "宝塔 API 重启成功: $RESP" else echo "宝塔 API 返回(若失败请到面板 网站→Node项目→${PROJECT_NAME}→重启): $RESP" fi echo "===== 部署到 Kr宝塔 完成 ====="