paper-burner/server/ENV_CONFIG.md

129 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 环境变量配置指南
本文档说明 Paper Burner X 项目的环境变量配置要求。
## 快速开始
### 开发环境(开箱即用)
开发环境可以使用默认值,系统会自动生成安全的开发密钥并给出警告提示:
```bash
# 无需配置即可运行(会有警告提示)
npm run dev
```
### 生产环境(必须配置)
生产环境必须设置以下关键安全变量:
```bash
# 必需的环境变量
NODE_ENV=production
JWT_SECRET=<生成强随机字符串>
ENCRYPTION_SALT=<生成强随机字符串>
CORS_ORIGIN=https://yourdomain.com,https://www.yourdomain.com
# 推荐配置
FILE_VALIDATION_STRICT=true
DATABASE_URL=postgresql://...
```
## 环境变量说明
### 🔴 必需配置(生产环境)
| 变量名 | 说明 | 示例 | 开发环境 | 生产环境 |
|--------|------|------|----------|----------|
| `NODE_ENV` | 环境模式 | `production` | 可选 | **必需** |
| `JWT_SECRET` | JWT 签名密钥 | 随机字符串 | 自动生成 | **必需** |
| `ENCRYPTION_SALT` | 加密 salt | 随机字符串 | 使用默认值 | **必需** |
### 🟡 部署配置
| 变量名 | 说明 | 示例 | 默认值 |
|--------|------|------|--------|
| `DEPLOYMENT_MODE` | 部署模式 | `frontend` / `backend` | `frontend` |
| `CORS_ORIGIN` | CORS 允许的源 | `https://example.com` | 开发环境允许所有源 |
| `PORT` | 服务器端口 | `3000` | `3000` |
### 🟢 安全配置
| 变量名 | 说明 | 示例 | 默认值 |
|--------|------|------|--------|
| `DISABLE_CSP` | 是否禁用 CSP | `true` / `false` | `false` |
| `CSP_ALLOW_INLINE` | 是否允许内联脚本 | `true` / `false` | 前端模式自动启用 |
| `FILE_VALIDATION_STRICT` | 文件类型验证严格模式 | `true` / `false` | `false` |
| `ALLOWED_MIME_TYPES` | 允许的文件类型 | `application/pdf,text/markdown` | 内置白名单 |
| `MAX_UPLOAD_SIZE` | 最大文件大小MB | `100` | `100` |
### 🔵 数据库配置
| 变量名 | 说明 | 示例 |
|--------|------|------|
| `DATABASE_URL` | Prisma 数据库连接 URL | `postgresql://user:pass@localhost:5432/db` |
### 🟣 JWT 配置
| 变量名 | 说明 | 示例 | 默认值 |
|--------|------|------|--------|
| `JWT_EXPIRES_IN` | JWT 过期时间 | `7d` | `7d` |
## 生成安全密钥
### 使用 OpenSSL
```bash
# 生成 JWT_SECRET32 字节 Base64
openssl rand -base64 32
# 生成 ENCRYPTION_SALT32 字节 Base64
openssl rand -base64 32
```
### 使用 Node.js
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```
## 配置示例
### .env开发环境
```bash
NODE_ENV=development
DEPLOYMENT_MODE=frontend
# JWT_SECRET 和 ENCRYPTION_SALT 可以不设置,系统会自动生成
```
### .env生产环境
```bash
NODE_ENV=production
JWT_SECRET=<生成的强随机字符串>
ENCRYPTION_SALT=<生成的强随机字符串>
CORS_ORIGIN=https://yourdomain.com,https://www.yourdomain.com
FILE_VALIDATION_STRICT=true
DATABASE_URL=postgresql://user:password@localhost:5432/paperburner
```
## 安全提示
1. **永远不要将 `.env` 文件提交到 Git**
2. **生产环境必须设置所有安全相关变量**
3. **定期轮换密钥**(会影响现有用户登录,需要配合迁移策略)
4. **使用强随机字符串作为密钥**(至少 32 字节)
5. **限制 CORS_ORIGIN 为实际需要的域名**
## 迁移注意事项
⚠️ **重要**:更改 `ENCRYPTION_SALT` 会导致已加密的数据无法解密。如需更改 salt需要
1. 先解密所有数据
2. 更改 salt
3. 重新加密数据
因此,建议在生产环境部署前就设置好 `ENCRYPTION_SALT`