#!/bin/bash # ========================================== # To_Docx Debian 启动脚本 (run_dev.sh) # 用于在 Debian 13 环境下一键启动前后端 # ========================================== # 获取脚本所在的绝对路径 ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CONDA_ENV="to_docx" echo "------------------------------------------" echo "🚀 正在启动 To_Docx 开发环境..." echo "项目根目录: $ROOT_DIR" echo "------------------------------------------" # 1. 基础环境检查 if ! command -v conda &> /dev/null; then echo "❌ 错误: 未检测到 conda 命令,请先安装 Miniconda 或 Anaconda。" exit 1 fi if ! command -v node &> /dev/null; then echo "❌ 错误: 未检测到 node 命令,请先安装 Node.js。" exit 1 fi # 2. 检查并提示 Conda 环境 if ! conda info --envs | grep -q "$CONDA_ENV"; then echo "⚠️ 警告: 未找到 Conda 环境 '$CONDA_ENV'。" echo "提示: 请按照以下步骤搭建环境:" echo " 1. conda create -n $CONDA_ENV python=3.10 -y" echo " 2. conda activate $CONDA_ENV" echo " 3. pip install fastapi uvicorn pypandoc python-docx pydantic \"python-jose[cryptography]\" \"passlib[bcrypt]\" bcrypt" exit 1 fi # 3. 定义清理函数 (处理 Ctrl+C) cleanup() { echo "" echo "🛑 正在停止所有服务..." [ -n "$BACKEND_PID" ] && kill $BACKEND_PID 2>/dev/null [ -n "$FRONTEND_PID" ] && kill $FRONTEND_PID 2>/dev/null echo "✅ 服务已关闭。" exit 0 } # 捕获中断信号 trap cleanup SIGINT # 4. 启动后端 (FastAPI) echo "[1/2] 正在启动后端服务器 (端口: 3001)..." # 使用 conda run 确保在正确的环境下执行,无需手动 activate conda run --no-capture-output -n $CONDA_ENV python "$ROOT_DIR/server/main.py" & BACKEND_PID=$! # 5. 启动前端 (Vite) echo "[2/2] 正在启动前端开发服务器 (端口: 5173)..." cd "$ROOT_DIR/client" # 自动修复 Vite 的执行权限问题 (针对 Permission denied 报错) if [ -f "node_modules/.bin/vite" ]; then chmod +x node_modules/.bin/vite fi # 使用 --host 允许外部通过服务器 IP 访问 npm run dev -- --host & FRONTEND_PID=$! echo "------------------------------------------" echo "✅ 所有服务已尝试启动!" echo "后端 PID: $BACKEND_PID" echo "前端 PID: $FRONTEND_PID" echo "👉 访问地址: http://服务器IP:5173" echo "💡 提示: 按下 [Ctrl+C] 停止所有服务。" echo "------------------------------------------" # 阻塞主进程以保持后台进程运行并输出日志 wait