89 lines
2.0 KiB
Bash
Executable File
89 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ===== 本地调试启动脚本:后端 reload + 前端热更新 =====
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
if [ -f "$ROOT_DIR/.env" ]; then
|
|
set -a
|
|
# 调试模式复用 Docker 部署的环境变量,尤其是 JWT 和敏感字段加密密钥。
|
|
# shellcheck disable=SC1091
|
|
source "$ROOT_DIR/.env"
|
|
set +a
|
|
fi
|
|
|
|
BACKEND_HOST="${BACKEND_HOST:-0.0.0.0}"
|
|
BACKEND_PORT="${BACKEND_PORT:-8000}"
|
|
FRONTEND_HOST="${FRONTEND_HOST:-0.0.0.0}"
|
|
FRONTEND_PORT="${FRONTEND_PORT:-5173}"
|
|
LOG_LEVEL="${LOG_LEVEL:-DEBUG}"
|
|
|
|
BACKEND_PID=""
|
|
FRONTEND_PID=""
|
|
|
|
cleanup() {
|
|
trap - EXIT INT TERM
|
|
if [ -n "$FRONTEND_PID" ] && kill -0 "$FRONTEND_PID" 2>/dev/null; then
|
|
kill "$FRONTEND_PID" 2>/dev/null || true
|
|
fi
|
|
if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then
|
|
kill "$BACKEND_PID" 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
require_cmd() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "缺少命令: $1"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_cmd uv
|
|
require_cmd npm
|
|
|
|
mkdir -p data logs
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo " 本地调试模式"
|
|
echo "=============================="
|
|
echo " 后端: http://${BACKEND_HOST}:${BACKEND_PORT}"
|
|
echo " 前端: http://localhost:${FRONTEND_PORT}"
|
|
echo " API 代理: http://127.0.0.1:${BACKEND_PORT}"
|
|
echo " 退出: Ctrl+C"
|
|
echo "=============================="
|
|
echo ""
|
|
|
|
trap cleanup EXIT INT TERM
|
|
|
|
LOG_LEVEL="$LOG_LEVEL" \
|
|
uv run uvicorn web.backend.main:app \
|
|
--host "$BACKEND_HOST" \
|
|
--port "$BACKEND_PORT" \
|
|
--reload \
|
|
--reload-dir core \
|
|
--reload-dir utils \
|
|
--reload-dir web/backend &
|
|
BACKEND_PID=$!
|
|
|
|
(
|
|
cd web/frontend
|
|
VITE_BACKEND_TARGET="http://127.0.0.1:${BACKEND_PORT}" \
|
|
npm run dev -- --host "$FRONTEND_HOST" --port "$FRONTEND_PORT"
|
|
) &
|
|
FRONTEND_PID=$!
|
|
|
|
while true; do
|
|
if ! kill -0 "$BACKEND_PID" 2>/dev/null; then
|
|
wait "$BACKEND_PID"
|
|
exit $?
|
|
fi
|
|
if ! kill -0 "$FRONTEND_PID" 2>/dev/null; then
|
|
wait "$FRONTEND_PID"
|
|
exit $?
|
|
fi
|
|
sleep 1
|
|
done
|