Skip to content

設定リファレンス

Takosumi の endpoint を動かす側が設定する環境変数の一覧です。Cloudflare 構成では [vars]wrangler secret put、Bun と PostgreSQL の構成ではプロセスの環境変数として 渡します。導入の手順は自分で動かすにあります。

秘密の値は「必須」欄に秘密と書いてあります。これらは設定ファイルに書かず、 secret ストアから渡してください。

サービス全体

変数必須既定値決めること
TAKOSUMI_ENVIRONMENT任意locallocal / development / test / staging / production のどれか。stagingproduction では暗号鍵と永続ストアの検査が fail-closed になります。NODE_ENVENVIRONMENT も同じ順で読みます
TAKOSUMI_DEV_MODE任意未設定1 / true / yes / on / enabled のどれかにすると、非本番で暗号鍵を設定しないまま起動できます。stagingproduction では効きません
PORT任意8788bun core/index.ts で起動したときの待ち受けポート
TAKOSUMI_DATABASE_URLbun core/index.ts で control plane を単体で動かすとき必須なしcontrol plane の PostgreSQL 接続先。DATABASE_URL も同じ用途で読みます。同梱の compose は control plane と accounts を 1 つの接続で動かすので、そちらでは TAKOSUMI_ACCOUNTS_DATABASE_URL だけを設定します
TAKOSUMI_DB_AUTO_MIGRATE任意falsebun core/index.ts の起動時にマイグレーションを適用するか。既定では適用せず、読み取りだけで検証します。stagingproductiontrue にすると起動が失敗します
TAKOSUMI_DEPLOY_CONTROL_TOKEN実運用では必須・秘密なしoperator 専用 API の bearer。CLI と operator client が使います。Cloudflare 構成でこれを設定しないと、/v1/resources から /v1/form-activations までの Resource 系 API がまるごと 404 になります
TAKOSUMI_METRICS_SCRAPE_TOKEN任意・秘密なし/metrics を読むための bearer。未設定のあいだ /metrics404 を返します
bash
export TAKOSUMI_ENVIRONMENT=production
export TAKOSUMI_DATABASE_URL="postgres://takosumi:<password>@db.example.com:5432/takosumi"
export TAKOSUMI_DEPLOY_CONTROL_TOKEN="$(openssl rand -hex 32)"

秘密の保護

変数必須既定値決めること
TAKOSUMI_SECRET_STORE_PASSPHRASEstaging / production で必須・秘密なしProviderConnection、state、plan を封印する AES-GCM 鍵のもと。UTF-8 で 32 バイト以上が必要です。TAKOSUMI_SECRET_STORE_KEY も同じ用途で読みます
TAKOSUMI_SECRET_STORE_PARTITION_PASSPHRASES任意・秘密なし区画ごとに別の鍵を使う場合の 区画名 → passphrase の JSON。省略すると全区画が上の鍵から導出されます
TAKOSUMI_DATABASE_ENCRYPTION_AT_RESTbun core/index.tsstaging / production で使うとき必須なし保存時暗号化を確認済みとして宣言します。値は verified だけです
TAKOSUMI_DATABASE_ENCRYPTION_EVIDENCE任意operator-attested何をもって確認したかを書いた非 secret の文字列
bash
export TAKOSUMI_SECRET_STORE_PASSPHRASE="$(openssl rand -base64 48)"
export TAKOSUMI_DATABASE_ENCRYPTION_AT_REST=verified
export TAKOSUMI_DATABASE_ENCRYPTION_EVIDENCE="rds-storage-encrypted-kms-key-abc123"

保存時暗号化は、接続文字列の形から推測することなく、宣言された証跡だけで判断します。 bun core/index.ts で起動する control plane は、stagingproduction でこの宣言を 求めます。storage adapter 側の証跡があれば、そちらでも通ります。

サインインと OIDC

accounts は OIDC の issuer そのものです。ここで決めた issuer が、dashboard と、 Takosumi にサインインする製品の入口になります。

変数必須既定値決めること
TAKOSUMI_ACCOUNTS_ISSUERCloudflare 構成では必須PostgreSQL 構成では http://localhost:<port>公開する issuer URL。Cloudflare 構成はリクエスト URL から推測せず、未設定なら起動しません
TAKOSUMI_ACCOUNTS_DATABASE_URLPostgreSQL 構成で必須なしaccounts の PostgreSQL 接続先。takosumi accounts migrate もこれを読みます
TAKOSUMI_ACCOUNTS_ES256_PRIVATE_JWKhttps の issuer で必須・秘密なしid_token に署名する P-256 の JWK。秘密の d を含みます。未設定だとプロセスごとに鍵が変わり、再起動やレプリカ追加で検証が壊れます
TAKOSUMI_ACCOUNTS_ES256_KEY_ID任意JWK の kidJWKS に載せる鍵 ID。JWK に kid も無い場合は配布ごとの固定値になります
TAKOSUMI_ACCOUNTS_ES256_PREVIOUS_PUBLIC_JWKS任意なし鍵の入れ替え中に併記する 1 つ前の公開鍵 JWKS。秘密の d は入れません
TAKOSUMI_ACCOUNTS_OIDC_PAIRWISE_SUBJECT_SECRET署名鍵を設定したとき必須・秘密なしclient ごとの subject を導出する secret。署名鍵だけ設定して省くと起動しません
TAKOSUMI_ACCOUNT_SESSION_HASH_SALT必須・秘密なしセッション ID を保存時にハッシュする salt。Cloudflare では未設定だと起動せず、Bun では NODE_ENV=production または TAKOSUMI_ENV=production のときに起動しません
TAKOSUMI_ACCOUNTS_CLIENTS任意なし静的に登録する OIDC client の JSON 配列。clientIdredirectUris が必須で、tokenEndpointAuthMethodallowedScopes を添えられます
TAKOSUMI_ACCOUNTS_CLIENT_ID / TAKOSUMI_ACCOUNTS_REDIRECT_URIS任意なしclient を 1 つだけ登録する短い書き方。両方そろえて設定します
TAKOSUMI_ACCOUNTS_CLIENT_SECRET任意・秘密なし上の client を機密 client にする場合の secret。PKCE だけの公開 client では空にします
TAKOSUMI_ACCOUNTS_CLIENT_AUTH_METHOD任意secret があれば client_secret_post、無ければ noneclient_secret_basic / client_secret_post / none のどれか
TAKOSUMI_ACCOUNTS_ALLOWED_SCOPES任意なし上の client に許す scope のカンマ区切り
TAKOSUMI_ACCOUNTS_UPSTREAM_PROVIDERS任意なし上流の OAuth / OIDC provider の記述子の JSON 配列。endpoint と client id と secret の変数名を書きます
TAKOSUMI_ACCOUNTS_SUBJECT_SECRET上流 provider を設定したとき必須・秘密なし上流の subject を Takosumi の subject に写すときのハッシュ secret
TAKOSUMI_ACCOUNTS_UPSTREAM_SESSION_TTL_MS任意なし上流サインインで作るセッションの寿命 (ミリ秒)。上流 provider と一緒に設定します
TAKOSUMI_ACCOUNTS_PASSKEY_RP_ID / TAKOSUMI_ACCOUNTS_PASSKEY_RP_NAME / TAKOSUMI_ACCOUNTS_PASSKEY_ORIGIN任意なしpasskey を使う場合の relying party。3 つそろえないと起動しません。PostgreSQL 構成は origin を TAKOSUMI_ACCOUNTS_PASSKEY_RP_ORIGIN からも読みます
TAKOSUMI_ACCOUNTS_PRIVACY_OPERATIONS_TOKEN任意・秘密なしプライバシー要求の完了を記録する operator token

client の登録は次の形です。

bash
export TAKOSUMI_ACCOUNTS_CLIENTS='[{"clientId":"takosumi-dashboard","redirectUris":["https://takosumi.example.com/sign-in/callback"],"tokenEndpointAuthMethod":"none"}]'

上流の provider は、記述子と secret を分けて渡します。記述子に secret の値そのものを 書くと起動しません。

bash
export TAKOSUMI_ACCOUNTS_UPSTREAM_PROVIDERS='[{"providerId":"company-sso","label":"Company SSO","issuer":"https://id.example.com","authorizationEndpoint":"https://id.example.com/oauth/authorize","tokenEndpoint":"https://id.example.com/oauth/token","userInfoEndpoint":"https://id.example.com/oauth/userinfo","clientId":"accounts-client","clientSecretEnv":"COMPANY_SSO_CLIENT_SECRET","redirectUri":"https://takosumi.example.com/sign-in/callback","scopes":["openid","profile","email"]}]'
export COMPANY_SSO_CLIENT_SECRET="<upstream client secret>"

providerId は表示と識別のための名前で、挙動は選びません。何個でも並べられます。

Run と runner

変数必須既定値決めること
TAKOSUMI_ENABLED_RUNNER_PROFILES任意opentofu-default有効にする実行プロファイルの ID をカンマ区切りで。空にすると既定の 1 つだけになります
TAKOSUMI_DEFAULT_RUNNER_PROFILE_ID任意opentofu-defaultプロファイルを指定しない要求が使うプロファイル。上で有効にしたものに限ります
TAKOSUMI_OPENTOFU_PLUGIN_CACHE_DIR任意runner コンテナでは /tmp/takosumi-provider-cacheprovider のバイナリを置いて Run 間で使い回すパス。認証情報、生成した root、plan、state はここに入りません
TAKOSUMI_SOURCE_BUILD_CACHE_DIR任意なしsourceBuild を走らせるときの依存パッケージのキャッシュ置き場。絶対パスで書きます。この下の bun / npm / xdg を Bun と npm に渡します
TAKOSUMI_RUNNER_KEEPALIVE_SECONDS任意0Run を終えたコンテナを何秒生かすか。上限は 900 です。runner の Durable Object は Run ごとなので、増やしても次の Run では使い回しません
TAKOSUMI_SOURCE_ARCHIVE_ZSTD_LEVEL任意3SourceSnapshot を固める zstd の圧縮レベル。1 から 19 まで。低いほど書庫は大きく、初回の取り込みは速くなります
TAKOSUMI_SCHEDULED_SOURCE_POLL_BATCH任意5定期ポーリング 1 回で拾う自動同期 Source の上限
TAKOSUMI_COMPATIBILITY_CHECK_TIMEOUT_MS任意45000互換チェックのソース展開をリクエスト経路で待つ上限 (ミリ秒)

TAKOSUMI_OPENTOFU_PLUGIN_CACHE_DIR を空にすると、runner は Run ごとの作業領域に provider を展開します。共有しない代わりに、Run のあいだの取り違えが起きません。

bash
export TAKOSUMI_ENABLED_RUNNER_PROFILES="opentofu-default"
export TAKOSUMI_OPENTOFU_PLUGIN_CACHE_DIR="/tmp/takosumi-provider-cache"

Cloudflare 構成で使うもの

変数必須既定値決めること
TAKOSUMI_CONTROL_D1_SCHEMA_MODE任意bootstrapbootstrap はリクエスト時にスキーマを用意します。predeployed はそれを止め、マイグレーション台帳が揃っていることを読み取り専用で確かめます
TAKOSUMI_PRODUCTION_HARDENING_GATE任意observeobserve は不足を報告するだけです。enforce は証跡が欠けているあいだ内部の点検 endpoint が 503 を返します
TAKOSUMI_PLATFORM_HARDENING_EVIDENCEenforce のとき必須なし上の点検に答える非 secret の JSON
TAKOSUMI_RELEASE_ACTIVATOR_URL任意なしapply の後にアプリ公開を引き受ける webhook の URL
TAKOSUMI_RELEASE_ACTIVATOR_TOKEN上を設定したとき必須・秘密なしその webhook に渡す bearer
TAKOSUMI_RELEASE_SOURCE_BUCKET任意なしwebhook に渡す SourceSnapshot の bucket 名

これらは wrangler.toml[vars] に書くか、secret として押し込みます。

bash
bunx wrangler secret put TAKOSUMI_RELEASE_ACTIVATOR_TOKEN \
  --config deploy/platform/wrangler.toml

PostgreSQL 構成で使うもの

変数必須既定値決めること
TAKOSUMI_ACCOUNTS_PUBLIC_HOSTNAMECaddy を使う場合は必須app.example.com利用者が叩く公開ホスト名。Caddy はこの名前で ACME の証明書を取ります
TAKOSUMI_ACCOUNTS_BIND_HOST任意0.0.0.0コンテナの中で待ち受けるアドレス
TAKOSUMI_ACCOUNTS_PORT任意8787待ち受けるポート。PORT を設定するとそちらが優先されます
TAKOSUMI_ACCOUNTS_STATIC_DIR任意リポジトリ内の dashboard ビルドdashboard の配布物を置いた場所
TAKOSUMI_ACCOUNTS_PG_POOL_MAX任意20接続プールの上限
TAKOSUMI_ACCOUNTS_PG_IDLE_TIMEOUT_MS任意30000遊んでいる接続を切るまでの時間
TAKOSUMI_ACCOUNTS_PG_CONNECT_TIMEOUT_MS任意5000接続の確立を待つ時間
TAKOSUMI_ACCOUNTS_PG_STATEMENT_TIMEOUT_MS任意300001 文を待つ時間
TAKOSUMI_ACCOUNTS_PG_SSL_MODE任意disabledisable / require / verify-ca / verify-full
TAKOSUMI_ACCOUNTS_PG_SSL_ROOT_CERTverify-ca / verify-full で必須なしPEM の CA バンドル
POSTGRES_PASSWORDcompose を使う場合は必須・秘密なし同梱の compose が PostgreSQL に設定するパスワード

同梱の compose は deploy/node-postgres/.env からこれらを読みます。

bash
cat >> deploy/node-postgres/.env <<'ENV'
TAKOSUMI_ACCOUNTS_PUBLIC_HOSTNAME=takosumi.example.com
TAKOSUMI_ACCOUNTS_PG_SSL_MODE=require
ENV

CLI が読むもの

変数必須既定値決めること
TAKOSUMI_DEPLOY_CONTROL_URL--url を省くとき必須なしCLI が話しかける Takosumi の origin
TAKOSUMI_DEPLOY_CONTROL_TOKEN--token を省くとき必須・秘密なしその origin に渡す bearer
TAKOSUMI_ACCOUNTS_URL--accounts-url を省くとき必須なしtakosumi accounts tokens が話しかける accounts の URL
TAKOSUMI_ACCOUNTS_DATABASE_URL--database-url を省くとき必須なしtakosumi accounts migrate の接続先
TAKOSUMI_LANG任意LANG などから判定ja で始まる値にすると CLI のヘルプが日本語になります。TAKOSUMI_LOCALE も読みます
bash
export TAKOSUMI_DEPLOY_CONTROL_URL=https://takosumi.example.com
export TAKOSUMI_DEPLOY_CONTROL_TOKEN="$(cat ~/.config/takosumi/token)"
takosumi connections list

関連

AGPL-3.0-only