feat: 添加大纲写作功能与服务器端改进
- 新增 OutlineWriterPanel 和 OutlineResultPanel 组件 - 重构服务器端数据库接口 (server/db.js) - 添加 LLM 服务模块 (server/llm.js) - 更新配置和设置面板 - 优化文档选择器和素材面板 - 更新部署文档和环境变量示例
This commit is contained in:
@@ -2,14 +2,14 @@
|
||||
|
||||
## 🏗️ 项目架构
|
||||
|
||||
本项目是一个纯前端 Vue 3 应用,使用 Vite 构建,数据存储在浏览器 IndexedDB 中。
|
||||
本项目为 **前端 + Node/Express 服务端** 架构:前端使用 Vite 构建,数据存储在服务端 SQLite,LLM 调用通过服务端代理。
|
||||
|
||||
### 技术栈
|
||||
- **前端框架**: 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 调用
|
||||
当前版本默认通过服务端代理调用 LLM,API 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
|
||||
# 根据您的部署目标配置
|
||||
|
||||
Reference in New Issue
Block a user