本番環境でデプロイ
このガイドでは二つの本番デプロイ方法を扱います。グローバル npm パッケージを自前の PostgreSQL と Redis に接続して実行する方法と、リポジトリのインストーラーで同梱の AWS スタックをプロビジョニングする方法です。単一マシンでの試用には、代わりにはじめにを使ってください。コンテナデプロイについては、Docker でデプロイを参照してください。ブートストラップ用の認証情報、シングルサインオン、安全なアップグレードはセルフホストの Chorus を運用するで扱います。
外部 PostgreSQL に対してグローバルパッケージを実行する
Section titled “外部 PostgreSQL に対してグローバルパッケージを実行する”Web アプリケーションを実行するホスト上に、Chorus コマンドをグローバルにインストールします。
npm install --global @chorus-aidlc/chorusDATABASE_URL で Chorus の接続先を既存の PostgreSQL データベースに指定し、必要な認証と秘密鍵の変数を設定してから起動します。
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)、その後 Web アプリケーションを 8637 ポートで提供します。データベースはあらかじめ作成され、接続可能になっている必要があります。この方法では、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 を運用するを参照してください。
複数のインスタンスを実行する
Section titled “複数のインスタンスを実行する”Chorus は Redis を通じて、インスタンス間でライブ更新(SSE イベントストリーム)を伝播します。REDIS_URL を共有の Redis に設定し、すべてのインスタンスが同じイベントを発行・受信するようにします。
REDIS_URL='redis://default:password@redis.internal:6379'インスタンス間のイベント伝播には Redis が必須です。 REDIS_URL がないと、Chorus は単一プロセス内でのみ機能するメモリ内のイベントバスにフォールバックします。あるインスタンスで行われた更新は、他のインスタンスには決して届きません。単一インスタンスのデプロイなら、このメモリ内フォールバックを使って Redis なしで実行できますが、複数のインスタンスで動かすデプロイでは共有の Redis が必須です。
全インスタンスに同じ安全な NEXTAUTH_SECRET も設定し、どのインスタンスでも Chorus 署名のセッションを検証できるようにしてください。
AWS CDK スタックをデプロイする
Section titled “AWS CDK スタックをデプロイする”Chorus には packages/chorus-cdk に AWS CDK スタックが同梱されており、リポジトリルートの install.sh で対話的にデプロイできます。このスタックは、マネージドの PostgreSQL と Redis を使い、HTTPS で公開される完全なデプロイを構築します。
install.sh は aws、node、pnpm と AWS 認証情報を確認します。先に aws configure
または AWS_PROFILE を設定してください。証明書の要件は次のモードによって異なります。
デプロイモードを選ぶ
Section titled “デプロイモードを選ぶ”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 コールバック URL も更新します。
インストーラーを実行する
Section titled “インストーラーを実行する”リポジトリのルートから:
./install.shインストーラーはデプロイ設定を尋ねます。
| プロンプト | 必須 | 備考 |
|---|---|---|
| Deployment mode | いいえ | alb(既定)または cloudfront。 |
| Stack name | いいえ | デフォルトは Chorus。 |
| ACM Certificate ARN | モード次第 | alb はデプロイ先リージョンで必須。cloudfront はカスタムドメイン利用時のみ us-east-1 の証明書が必須。 |
| Custom domain | いいえ | cloudfront では us-east-1 の証明書と同時に指定。省略時は配布ドメインを使用。 |
| 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 パッケージをインストールしてビルドし、CDK 環境をブートストラップして、スタックをデプロイします。また、あなたの回答を含む再実行可能な default_deploy.sh を書き出すので、以降のデプロイでは再度尋ねられません。
スタックがプロビジョニングするもの
Section titled “スタックがプロビジョニングするもの”このスタックは以下を作成します。
| コンポーネント | 概要 | 主な設定 |
|---|---|---|
| Application Load Balancer | alb は公開 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 タスクへ注入されます。 |
デプロイ、更新、破棄
Section titled “デプロイ、更新、破棄”| 操作 | コマンド |
|---|---|
| 初回デプロイ | ./install.sh |
| 再デプロイまたは更新 | ./default_deploy.sh(または pnpm cdk:deploy) |
| 破棄 | pnpm cdk:destroy |
packages/chorus-cdk がこのスタックの正となる定義です。正確なリソース定義が必要なとき、あるいは容量、保持期間、ネットワーキングを調整したいときは、そこを参照してください。