init: 数字员工平台初始代码
包含前端(Vue3 + VueFlow 画布)、后端(Go)、文档体系。 - 工作台画布:节点拖放、连线模式、右键菜单、AI 助手 - 后端:连接器 API、专员种子数据 - 导航:左侧导航、工坊、市场、控制台
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# 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 关键配置
|
||||
|
||||
```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/eaisalestrain/backend/data/media/;
|
||||
internal;
|
||||
}
|
||||
|
||||
client_max_body_size 2048M;
|
||||
```
|
||||
|
||||
## 4. docker-compose 服务拓扑
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
environment:
|
||||
MYSQL_DATABASE: eaisalestrain
|
||||
MYSQL_USER: eaisalestrain
|
||||
MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
|
||||
backend:
|
||||
build: ./backend
|
||||
environment:
|
||||
DATABASE_URL: mysql+pymysql://eaisalestrain:${DB_PASSWORD}@mysql:3306/eaisalestrain
|
||||
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 |
|
||||
Reference in New Issue
Block a user