環境変数
セルフマネージドの ObjectOS デプロイメント(Community または Enterprise)の環境の契約です。各変数が何を決めるか、どのエディションがそれを読むか、どの組み合わせが起動時に失敗するか、どの名前が廃止されたかを説明します。
環境変数はデプロイメントレベルの判断を担います。どのイメージが動いているか、データがどこにあるか、このデプロイメントが何であることを認められているか。デプロイメントの稼働中にテナントや管理者が変更できるべきものは、代わりにシステム設定に置きます。
このページは契約です。各変数が何を決めるか、そして 2 つの変数が食い違ったときに何が起きるかを示します。エディションの列は、どのイメージがそれを読むかを示します。
- 両方:オープンな Community イメージ
ghcr.io/objectstack-ai/objectstackと、ライセンスされた Enterprise イメージの両方。 - Enterprise:Enterprise イメージ、またはそれに付属するデプロイバンドルのみ。
Community では、設定する値は Docker に示しています。Enterprise では、コピーする値はリリースに付属するデプロイバンドルにあります。.env にコピーして編集する、注釈付きのテンプレートです。そのテンプレートはリリースに固定されていますが、このページはそうではありません。両者が異なる場合は、イメージとともに提供されたテンプレートが優先されます。
命名。 ObjectOS が所有する変数は
OS_の接頭辞を使います。1.0 より前の接頭辞のない名前のいくつかは引き続き機能し、一度だけ非推奨の警告を出します。レガシーな名前を参照してください。覚えている名前を使う前に知っておくべきグループが他に 2 つあります。何にも読まれないか起動をその場で拒否する廃止された名前と、まだ解決されるレガシーな名前です。
すべてのデプロイメントが下す判断
| 変数 | エディション | 決めること |
|---|---|---|
OS_EE_IMAGE | Enterprise | どのイメージを実行するか。ランタイムではなく、バンドルの Compose スタックが読みます。タグではなく、必ずダイジェストを固定してください。Docker を参照してください。 |
OS_AUTH_SECRET | 両方 | セッションの署名に使う基本シークレット。未設定の場合、サインインエンドポイントはスキップされ、サーバーは認証なしで実行されます。すべてのレプリカで同一でなければなりません。ローテーションすると既存のすべてのセッションが無効になります。 |
OS_DATABASE_URL | 両方 | デプロイメントが動作するデータベース。未設定の場合、ランタイムはホームディレクトリの下に SQLite ファイルを書き込み、コンテナではファイルシステムとともに失われます。本番ではマネージド PostgreSQL に向けてください。Enterprise では、バンドルのデータベースサービスを削除します。 |
OS_SECRET_KEY | 両方 | 保存されたすべてのシークレット(暗号化された設定、secret フィールド、データソースの認証情報)を暗号化するキー。未設定の場合、ランタイムはキーを生成して自身のファイルシステムに保持し、コンテナでは再起動で失われます。32 バイトの値(openssl rand -hex 32)を設定し、シークレットマネージャーに保管し、データベースと一緒にバックアップしてください。複数のレプリカでは必須であり、すべてのレプリカで同じ値でなければなりません。マルチノードを参照してください。 |
OS_DB_USER、OS_DB_PASSWORD、OS_DB_NAME | Enterprise | 提供される Compose スタックのバンドルのデータベースサービスをプロビジョニングします。OS_DATABASE_URL の中の認証情報はこれらと一致していなければなりません。マネージドデータベースを使う場合は関係ありません。 |
AI_GATEWAY_API_KEY | Enterprise | 「データに質問する」エージェントの背後にある AI プロバイダーの認証情報。 |
ライセンスとクラウドの姿勢
この 2 つはペアです。片方を設定するときにもう片方を読まないのは、このページで最も高くつく間違いです。サポートされない組み合わせは、劣化するのではなく起動時に拒否されるからです。
| 変数 | エディション | 決めること |
|---|---|---|
OS_LICENSE_KEY | Enterprise | デプロイメントのエンタイトルメント。ライセンスにはモードもあります。通常のライセンスはコントロールプレーンに対してオンラインで検証され、エアギャップライセンスはネットワークトラフィックを一切伴わずにローカルで検証されます。モードは発行されたライセンスの性質であり、ここで設定するものではありません。 |
OS_CLOUD_URL | 両方 | このデプロイメントにコントロールプレーンがあるかどうか、あるならどれか。off(および別名の none、local、disabled)はコントロールプレーンなしを意味します。マーケットプレイスもライセンスの検証もありません。 |
Community にはライセンスがないため、OS_CLOUD_URL が決めるのは、デプロイメントがコントロールプレーンに接続するかどうかだけです。Enterprise では 2 つの変数はペアであり、次の 2 つの帰結があります。どちらも人を驚かせます。
- 未設定は「off」ではありません。どちらのエディションでもです。未設定の
OS_CLOUD_URLは公開コントロールプレーンに解決されます。中立な値だったことは一度もなく、接続された動作を選びます。誰とも通信しないはずのデプロイメントは、offをはっきりと書かなければなりません。 - 通常のライセンスと
offの組み合わせは起動時に拒否され、両方の変数が名指しされます。これは劣化した状態ではなく不可能な状態です。オンラインライセンスはコントロールプレーンを必要とする交換によって検証されるため、コントロールプレーンが設定されていなければ交換は行われず(今回の起動でも以降の起動でも)、猶予期間も始まりません。猶予は最後に成功した検証から計測されるからです。
サポートされる組み合わせの完全な表と、拒否の理由はエアギャップデプロイメントにあります。
マルチ組織のデプロイメント
壁で区切られたテナンシーの姿勢は、組織ごとの分離の壁を立てます。これはライセンスされた機能であり、さらに 3 つの判断を必須にします。それぞれが宣言されるまで、ランタイムは起動を拒否します。どの値を宣言しても受け入れられますが、決めないことは受け入れられません。
| 変数 | エディション | 決めること |
|---|---|---|
OS_TENANCY_POSTURE | 両方。壁で区切られた値は Enterprise | 組織を互いに分離するかどうか。未設定または single は 1 つの組織です。壁で区切られた値は isolated と group です。壁で区切られた姿勢にはライセンスが必要です。ライセンスがない場合、ランタイムは分離されているふりをしてトラフィックを提供するのではなく、起動時に終了します。 |
OS_AUTH_MEMBERSHIP_POLICY | 両方 | 新しいサインアップが何に参加するか。auto はすべての新規ユーザーをデプロイメントのデフォルトの組織に紐づけます。単一組織の環境には適切ですが、メンバーシップそのものがテナントの境界である場所では不適切です。invite-only は、明示的な行為(ワークスペースの作成、招待の承諾、管理者、SSO プロビジョニング)によってのみメンバーシップを付与します。Setup → Authentication → Membership でも設定できます。ここで設定するとその値に固定され、Setup のフィールドは読み取り専用になります。 |
OS_AI_STUDIO_AGENTS | Enterprise | どの AI エージェントをマウントするか。ask と build のカンマ区切りの部分集合です。未設定では両方がマウントされます。ask は読み取ります。build はメタデータを作成します。そしてメタデータの範囲は組織ではなくデプロイメントなので、共有データベースでは、ある顧客の build のターンが、他のすべての顧客が使うスキーマを書き換えます。AI シートはこれをカバーしません。両方のエージェントに対する 1 つのフラグです。スペルの誤った値は、黙って両方のマウントにフォールバックするのではなく、起動を失敗させます。 |
OS_PLATFORM_OWNER_EMAIL | 両方 | デプロイメントのプラットフォーム管理者が誰か。1 つのメールアドレス、またはカンマ区切りのリストです。壁で区切られた姿勢では、プラットフォーム管理者の地位の唯一の根拠です(ObjectStack 17.5 以降、そこでは admin_full_access の付与はその地位を与えません)。未設定または空の場合、ランタイムは起動を拒否します。列挙されたアカウントは、アドレスが確認されて初めてその地位を持つため、デプロイメントには確認の手段(メールの送信手段、または信頼できるフェデレーションによるサインイン)が必要です。解析できないエントリが 1 つでもあると、リスト全体が無効になります。変更は再起動で反映されます。 |
単一組織のデプロイメントでは、これらのチェックは一切行われません。後の 3 つは未設定のままでかまいません。OS_PLATFORM_OWNER_EMAIL で指定されていない限り、最初に登録したアカウントがプラットフォーム管理者になります。指定されている場合は、その確認済みのアカウントがなります。
マルチノード
マルチノードは Enterprise の機能です。Community のデプロイメントはレプリカ 1 つで実行され、それ以上を宣言すると(OS_CLUSTER_REPLICAS が 1 より大きい)、プロセスごとのロックでレプリカを実行するのではなく、起動を拒否します。レプリカを 2 つ以上にスケールすると、必須となるものが変わります。クラスタードライバー、そしてすべてのレプリカで同じ OS_SECRET_KEY と OS_AUTH_SECRET です。
| 変数 | エディション | 決めること |
|---|---|---|
OS_CLUSTER_DRIVER | Enterprise | 共有のコーディネーターを有効にします。未設定は、組み込みのインメモリのコーディネーターでレプリカ 1 つを意味します。 |
OS_REDIS_URL | Enterprise | そのコーディネーターの場所。 |
OS_CLUSTER_REPLICAS | Enterprise | バンドルのスタックが起動するアプリケーションのレプリカ数。ランタイムも、宣言されたトポロジーとしてこれを読みます。マルチノードのライセンスなしで 1 より大きい場合、起動は拒否されます。 |
クラスタードライバーが設定されると、OS_SECRET_KEY は必須になります。クラスタードライバーがない場合、各レプリカは独自のキーを生成して永続化します。レプリカ間ではそれらのキーが黙って食い違うことになるため、ランタイムは一貫しない暗号で提供する代わりに起動を拒否します。
公開済みアプリを実行する
ランタイムのイメージと、それが提供するアプリは、独立したリリースの軸です。1 つの変数が公開済みアーティファクトを指定し、アプリのアップグレードはその変数の変更と再起動で済みます。イメージの再ビルドは不要です。
| 変数 | エディション | 決めること |
|---|---|---|
OS_ARTIFACT_URL | 両方 | アプリを選択する唯一の変数。 ビルド済みの objectstack.json を指す、絶対的な https://、http://、file:// の URL で、URL フラグメントに SRI 形式の完全性の固定(#sha256= に続けて 16 進数 64 文字)を任意で付けられます。固定されたアーティファクトのバイトが一致しない場合、期待するダイジェストと実際のダイジェストを示して起動を拒否します。Community イメージが /srv/app/objectstack.json で探すアーティファクトを上書きします。Enterprise イメージでは、設定が読み込まれる前に解決されるため、この経路ではイメージ自身の Enterprise の配線は読み込まれません。 |
OS_COMPOSED_ARTIFACT_URL | Enterprise | composed 形態(公開済みアプリをイメージの Enterprise プラグインと一緒に起動し、複数の組織が 1 つのデータベースを共有する)のアプリを選択します。この形態にはデプロイバンドル内に専用のテンプレートがあり、エアギャップライセンスのみで、OS_CLOUD_URL=off が必須です。どちらも起動時に強制されます。これと OS_ARTIFACT_URL の両方を設定すると、起動は拒否されます。 |
完全性のハッシュ用の対となる変数は、意図的に用意していません。固定は URL フラグメントにあるため、コピーする値もローテーションする値も 1 つだけで、「URL は更新したがハッシュは更新していない」という状態は表現できません。
アーティファクトは不変でバージョン名の付いたオブジェクトとして公開し、アーティファクトのホストへの書き込み認証情報は公開パイプラインだけに与え、本番ではダイジェストを固定してください。この 3 つのルールがあるからこそ、ロールバック(古い URL を使った、アップグレードと同じ操作)が実際に機能します。
ランタイムのサービス
| 変数 | エディション | 決めること |
|---|---|---|
OS_PORT | 両方 | ランタイムが待ち受ける HTTP ポート。Community イメージは 8080 を設定します。os start は別のポートに移ることはなく、使用中のポートでは起動に失敗します。レガシーな別名:PORT。 |
OS_AUTH_URL | 両方 | サインインサーバーの公開ベース URL:コールバックと Cookie のオリジン。プロキシの背後と本番では必須です。 |
OS_CORS_ORIGIN | 両方 | クロスオリジンのリクエストを受け入れるオリジン(カンマ区切り)。未設定では何も受け入れません。Console と API が同じ公開オリジンを共有している間は、何も受け入れる必要はありません。認証情報が有効な間、* は起動時に拒否されます。 |
OS_ENVIRONMENT_ID | 両方 | 単一環境のランタイムが自身のものとして報告する環境 id。クラウドへのバインディングが完了するとこれが永続化され、その後のセルフホストのランタイムでは設定する必要がありません。 |
OS_TRUSTED_ORIGINS | 両方 | 追加の信頼されたオリジン(カンマ区切り)。 |
OS_ROOT_DOMAIN | 両方 | プラットフォーム SSO のデプロイメントで、サブドメインを信頼するために使うルートドメイン。 |
OS_DATABASE_DRIVER | 両方 | OS_DATABASE_URL のスキームから推測されるドライバーを上書きします。スキームから推測できない場合にだけ設定してください。サポートされない値はフォールバックせずに失敗します。ObjectStack 17.7 以降、インメモリのエンジンは、ここで指定した場合(memory)も memory:// の URL で指定した場合も、起動用のストアとして拒否されます。 |
OS_DATABASE_AUTH_TOKEN | 両方 | 認証トークンを使うマネージドドライバー向けのトークン。 |
OS_SKIP_SCHEMA_SYNC | 両方 | 1 に設定すると、起動時のスキーマ同期をスキップします。スキーマを帯域外で管理する場合に使います。Enterprise のデプロイバンドルのスタックは、どのレプリカよりも先に、別の 1 回限りの手順としてすでにマイグレーションを実行しています。 |
OS_TELEMETRY_DB | 両方 | ライフサイクルで分類されるシステムデータ専用のデータソース。オプトアウトするには 0、オプトインするにはパスまたは URL を設定します。 |
OS_STORAGE_LOCAL_ROOT | 両方 | ローカルのファイルストレージアダプターがアップロードを保存する場所。作業ディレクトリからの相対パスです(デフォルトは ./.objectstack/data/uploads)。データベースと一緒にバックアップしてください。設定すると Setup → Settings → File Storage → Root directory が固定されます。 |
OS_LIFECYCLE_DISABLED | 両方 | 1 に設定すると、ライフサイクルサービス(保持期間による削除、テーブルのローテーション、監査のアーカイブ)を無効にします。保持期間自体は、環境変数ではなく lifecycle.retention_overrides 設定で調整します。 |
OS_AUTOMATION_SCHEDULED_WORK_ENABLED | 両方 | アプリやパッケージが宣言するスケジュールされた処理を、デプロイメントが実行するかどうか。時間で起動するフロー(スケジュール、または相対時間のスイープ)と、パッケージ化された defineJob の cron ジョブです。オンになるのは true、1、on、yes だけです。未設定はオフで、これは 17.5 以降、すべてのテナンシーの姿勢における ObjectStack ランタイムのデフォルトです。オフの間は時間で動くものは何も有効にならず、そのようなフローはそれぞれデプロイメントのポリシーにより無効と報告されます。プラットフォーム自身のスケジュール処理(承認のエスカレーション、保持期間、メッセージの配信)には影響しません。isolated では、スケジュールフローやジョブは実行時の組織も宣言しなければなりません。⚠️ お使いの ObjectOS イメージやデプロイバンドルのテンプレートがこれを設定してくれるかどうかは、このページでは約束できません。アプリがスケジュールフローに依存する場合は明示的に設定し、実効値を os doctor で確認してください。 |
OS_MCP_SERVER_ENABLED | 両方 | /api/v1/mcp における HTTP 経由の Model Context Protocol サーバーを制御します。対象はそのサーフェスだけです。デフォルトでオンです。無効にするには、明示的に偽の値(false、0、off、no)を設定します。認証済みのプリンシパルが常に必要です。 |
OS_MCP_STDIO_ENABLED | 両方 | 真の値に設定すると、長時間動作する stdio の MCP トランスポートを自動起動します。デフォルトはオフで、上記の HTTP サーフェスとは独立しています。 |
OS_MCP_STDIO_API_KEY | 両方 | stdio トランスポートがプリンシパルとして紐づく API キー。HTTP の MCP と同じ認可チェーンで解決されるため、レコードとフィールドのレベルのセキュリティは引き続き適用されます。フェイルクローズです。stdio が有効で解決できるキーがない場合、トランスポートは起動しません。 |
オブザーバビリティ
エクスポートはオプトインです。エクスポーターのデフォルトは noop なので、選択するまでデプロイメントは何も出力しません。エンドポイントを設定するだけでは何も起きません。
| 変数 | エディション | デフォルト | 決めること |
|---|---|---|---|
OS_OBS_EXPORTER | 両方 | noop | noop、console、json、otlp。ローカルのデバッグには console または json を、コレクターには otlp を使います。 |
OS_OTLP_ENDPOINT | 両方 | — | OTLP/HTTP のルート URL。エクスポーターが otlp のときは必須です。空の場合、ランタイムは警告を出して noop にフォールバックします。 |
OS_OTLP_HEADERS | 両方 | — | 追加の OTLP ヘッダー。カンマ区切りの key=value のペアです。 |
OS_OBS_SERVICE_NAME | 両方 | — | 出力されるメトリクスの service.name リソース属性。 |
OS_OBS_DEPLOYMENT_ENV | 両方 | production | deployment.environment リソース属性。 |
OS_OTLP_FLUSH_MS | 両方 | — | OTLP エクスポーターのフラッシュ間隔(ミリ秒)。 |
データ契約の抜け道
ObjectStack 17.0 で、プラットフォームは宣言された契約に反する値を、以前のように警告して受け入れるのではなく、拒否するようになりました。これらの変数は、今すぐには修正できない連携のために、古い動作を一時的に再び有効にします。それぞれ 1 だけを受け付け、それ以外では厳格な動作のままです。違反は引き続きログに記録されるため、ずれは見えたままです。
| 変数 | エディション | 再び有効にするもの |
|---|---|---|
OS_ALLOW_LAX_ACTION_PARAMS | 両方 | params が必須パラメーターを欠く、options / multiple / reference の宣言に反する、または宣言されていないキーを含むアクションの呼び出し。これがない場合、そのような呼び出しは 400 VALIDATION_FAILED を返します。 |
OS_ALLOW_LAX_MEDIA_VALUES | 両方 | 厳格にチェックされる場所での、不正な形式の file / image / avatar / video / audio の値。 |
OS_ALLOW_LAX_VALUE_SHAPES | 両方 | 厳格にチェックされる場所での、不正な形式の参照(lookup、master_detail、user、tree)または構造化 JSON の値(location、address など)。 |
メディアと値の形は、17.x のランタイムが作成したデータベースでは厳格にチェックされます。以前のメジャーバージョンからアップグレードしたデータベースは、対応するマイグレーションがフラグを記録して初めて厳格にチェックされます。CLI → データマイグレーションを参照してください。そこへ早く到達するために OS_DATA_VALUE_SHAPE_STRICT_ENABLED=1 を使わないでください。これは、このデプロイメントのデータが実際に何を含んでいるかにかかわらず、すべての値の種類の厳格なチェックを一度にオンにします。
システム設定を固定する
システム設定(テナントと管理者が編集できる ai、email、feature_flags などの名前空間)は、OS_ に名前空間とキーを続け、大文字にして . と - を _ に置き換えた名前の変数で、デプロイメントレベルで固定できます。たとえば ai.openai_base_url は OS_AI_OPENAI_BASE_URL に、feature_flags.ai_enabled は OS_FEATURE_FLAGS_AI_ENABLED になります。固定された設定は Setup では読み取り専用です。
Setup → Authentication で設定できる Google サインインも、デプロイメントレベルで GOOGLE_CLIENT_ID と GOOGLE_CLIENT_SECRET を読み取ります。
廃止された名前
これらの名前は以前の ObjectOS のドキュメントに登場していました。ここに挙げるのは、引き継いだ設定ファイルを読んで修正できるようにするためであり、使えるようにするためではありません。行に別の記載がある場合を除き、いずれも両方のエディションで廃止されています。
| 廃止された名前 | 代わりに使うもの |
|---|---|
OS_ARTIFACT_FILE | OS_ARTIFACT_URL。提供されるランタイムで OS_ARTIFACT_FILE を読むものはありません。これを設定したデプロイメントは何も設定しなかった場合と同じように起動し、間違いを指摘するエラーも出ません。ローカルファイルは代替の変数で file:// として指定し、完全性の固定も代替の変数が担います。 |
OS_ARTIFACT_PATH | OS_ARTIFACT_URL。Enterprise イメージは、デフォルト以外の OS_ARTIFACT_PATH を持つ起動を拒否し、代替の変数を示します。「どのアーティファクトで起動するか」を表す綴りが 2 つあるのは 1 つ多すぎますし、廃止された方は完全性の固定を持ったことがありません。Community イメージは、自身が探すパスである /srv/app/objectstack.json を今もこれに設定しています。そのままにしてアーティファクトをそこにマウントし、それ以外のアーティファクトは OS_ARTIFACT_URL で指定してください。 |
OS_BUSINESS_DB_URL | OS_DATABASE_URL、またはアーティファクトで宣言したデータソース。OS_BUSINESS_DB_URL を読むものはありません。これだけを設定したデプロイメントには、データベースが一切設定されていません。 |
OS_LOCALIZATION_DATE_FORMAT、OS_LOCALIZATION_TIME_FORMAT、OS_LOCALIZATION_NUMBER_FORMAT、OS_LOCALIZATION_FIRST_DAY_OF_WEEK | なし。ObjectStack 17.7 で、これらが固定していた設定は廃止され、日付、時刻、数値、週の始まりは言語に従うようになりました。ローカライズを参照してください。 |
OS_CLOUD_API_KEY は、セルフホストのデプロイメントが設定する変数ではありません。ホスト型のクラウドが自ら運用するランタイムに注入するサービスの認証情報であり、それとは別に、os package publish が CI からパッケージカタログに対して認証するために使うベアラートークンでもあります(パッケージを参照)。コントロールプレーンに接続するセルフホストのデプロイメントは、ファイルに貼り付けるキーではなく、デプロイメントがそのコントロールプレーンにバインドされたときに発行されたランタイムトークンを提示します。
レガシーな名前
これらは両方のエディションで引き続き解決されますが、正式な名前が推奨され、レガシーな名前は将来のメジャーバージョンで削除される可能性があります。
| 正式な名前 | レガシー | 備考 |
|---|---|---|
OS_PORT | PORT | 一度だけ非推奨の警告を出します。 |
OS_AUTH_SECRET | AUTH_SECRET | 一度だけ非推奨の警告を出します。 |
OS_TENANCY_POSTURE | OS_MULTI_ORG_ENABLED | 姿勢がレガシーなブール値から導出されるのは、OS_TENANCY_POSTURE が未設定の場合だけです。そこでの true は isolated を意味します。姿勢は直接宣言してください。ライセンスと起動時のチェックは、その変数に対して書かれています。 |
OS_MULTI_ORG_ENABLED | OS_MULTI_TENANT |