跳转到内容

生产环境部署

本指南介绍两条生产部署路径:使用全局 npm 包连接自有的 PostgreSQL 与 Redis 运行,以及使用仓库自带的安装脚本部署 AWS 栈。如果只是在单机上试用,请改用快速开始;如果要用容器部署,请参阅使用 Docker 部署。启动凭据、单点登录与安全升级等内容,请参阅运维自托管的 Chorus。

在运行 Web 应用的主机上全局安装 Chorus 命令:

Terminal window
npm install --global @chorus-aidlc/chorus

通过 DATABASE_URL 指向现有的 PostgreSQL 数据库,并提供必需的认证与密钥环境变量,然后启动:

Terminal window
DATABASE_URL='postgresql://chorus:password@db.internal:5432/chorus' \
NEXTAUTH_SECRET="${NEXTAUTH_SECRET:?Set a persistent random secret first}" \
SUPER_ADMIN_EMAIL='admin@example.com' \
SUPER_ADMIN_PASSWORD_HASH='$2b$10$...' \
chorus

启动时,Chorus 会自动应用所有待执行的数据库迁移(prisma migrate deploy,对应 db:migrate 脚本),随后在 8637 端口提供 Web 应用。数据库必须已经存在且可访问;在这条路径上,Chorus 不会为你创建数据库服务器。

Chorus 在生产运行中读取的环境变量:

环境变量是否必需说明
DATABASE_URL是PostgreSQL 连接串,格式为 postgresql://user:password@host:port/dbname。
NEXTAUTH_SECRET多实例时必需所有副本共享的签名密钥。单个 npm 实例可省略,chorus 默认生成并保存在 ~/.chorus-data/.secret。环境变量中的已知占位值会被忽略并触发警告;已保存的密钥若为空或为公开占位值,则停止启动。
SUPER_ADMIN_EMAIL是用于引导 /admin 超级管理员面板的邮箱。
SUPER_ADMIN_PASSWORD_HASH是超级管理员密码的 bcrypt 哈希值。
DEFAULT_USER可选启用内置的邮箱/密码登录,用于首次访问。
DEFAULT_PASSWORD可选内置登录使用的密码。
REDIS_URL可选Redis 连接串。运行多个实例时必需(见下文)。

这些启动凭据的工作方式、bcrypt 哈希的生成方法,以及如何关闭内置登录,请参阅运维自托管的 Chorus。

Chorus 通过 Redis 在多个实例之间传播实时更新(SSE 事件流)。请把 REDIS_URL 设为共享的 Redis,让每个实例都发布并接收相同的事件:

Terminal window
REDIS_URL='redis://default:password@redis.internal:6379'

跨实例的事件传播必须依赖 Redis。 未设置 REDIS_URL 时,Chorus 会退回到进程内的内存事件总线,其作用范围仅限单个进程,在一个实例上产生的更新不会到达其他实例。单实例部署可以不配置 Redis,依靠这种内存回退运行;但只要部署多于一个实例,就必须配置共享 Redis。

所有实例还必须共享同一个安全的 NEXTAUTH_SECRET,确保请求落到任意实例时,Chorus 自签名会话都能通过校验。

Chorus 在 packages/chorus-cdk 下自带一个 AWS CDK 栈,并提供仓库根目录的 install.sh 以交互方式驱动它。该栈会搭建一套完整的、经 HTTPS 前置的部署,并附带托管的 PostgreSQL 与 Redis。

install.sh 会检查 aws、node、pnpm 和 AWS 凭据。请先通过 aws configure 或 AWS_PROFILE 配置凭据。证书要求取决于下列模式。

  • alb(默认):公网 ALB 使用 HTTPS 443 端口,必须提供部署区域内的 ACM 证书,自定义域名可选。
  • cloudfront:CloudFront 提供公网 HTTPS,经 VPC origin 转发到私有 ALB 的 HTTP 80 端口。 默认的 *.cloudfront.net 域名无需自备证书。使用自定义域名时,必须同时提供域名和 us-east-1 的 ACM 证书。已禁用缓存,不会缓存登录后的页面和 API 响应。

在 ./install.sh 中选择模式,或向 CDK 传入 -c deployMode=cloudfront。 default_deploy.sh 会保留选择。非交互安装使用 CHORUS_INSTALL_NONINTERACTIVE=1、 DEPLOY_MODE=alb|cloudfront 及其他必需变量。两种模式都不会创建 DNS 记录;请将自定义域名指向 AlbDnsName 或 CloudFrontDomainName 栈输出,并更新 OIDC 回调地址。

在仓库根目录执行:

Terminal window
./install.sh

安装脚本会依次询问部署配置:

提示是否必需说明
Deployment mode否alb(默认)或 cloudfront。
Stack name否默认为 Chorus。
ACM Certificate ARN取决于模式alb 必须使用部署区域的证书;cloudfront 仅在使用自定义域名时需要 us-east-1 的证书。
Custom domain否cloudfront 模式需同时提供 us-east-1 的证书,否则使用分配的 CloudFront 域名。
Super admin email是用于引导 /admin 超级管理员账号。
Super admin password是至少 8 个字符。在 synth 阶段用 bcrypt 哈希,明文不会写入模板。
NextAuth secret否留空时每次 synth 都会生成新值。提供同一个持久值,才能在重新部署后保留会话。

栈通过 Secrets Manager 共享 NEXTAUTH_SECRET,但 synth 时不会读取已保存的值。 每次部署请在安装器或 CDK 的 nextAuthSecret context 中复用同一值。若此前留空, 请在重新部署前保留 Secrets Manager 中的现有值,避免意外轮换。

收集完这些答案后,install.sh 会安装并构建 CDK 包,引导(bootstrap)CDK 环境,然后部署该栈。它还会把你的答案写入可重复执行的 default_deploy.sh,这样后续部署无需重新询问。

该栈(packages/chorus-cdk/lib/{chorus-stack,service,database,cache}.ts)会创建:

组件是什么关键配置
Application Load Balanceralb 为公网 HTTPS:443;cloudfront 为私有 HTTP:80 源站。转发到 ECS,空闲超时 60 分钟。
CloudFront仅在 cloudfront 模式创建的公网 HTTPS 入口。私有 VPC origin,禁用缓存,可选自定义域名。
ECS Fargate 服务在私有子网中运行 Chorus 容器。期望副本数 2,1024 CPU 单位/2048 MiB,部署断路器可自动回滚。
Aurora Serverless v2(PostgreSQL)托管的 PostgreSQL 集群。存储加密;凭据自动生成并存入 Secrets Manager;备份保留 1 天。
ElastiCache Serverless(Redis)用于跨实例事件的托管 Redis。使用 RBAC 用户;密码存入 Secrets Manager。
Secrets Manager保存生成的数据库、Redis 凭据以及应用密钥。在运行时注入到 ECS 任务中。
操作命令
首次部署./install.sh
重新部署或更新./default_deploy.sh(或 pnpm cdk:deploy)
销毁pnpm cdk:destroy

packages/chorus-cdk 是该栈的权威来源。当你需要精确的资源定义,或想调整容量、保留策略或网络时,请以那里的代码为准。