feat: 添加大纲写作功能与服务器端改进

- 新增 OutlineWriterPanel 和 OutlineResultPanel 组件
- 重构服务器端数据库接口 (server/db.js)
- 添加 LLM 服务模块 (server/llm.js)
- 更新配置和设置面板
- 优化文档选择器和素材面板
- 更新部署文档和环境变量示例
This commit is contained in:
empty
2026-01-21 17:23:48 +08:00
parent d7f1664766
commit 94301c81a6
29 changed files with 3430 additions and 1373 deletions

View File

@@ -2,14 +2,14 @@
## 🏗️ 项目架构
本项目是一个纯前端 Vue 3 应用,使用 Vite 构建,数据存储在浏览器 IndexedDB 中
本项目**前端 + Node/Express 服务端** 架构:前端使用 Vite 构建,数据存储在服务端 SQLiteLLM 调用通过服务端代理
### 技术栈
- **前端框架**: Vue 3 + Composition API
- **构建工具**: Vite
- **状态管理**: Pinia
- **数据存储**: IndexedDB (sql.js)
- **API 调用**: 直接调用各 LLM 服务商 API
- **数据存储**: SQLite服务端
- **API 调用**: 服务端 LLM 代理
## 📦 构建生产版本
@@ -24,7 +24,7 @@ npm run build
npm run preview
```
构建产物位于 `dist/` 目录,是纯静态文件
构建产物位于 `dist/` 目录,前端可静态托管,但仍需单独部署服务端 API
---
@@ -39,12 +39,8 @@ npm run preview
- 导入 Git 仓库
2. **配置环境变量**
在 Vercel 控制台设置:
```
VITE_DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions
VITE_DEEPSEEK_API_KEY=sk-xxx
VITE_DEEPSEEK_MODEL=deepseek-chat
```
- 前端:仅需设置 API 基地址(指向自建服务端)
- 服务端:配置 LLM 的 API Key 与模型
3. **部署**
- 每次 push 到 main 分支自动部署
@@ -56,7 +52,7 @@ npm run preview
1. 在 Netlify 导入仓库
2. 构建命令: `npm run build`
3. 发布目录: `dist`
4. 在 Site settings > Environment 设置环境变量
4. 在 Site settings > Environment 设置前端环境变量(如 `VITE_API_BASE`
### 方案三:自托管 Nginx
@@ -106,7 +102,7 @@ npm run preview
适合容器化部署。
1. **Dockerfile**
1. **Dockerfile(前端静态站点)**
```dockerfile
# 构建阶段
FROM node:20-alpine as builder
@@ -114,8 +110,7 @@ npm run preview
COPY package*.json ./
RUN npm ci
COPY . .
ARG VITE_DEEPSEEK_API_KEY
ARG VITE_DEEPSEEK_API_URL
ARG VITE_API_BASE
RUN npm run build
# 运行阶段
@@ -128,12 +123,12 @@ npm run preview
2. **构建并运行**
```bash
docker build \
--build-arg VITE_DEEPSEEK_API_KEY=sk-xxx \
--build-arg VITE_DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions \
docker build \\
--build-arg VITE_API_BASE=http://your-api-host:3001/api \\
-t ai-writer .
docker run -d -p 8080:80 ai-writer
\n+> ⚠️ 注意:服务端 API 需单独部署Node/Express + SQLite并配置 `.env` 中的 LLM 密钥。
```
---
@@ -142,25 +137,17 @@ npm run preview
### API Key 安全
由于这是纯前端应用API Key 会被打包到 JS 文件中。有以下解决方案:
1. **内部使用**:如果只在内网使用,风险可控
2. **API 中继**(推荐):
- 部署一个后端代理服务
- 前端调用代理,代理转发到 LLM API
- API Key 只存在于后端
3. **IP 白名单**
- 在 LLM 服务商配置 API Key 的 IP 白名单
- 限制只能从部署服务器的 IP 调用
当前版本默认通过服务端代理调用 LLMAPI Key 不再暴露在前端。
### 环境变量最佳实践
```bash
# 生产环境 .env.production
VITE_DEEPSEEK_API_URL=https://your-proxy.com/v1/chat/completions
VITE_DEEPSEEK_API_KEY=xxx
# 服务端 .env
DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions
DEEPSEEK_API_KEY=xxx
# 前端 .env.production
VITE_API_BASE=https://your-api-host/api
```
---
@@ -179,8 +166,8 @@ VITE_DEEPSEEK_API_KEY=xxx
┌────────────┴────────────┐
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ 静态资源 │ │ API 中继 │ (可选)
│ (dist/) │ │ (后端代理)
│ 静态资源 │ │ Node API │
│ (dist/) │ │ + SQLite
└─────────────┘ └──────┬──────┘
┌──────▼──────┐
@@ -217,8 +204,7 @@ jobs:
npm ci
npm run build
env:
VITE_DEEPSEEK_API_KEY: ${{ secrets.VITE_DEEPSEEK_API_KEY }}
VITE_DEEPSEEK_API_URL: ${{ secrets.VITE_DEEPSEEK_API_URL }}
VITE_API_BASE: ${{ secrets.VITE_API_BASE }}
- name: Deploy to Server
# 根据您的部署目标配置