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

3.2 KiB
Raw Permalink Blame History

yedir-ai 部署指南

本文档用于生产或准生产环境部署。所有真实密钥只应配置在运行环境中,不要提交到 Git。

运行环境

  • Node.js 20
  • pnpm 9.12.3
  • Postgres
  • 可选 Redis
  • Vercel Blob 或 S3-compatible 对象存储
  • 至少一个可用 AI Provider,或在后台设置中配置供应商

基础步骤

pnpm install --frozen-lockfile
pnpm db:migrate
pnpm build
pnpm start

pnpm build 只执行 Next.js 生产构建,不会隐式连接数据库。需要在单机部署脚本中把迁移和构建串起来时,可使用:

pnpm build:with-migrate

本地开发:

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

生产建议:

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 和超时时间。
  • 对管理端、支付、生成任务回调和定时任务接口使用独立密钥或登录权限保护。

部署后烟测

如果可以从部署机或本地访问目标域名,推荐直接使用脚本:

SMOKE_BASE_URL=https://your-domain.com pnpm smoke:routes

也可以手动检查:

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 等观测头。