コンテンツにスキップ

本番環境でデプロイ

このガイドでは二つの本番デプロイ方法を扱います。グローバル npm パッケージを自前の PostgreSQL と Redis に接続して実行する方法と、リポジトリのインストーラーで同梱の AWS スタックをプロビジョニングする方法です。単一マシンでの試用には、代わりにはじめにを使ってください。コンテナデプロイについては、Docker でデプロイを参照してください。ブートストラップ用の認証情報、シングルサインオン、安全なアップグレードはセルフホストの Chorus を運用するで扱います。

外部 PostgreSQL に対してグローバルパッケージを実行する

Section titled “外部 PostgreSQL に対してグローバルパッケージを実行する”

Web アプリケーションを実行するホスト上に、Chorus コマンドをグローバルにインストールします。

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

DATABASE_URL で Chorus の接続先を既存の 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)、その後 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 Auth のメール。DEFAULT_PASSWORD も必要です。必要なユーザーとワークスペースを作成しますが、管理対象のローカルアカウントやローカル管理者ロールにはなりません。
DEFAULT_PASSWORD任意組み込みログインのパスワード。
REDIS_URL任意SSE と認証カウンター用の共有 Redis。複数インスタンスの一貫性に必要です。REDIS_HOST と個別 Redis 変数でも設定できます。

これらのブートストラップ用の認証情報の仕組み、bcrypt ハッシュの生成方法、そして組み込みログインを無効にする方法については、セルフホストの Chorus を運用するを参照してください。

複数のインスタンスを実行する

Section titled “複数のインスタンスを実行する”

Chorus は Redis を通じて、インスタンス間でライブ更新(SSE イベントストリーム)を伝播します。REDIS_URL を共有の Redis に設定し、すべてのインスタンスが同じイベントを発行・受信するようにします。

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

Redis は別々の接続でインスタンス間 SSE と共有認証カウンターを提供します。空でない REDIS_URL が優先され、それ以外は REDIS_HOST で TLS(rediss)を使います。ポートは既定で 6379、ユーザー名は default で、ユーザー名は REDIS_PASSWORD の指定時に使われます。非 TLS には明示的な redis:// を使います。URL と host の両方がない場合だけイベントと制限がプロセス内に限定されます。Redis 障害時はプロセスごとの予備制限になり、共有枠や全ログイン拒否にはなりません。予期しない制限エラーは許可側に倒れる場合があります。詳細は共有認証レート制限を参照してください。

AUTH_TRUST_PROXY は既定で無効で、true の場合だけ有効です。AUTH_TRUST_PROXY_HOPS は既定で 1、範囲は 1~16 の整数で、X-Forwarded-For の右から数えます。強制され迂回できないプロキシチェーンのみを信頼してください。HTTPS だけでは不十分です。同梱 CDK の ALB モードは true / 1、CloudFront モードは false / 2 です。VPC トラフィックが CloudFront を迂回してプライベートオリジンに到達できるためです。

管理対象のローカルアカウントはデータベースに保存され、DEFAULT_USER / DEFAULT_PASSWORD では設定しません。アプリに SUPER_ADMIN_EMAIL と SUPER_ADMIN_PASSWORD_HASH を渡し、管理パネルで専用ワークスペースを作成して最初のワークスペース管理者を招待します。ID プロバイダーやメールサービスは不要です。同一ワークスペースで OIDC と併用できず、既存ワークスペースの変換もできません。NEXTAUTH_SECRET を永続化して全レプリカで共有し、共有アクセスには HTTPS と COOKIE_SECURE=true を使います。設定と従来の Default Auth のみを無効にする手順は運用ガイドを参照してください。

全インスタンスに同じ安全な NEXTAUTH_SECRET も設定し、どのインスタンスでも Chorus 署名のセッションを検証できるようにしてください。

Chorus には packages/chorus-cdk に AWS CDK スタックが同梱されており、リポジトリルートの install.sh で対話的にデプロイできます。このスタックは、マネージドの PostgreSQL と Redis を使い、HTTPS で公開される完全なデプロイを構築します。

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 コールバック URL も更新します。

リポジトリのルートから:

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 の証明書と同時に指定。省略時は配布ドメインを使用。
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 Balanceralb は公開 HTTPS:443、cloudfront はプライベート HTTP:80 オリジン。ECS へ転送。アイドルタイムアウト 60 分。
CloudFrontcloudfront モードのみで作成する公開 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 がこのスタックの正となる定義です。正確なリソース定義が必要なとき、あるいは容量、保持期間、ネットワーキングを調整したいときは、そこを参照してください。