#!/usr/bin/env bash # 部署流程:拉代码 → 安装依赖 → 构建前端到 dist/ → 后台启动后端 API(5599) # 若 Nginx 未反代 /api,请先设置 API_BASE_URL 再执行,例如: # export API_BASE_URL="http://你的域名或IP:5599" # ./run.sh # 使用 pm2 保活(推荐):export USE_PM2=1 && ./run.sh set -e cd "$(dirname "$0")" API_PORT="${PORT:-5599}" export PORT="$API_PORT" git fetch origin && git reset --hard origin/master npm install --no-audit --no-fund # 若设置了 API_BASE_URL,则写入 api.config.json,供 build 复制到 dist/ if [ -n "$API_BASE_URL" ]; then echo "[run.sh] 使用 API_BASE_URL=$API_BASE_URL" node -e "require('fs').writeFileSync('api.config.json', JSON.stringify({ apiBase: process.env.API_BASE_URL }, null, 2))" fi node build.js # 后台启动 API:优先 pm2,否则 nohup if [ -n "$USE_PM2" ] && command -v pm2 >/dev/null 2>&1; then echo "[run.sh] 使用 pm2 启动 API(端口 ${API_PORT})..." (cd server && npm install --no-audit --no-fund --silent && pm2 delete view-airtep-api 2>/dev/null; true) (cd server && pm2 start index.js --name view-airtep-api) pm2 save 2>/dev/null || true echo "[run.sh] API 已由 pm2 托管。查看: pm2 list / pm2 logs view-airtep-api" elif command -v nohup >/dev/null 2>&1; then echo "[run.sh] 使用 nohup 后台启动 API(端口 ${API_PORT})..." mkdir -p logs nohup bash start-api.sh >> logs/api.log 2>&1 & echo "[run.sh] API 已在后台运行。查看日志: tail -f logs/api.log" else echo "[run.sh] 前台启动 API(Ctrl+C 会停止服务)..." exec bash start-api.sh fi echo "[run.sh] 部署完成。前端静态在 dist/,API 端口 ${API_PORT}。检查: curl -s http://127.0.0.1:${API_PORT}/api/config"