ai-chatbot/docs/deployment.md
2026-05-27 14:15:58 +08:00

109 lines
3.2 KiB
Markdown
Raw Permalink 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.

# yedir-ai 部署指南
本文档用于生产或准生产环境部署。所有真实密钥只应配置在运行环境中,不要提交到 Git。
## 运行环境
- Node.js 20
- pnpm 9.12.3
- Postgres
- 可选 Redis
- Vercel Blob 或 S3-compatible 对象存储
- 至少一个可用 AI Provider,或在后台设置中配置供应商
## 基础步骤
```bash
pnpm install --frozen-lockfile
pnpm db:migrate
pnpm build
pnpm start
```
`pnpm build` 只执行 Next.js 生产构建,不会隐式连接数据库。需要在单机部署脚本中把迁移和构建串起来时,可使用:
```bash
pnpm build:with-migrate
```
本地开发:
```bash
AUTH_TRUST_HOST=true PORT=3001 pnpm dev
```
## 环境变量分组
### Core / Auth
必须配置 `AUTH_SECRET` 和生产域名 `AUTH_URL`。只有在受信反向代理后部署,并确认 Host 头不会被用户伪造时,才允许设置 `AUTH_TRUST_HOST=true`。
Google、钉钉、邮箱验证等登录能力可以通过后台设置和环境变量组合启用。管理员初始化使用 `ADMIN_EMAIL` / `ADMIN_PASSWORD`,完成后建议移除或轮换。
### Database
主数据库使用 `POSTGRES_URL`。连接池默认值来自 `lib/db/index.ts`:
- `POSTGRES_MAX_CONNECTIONS=10`
- `POSTGRES_IDLE_TIMEOUT_SECONDS=20`
- `POSTGRES_CONNECT_TIMEOUT_SECONDS=5`
- `POSTGRES_MIGRATION_TIMEOUT_SECONDS=120`
生产环境可按数据库规格调整,但不建议无上限放大连接数。
### Object Storage
优先使用后台数据库中的存储配置;环境变量 S3 和 `BLOB_READ_WRITE_TOKEN` 作为 fallback。
S3 公网访问建议配置 `S3_PUBLIC_URL`,避免把内部 endpoint 暴露给前端或用户。
### AI Providers
大多数供应商都可以在后台设置中配置。环境变量适合作为 bootstrap 或 fallback,例如 `DASHSCOPE_API_KEY`、`FAL_KEY`、`TRIPO_API_KEY`、`KITTYCAD_API_TOKEN`。
不要在日志、README、issue 或截图中暴露真实 API Key、签名 URL、OAuth code、session、cookie。
### Logging
生产建议:
```env
LOG_LEVEL=info
LOG_INCLUDE_STACK=false
NEXT_PUBLIC_ENABLE_CLIENT_LOGS=false
```
日志会经过 `lib/observability` 脱敏。需要排查问题时,优先临时提高服务端 `LOG_LEVEL`,不要开启浏览器生产日志。
## 反向代理与安全
- 代理层应保留正确的 `X-Forwarded-*` 头。
- 只在可信代理后启用 `AUTH_TRUST_HOST=true`。
- 上传和生成接口可能处理大文件,代理需要配置足够的 body size 和超时时间。
- 对管理端、支付、生成任务回调和定时任务接口使用独立密钥或登录权限保护。
## 部署后烟测
如果可以从部署机或本地访问目标域名,推荐直接使用脚本:
```bash
SMOKE_BASE_URL=https://your-domain.com pnpm smoke:routes
```
也可以手动检查:
```bash
curl -I https://your-domain.com/
curl -I https://your-domain.com/classic
curl -I https://your-domain.com/chat/test-id
curl -I https://your-domain.com/settings
curl -I "https://your-domain.com/api/site-settings?scope=home"
```
预期:
- `/` 返回 200。
- `/classic` 和 `/chat/test-id` 重定向到 `/`。
- `/settings` 未登录重定向到登录页。
- 首页公开接口带有 `X-Cache` / `X-Fallback` / `Server-Timing` 等观测头。