- 后端:新增 /api/audio/transcribe 接口,调用 Ollama whisper 进行语音识别 - 前端:新增 AudioTranscribePage.vue 页面,支持 MP3/WAV/M4A/OGG/FLAC 等格式 - 注册路由、工具卡片、智能助手欢迎语更新 Co-Authored-By: Claude Code <noreply@anthropic.com>
5.0 KiB
5.0 KiB
AR04 — 部署架构设计
版本:V1.1 | 部署模式:纯本地离线 完整部署步骤请见 docs/deploy.md
⚠️ 本文档为 V1.1 设计期历史快照(Docker + FastAPI 拓扑),不再反映当前实现。 当前部署为 Go 单二进制 + MySQL 8.0 + FAISS + systemd + Clonezilla 整盘克隆,无 Docker、无 Python 运行时,以
docs/deploy.md为准。
1. 部署拓扑
┌──────────────────────┐
│ 内网员工浏览器 │
│ http://train.bosun │
└──────────┬───────────┘
│
┌─────▼──────┐
│ Nginx │
│ :80 / :443 │
│ │
│ · 前端静态 │
│ · API 反代 │
│ · SSE 支持 │
└──┬──────┬──┘
│ │
┌──────────────┘ └──────────────┐
│ │
┌─────▼──────┐ ┌────────▼────────┐
│ FastAPI │ │ Vue 静态打包 │
│ :8000 │ │ nginx html/ │
│ │ └─────────────────┘
│ · JWT │
│ · 业务 │
└──┬──┬──┬──┘
│ │ │
┌───────────┘ │ └──────────────┐
│ │ │
┌──▼─────┐ ┌────▼───────┐ ┌──────▼──────────┐
│ MySQL │ │ data/media │ │ LibreOffice │
│ 8.0 │ │ 文件存储 │ │ 预览容器 │
│ :3306 │ │ │ │ :8100 │
└────────┘ └────────────┘ └─────────────────┘
│
│ (文档转换)
▼
┌──────────────┐
│ 内网 LLM │
│ Ollama/ │
│ vLLM/网关 │
│ :11434 │
└──────────────┘
2. 服务清单
| 服务 | 端口 | 基础镜像/依赖 | 说明 |
|---|---|---|---|
| Nginx | 80/443 | nginx:alpine | HTTP 反代 + 前端静态资源 |
| FastAPI | 8000 | python:3.10 | 后端 API(uvicorn 启动) |
| MySQL | 3306 | mysql:8.0 | 数据库 |
| LibreOffice | 8100 | 自定义 Docker 镜像 | 文档转 PDF 预览 |
| LLM 服务 | 11434 | ollama/vllm | 内网 AI 推理 |
3. Nginx 关键配置
# SPA 路由
location / {
try_files $uri $uri/ /index.html;
}
# API 反代 + SSE
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 300s;
}
# 媒体文件预览(仅内部)
location /media/ {
alias /opt/eai_agentplatform/backend/data/media/;
internal;
}
client_max_body_size 2048M;
4. docker-compose 服务拓扑
version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: eai_agentplatform
MYSQL_USER: eai_agentplatform
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
backend:
build: ./backend
environment:
DATABASE_URL: mysql+pymysql://eai_agentplatform:${DB_PASSWORD}@mysql:3306/eai_agentplatform
JWT_SECRET: ${JWT_SECRET}
LLM_BASE_URL: http://llm-server:11434/v1
volumes:
- ./data/media:/app/data/media
depends_on:
- mysql
libreoffice:
image: libreoffice-preview:latest
volumes:
- ./data/media:/data/media
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./frontend/dist:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- backend
5. 安全边界
| 层级 | 措施 |
|---|---|
| 网络 | 仅监听内网,不暴露公网端口 |
| 认证 | JWT token 校验 + bcrypt 密码 |
| 鉴权 | 后端 API role 校验(非前端) |
| 文件 | 白名单扩展名 + UUID 命名 + 只读预览 |
| 数据库 | 独立用户 + 最小权限 |
| LLM | 仅内网地址,严禁公网 API |