# AI 写作工坊 - 生产环境部署指南

## 🏗️ 项目架构

本项目是一个纯前端 Vue 3 应用，使用 Vite 构建，数据存储在浏览器 IndexedDB 中。

### 技术栈
- **前端框架**: Vue 3 + Composition API
- **构建工具**: Vite
- **状态管理**: Pinia
- **数据存储**: IndexedDB (sql.js)
- **API 调用**: 直接调用各 LLM 服务商 API

## 📦 构建生产版本

```bash
# 安装依赖
npm install

# 构建生产版本
npm run build

# 预览生产版本
npm run preview
```

构建产物位于 `dist/` 目录，是纯静态文件。

---

## 🚀 部署方案

### 方案一：Vercel（推荐）

最简单的部署方式，自动 CI/CD。

1. **连接仓库**
   - 访问 [vercel.com](https://vercel.com)
   - 导入 Git 仓库

2. **配置环境变量**
   在 Vercel 控制台设置：
   ```
   VITE_DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions
   VITE_DEEPSEEK_API_KEY=sk-xxx
   VITE_DEEPSEEK_MODEL=deepseek-chat
   ```

3. **部署**
   - 每次 push 到 main 分支自动部署

### 方案二：Netlify

与 Vercel 类似的静态站点托管。

1. 在 Netlify 导入仓库
2. 构建命令: `npm run build`
3. 发布目录: `dist`
4. 在 Site settings > Environment 设置环境变量

### 方案三：自托管 Nginx

适合私有化部署。

1. **构建**
   ```bash
   npm run build
   ```

2. **Nginx 配置**
   ```nginx
   server {
       listen 80;
       server_name your-domain.com;
       root /var/www/ai-writer/dist;
       index index.html;

       # SPA 路由支持
       location / {
           try_files $uri $uri/ /index.html;
       }

       # 静态资源缓存
       location /assets {
           expires 1y;
           add_header Cache-Control "public, immutable";
       }

       # Gzip 压缩
       gzip on;
       gzip_types text/plain text/css application/json application/javascript;
   }
   ```

3. **部署脚本**
   ```bash
   #!/bin/bash
   cd /path/to/ai-writer
   git pull origin main
   npm install
   npm run build
   rsync -avz dist/ /var/www/ai-writer/dist/
   ```

### 方案四：Docker

适合容器化部署。

1. **Dockerfile**
   ```dockerfile
   # 构建阶段
   FROM node:20-alpine as builder
   WORKDIR /app
   COPY package*.json ./
   RUN npm ci
   COPY . .
   ARG VITE_DEEPSEEK_API_KEY
   ARG VITE_DEEPSEEK_API_URL
   RUN npm run build

   # 运行阶段
   FROM nginx:alpine
   COPY --from=builder /app/dist /usr/share/nginx/html
   COPY nginx.conf /etc/nginx/conf.d/default.conf
   EXPOSE 80
   CMD ["nginx", "-g", "daemon off;"]
   ```

2. **构建并运行**
   ```bash
   docker build \
     --build-arg VITE_DEEPSEEK_API_KEY=sk-xxx \
     --build-arg VITE_DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions \
     -t ai-writer .
   
   docker run -d -p 8080:80 ai-writer
   ```

---

## ⚠️ 安全注意事项

### API Key 安全

由于这是纯前端应用，API Key 会被打包到 JS 文件中。有以下解决方案：

1. **内部使用**：如果只在内网使用，风险可控

2. **API 中继**（推荐）：
   - 部署一个后端代理服务
   - 前端调用代理，代理转发到 LLM API
   - API Key 只存在于后端

3. **IP 白名单**：
   - 在 LLM 服务商配置 API Key 的 IP 白名单
   - 限制只能从部署服务器的 IP 调用

### 环境变量最佳实践

```bash
# 生产环境 .env.production
VITE_DEEPSEEK_API_URL=https://your-proxy.com/v1/chat/completions
VITE_DEEPSEEK_API_KEY=xxx
```

---

## 📊 推荐部署架构

```
                    ┌─────────────┐
                    │   用户浏览器  │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │  CDN / 边缘  │  (Vercel/Netlify/CloudFlare)
                    └──────┬──────┘
                           │
              ┌────────────┴────────────┐
              │                         │
       ┌──────▼──────┐          ┌──────▼──────┐
       │  静态资源    │          │  API 中继   │ (可选)
       │  (dist/)    │          │  (后端代理)  │
       └─────────────┘          └──────┬──────┘
                                       │
                                ┌──────▼──────┐
                                │  LLM API    │
                                │  (DeepSeek) │
                                └─────────────┘
```

---

## 🔧 持续部署 (GitHub Actions 示例)

```yaml
# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          
      - name: Install & Build
        run: |
          npm ci
          npm run build
        env:
          VITE_DEEPSEEK_API_KEY: ${{ secrets.VITE_DEEPSEEK_API_KEY }}
          VITE_DEEPSEEK_API_URL: ${{ secrets.VITE_DEEPSEEK_API_URL }}
          
      - name: Deploy to Server
        # 根据您的部署目标配置
```

---

## 📝 总结

| 方案 | 复杂度 | 适用场景 | 成本 |
|-----|-------|---------|-----|
| Vercel | ⭐ | 快速上线、个人项目 | 免费 |
| Netlify | ⭐ | 同上 | 免费 |
| Nginx | ⭐⭐ | 私有化部署 | 服务器成本 |
| Docker | ⭐⭐⭐ | 企业级、容器编排 | 服务器成本 |

**推荐**：先用 Vercel 快速部署验证，后续根据需求迁移到自托管方案。
