部署.md 6.4 KB

部署与启动说明

本文档说明「故障预测波形工作台」前后端的部署与启动方式。

一、环境要求

组件 版本要求
Python 3.10+(建议 3.11 / 3.12 / 3.13)
Node.js 18+(建议 20+)
npm 随 Node.js 自带
MySQL 5.7+ / 8.x(已建好 compressorsensor 库,含 wave_filewave_sample 表)

二、目录结构

Compressor/
├── backend/
│   ├── requirements.txt      # Python 依赖
│   └── app/
│       ├── main.py           # FastAPI 入口与全部接口
│       ├── config.py         # 配置(读环境变量 / 数据库.md)
│       ├── db.py             # 数据库连接 + wave_annotation 建表语句
│       ├── auth.py           # 登录 token(进程内存存储)
│       ├── services/         # 数据查询与标注服务
│       └── algorithms/       # 周期识别等算法
├── frontend/
│   ├── package.json
│   ├── vite.config.ts        # 开发端口 5173,/api 代理到后端
│   └── src/                  # Vue3 + ElementPlus + ECharts
├── 数据库.md                 # 数据库连接信息(不入库、不提交敏感信息)
└── README.md

三、数据库准备

  1. 确认 MySQL 中已有 compressorsensor 数据库及 wave_filewave_sample 表。
  2. 数据库连接信息放在项目根目录 数据库.md,格式如下(键名支持 host / port / user / password / db_name):
   host : 127.0.0.1
   port : 3306
   user : root
   password : 你的密码
   db_name : compressorsensor
  1. 标注索引表 wave_annotation 无需手动创建:后端启动时会自动执行 CREATE TABLE IF NOT EXISTS(见 backend/app/db.py)。

四、后端部署

4.1 安装依赖

cd Compressor
python3 -m pip install -r backend/requirements.txt

4.2 开发模式启动

cd Compressor
uvicorn app.main:app --app-dir backend --reload --port 8000
  • --reload 修改代码自动重启(仅开发用)。
  • 后端默认监听 127.0.0.1:8000

4.3 生产模式启动

cd Compressor
uvicorn app.main:app --app-dir backend --host 0.0.0.0 --port 8000

注意:登录 token 保存在进程内存中(backend/app/auth.py)。因此生产环境请使用单进程启动(不要加 --workers N,或显式 --workers 1),否则多进程各自持有独立 token 表,登录后请求可能被其他进程判定为未登录。若需要多进程/多实例,请改用 Redis 等共享存储(当前未实现)。

4.4 用环境变量覆盖数据库连接

不修改 数据库.md 也可以直接用环境变量覆盖:

DB_HOST=127.0.0.1 DB_PORT=3306 DB_USER=root DB_PASSWORD='...' \
DB_NAME=compressorsensor \
uvicorn app.main:app --app-dir backend --host 0.0.0.0 --port 8000

五、前端部署

5.1 安装依赖

cd Compressor/frontend
npm install

5.2 开发模式启动

cd Compressor/frontend
npm run dev

浏览器访问 http://localhost:5173。开发服务器把 /api 代理到 http://127.0.0.1:8000(见 vite.config.ts),因此本地开发无需额外配置。

5.3 生产构建

cd Compressor/frontend
npm run build

产物在 frontend/dist/,是纯静态文件。

5.4 生产部署(推荐:nginx 托管 + 反向代理)

dist/ 部署到 nginx,并将 /api 反向代理到后端,前后端同源、无需处理 CORS:

server {
    listen 80;
    server_name your-domain.com;

    root /path/to/Compressor/frontend/dist;
    index index.html;

    # SPA 路由回退(当前为单页应用,一般可省略)
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 后端接口反向代理
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

5.5 生产部署(备选:前端独立域名直连后端)

前端构建时可指定后端地址(跨域直连):

VITE_API_BASE=http://backend-host:8000 npm run build

此时后端需放行该来源,启动后端时设置:

CORS_ORIGIN=http://your-frontend-domain \
uvicorn app.main:app --app-dir backend --host 0.0.0.0 --port 8000

六、环境变量一览

后端相关:

环境变量 默认值 说明
DB_HOST 数据库.mdhost,否则 127.0.0.1 MySQL 地址
DB_PORT 数据库.mdport,否则 3306 MySQL 端口
DB_USER 数据库.mduser,否则 root MySQL 用户
DB_PASSWORD 数据库.mdpassword MySQL 密码
DB_NAME 数据库.mddb_name,否则 compressorsensor 数据库名
DB_CONNECT_TIMEOUT 3 连接超时(秒)
DEMO_MODE never never 数据库失败即报错;always 强制演示数据;auto 数据库失败时回退演示数据
CORS_ORIGIN http://localhost:5173 允许的跨域来源
ANNOTATION_WIDTH 10 标注宽度(几个周期为一段)
AUTH_USER aaabbb 登录账号
AUTH_PASSWORD Aa*147258&cd 登录密码
AUTH_TOKEN_TTL_SECONDS 43200 token 有效期(秒,默认 12 小时)

前端相关:

环境变量 默认值 说明
VITE_API_BASE 空(走相对路径,配合 nginx 反代) 前端请求后端的基础地址,如 http://backend-host:8000

七、登录账号

内置账号(可用 AUTH_USER / AUTH_PASSWORD 环境变量覆盖):

  • 账号:aaabbb
  • 密码:Aa*147258&cd

POST /api/login 外,所有接口都需要在请求头携带 Authorization: Bearer <token>。token 默认 12 小时有效,服务重启后失效,需重新登录。

八、注意事项

  1. 敏感信息数据库.md 含数据库密码,已被 .gitignore 忽略,请勿提交到版本库。
  2. 自动建表wave_annotation 标注表由后端启动时自动创建,无需手动建表。
  3. token 存储:token 存于进程内存,生产请单进程运行(见 4.3)。
  4. 演示模式:无数据库时可用 DEMO_MODE=always 启动,前端与标注功能均可体验(标注走内存,不落库)。
  5. 验证部署:登录后访问 GET /api/health(需带 token)返回 {"status": "ok"} 即表示后端正常。