#!/bin/bash # 从「一场soul的创业实验-永平」部署到 Kr宝塔 (43.139.27.93) # 部署 next-project (Next.js 应用) + miniprogram (小程序) set -e YONGPING_ROOT="/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平" MAIN_PROJECT="/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验" SSH_PORT="22022" BT_HOST="43.139.27.93" PROJECT_PATH="/www/wwwroot/soul" SSH_KEY="$HOME/.ssh/id_ed25519_soul_kr" if [ -f "$SSH_KEY" ]; then SSH_CMD="ssh -i $SSH_KEY -p $SSH_PORT -o StrictHostKeyChecking=no" SCP_CMD="scp -i $SSH_KEY -P $SSH_PORT -o StrictHostKeyChecking=no" else SSH_CMD="sshpass -p 'Zhiqun1984' ssh -p $SSH_PORT -o StrictHostKeyChecking=no" SCP_CMD="sshpass -p 'Zhiqun1984' scp -P $SSH_PORT -o StrictHostKeyChecking=no" echo "提示: 运行 scripts/本机配置SSH免密登录.sh 可改为密钥登录" fi echo "===== 1. 同步主项目到永平/soul =====" mkdir -p "$YONGPING_ROOT/soul" rsync -a --delete \ --exclude='node_modules' --exclude='.next' --exclude='.git' --exclude='*.sh' \ "$MAIN_PROJECT/" "$YONGPING_ROOT/soul/" echo "同步完成" echo "===== 2. 打包 next-project =====" cd "$YONGPING_ROOT/soul/next-project" tar --exclude='node_modules' --exclude='.next' --exclude='.git' -czf /tmp/soul_nextjs.tar.gz . echo "打包完成: $(du -h /tmp/soul_nextjs.tar.gz | awk '{print $1}')" echo "===== 3. 上传到 Kr宝塔 =====" $SCP_CMD /tmp/soul_nextjs.tar.gz root@${BT_HOST}:/tmp/soul_nextjs.tar.gz rm -f /tmp/soul_nextjs.tar.gz echo "上传完成" echo "===== 4. SSH: 解压 + 安装 + 构建 + 重启 =====" $SSH_CMD root@${BT_HOST} ' set -e PROJECT="/www/wwwroot/soul" cd "$PROJECT" echo "[4.1] 备份 .env..." cp .env /tmp/soul_env_bak 2>/dev/null || true echo "[4.2] 清理旧文件..." rm -rf app components lib public styles prisma scripts addons api *.ts *.tsx *.mjs *.json .next echo "[4.3] 解压新文件..." tar -xzf /tmp/soul_nextjs.tar.gz rm -f /tmp/soul_nextjs.tar.gz echo "[4.4] 恢复 .env..." cp /tmp/soul_env_bak .env 2>/dev/null || true echo "[4.5] 安装依赖..." export PATH=/www/server/nodejs/v22.14.0/bin:$PATH pnpm install --frozen-lockfile 2>/dev/null || pnpm install 2>&1 | tail -3 echo "[4.6] 生成 Prisma Client..." npx prisma generate 2>&1 | tail -3 echo "[4.7] 构建..." rm -rf .next pnpm run build 2>&1 | tail -5 echo "[4.8] 移除 turbopack (如有)..." rm -f .next/static/chunks/turbopack-*.js node scripts/prepare-standalone.js 2>&1 | tail -3 echo "[4.9] 重启服务..." pm2 restart soul 2>/dev/null || pm2 start .next/standalone/server.js --name soul -- -p 3006 sleep 3 echo "[4.10] 验证..." STATUS=$(curl -sI http://localhost:3006 2>&1 | head -1) echo "状态: $STATUS" ' echo "" echo "===== 部署完成(永平 → Kr宝塔)=====" echo "网站: https://soul.quwanzhi.com" echo "后台: https://soul.quwanzhi.com/admin" echo "" echo "===== 5. 上传小程序? =====" echo "执行: /Applications/wechatwebdevtools.app/Contents/MacOS/cli upload --project \"$YONGPING_ROOT/soul/miniprogram\" -v \"1.19\" -d \"永平同步部署\""