2
0

start_dev.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/bash
  2. # FastAPI 后端开发服务器启动脚本(热重载模式)
  3. set -e
  4. # 颜色定义
  5. GREEN='\033[0;32m'
  6. YELLOW='\033[1;33m'
  7. RED='\033[0;31m'
  8. NC='\033[0m' # No Color
  9. # 项目根目录
  10. PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  11. BACKEND_DIR="$PROJECT_ROOT/backend"
  12. LOG_FILE="$HOME/fastapi-dev.log"
  13. # 端口配置
  14. PORT=${PORT:-8081}
  15. HOST=${HOST:-0.0.0.0}
  16. echo -e "${GREEN}=== FastAPI 开发服务器启动 ===${NC}"
  17. echo -e "项目目录: ${YELLOW}$PROJECT_ROOT${NC}"
  18. echo -e "后端目录: ${YELLOW}$BACKEND_DIR${NC}"
  19. echo -e "监听地址: ${YELLOW}$HOST:$PORT${NC} (内部服务)"
  20. echo -e "前端访问: ${YELLOW}http://localhost:8080${NC}"
  21. echo -e "日志文件: ${YELLOW}$LOG_FILE${NC}"
  22. echo ""
  23. # 检查 Python 是否安装
  24. if ! command -v python3 &> /dev/null; then
  25. echo -e "${RED}错误: 未找到 python3${NC}"
  26. exit 1
  27. fi
  28. # 检查 uvicorn 是否安装
  29. if ! python3 -c "import uvicorn" 2>/dev/null; then
  30. echo -e "${YELLOW}警告: 未找到 uvicorn,正在安装...${NC}"
  31. pip install uvicorn[standard] || {
  32. echo -e "${RED}错误: uvicorn 安装失败${NC}"
  33. exit 1
  34. }
  35. fi
  36. # 检查端口是否被占用
  37. if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
  38. echo -e "${YELLOW}警告: 端口 $PORT 已被占用${NC}"
  39. echo -e "正在尝试停止占用端口的进程..."
  40. lsof -ti:$PORT | xargs kill -9 2>/dev/null || true
  41. sleep 1
  42. fi
  43. # 切换到后端目录
  44. cd "$BACKEND_DIR"
  45. # 启动服务器(热重载模式)
  46. echo -e "${GREEN}启动服务器(热重载模式)...${NC}"
  47. echo -e "${GREEN}代码修改将自动重启服务${NC}"
  48. echo ""
  49. python3 -m uvicorn app_fastapi:app \
  50. --host $HOST \
  51. --port $PORT \
  52. --reload \
  53. --log-level info \
  54. > "$LOG_FILE" 2>&1 &
  55. PID=$!
  56. echo $PID > "$HOME/fastapi-dev.pid"
  57. sleep 2
  58. # 检查服务是否启动成功
  59. if ps -p $PID > /dev/null; then
  60. echo -e "${GREEN}✓ 服务启动成功!${NC}"
  61. echo -e " PID: ${YELLOW}$PID${NC}"
  62. echo -e " 内网访问: ${YELLOW}http://localhost:$PORT${NC}"
  63. echo -e " 外网访问: ${YELLOW}https://d8d-ai-vscode-8080-223-240-template-6-group.dev.d8d.fun/${NC}"
  64. echo ""
  65. echo -e "${YELLOW}查看日志: tail -f $LOG_FILE${NC}"
  66. echo -e "${YELLOW}停止服务: kill $PID${NC}"
  67. echo ""
  68. echo -e "${GREEN}热重载已启用,修改代码后自动重启${NC}"
  69. else
  70. echo -e "${RED}✗ 服务启动失败${NC}"
  71. echo -e "查看日志: ${YELLOW}cat $LOG_FILE${NC}"
  72. exit 1
  73. fi