環境変数リファレンス
スタジオサーバーが読み込む環境変数の一覧です。画面(環境設定)で変更する値と異なり、 ここでの値はファイルを修正して再起動しないと反映されません。
正本は /etc/kopens/plantpulse-studio.env
/etc/kopens/plantpulse-studio.env
.env はもう読み込まれません旧パス(インストールディレクトリの .env)に値を入れても反映されません。 旧ファイルが残って
いるとスクリプトがその旨を知らせます。値を修正するときは上記の正本パスを使ってください。
権限は chmod 600 にしてください — API キーが含まれるファイルです。
イメージとバージョン
| 変数 | デフォルト値 | 説明 |
|---|---|---|
REGISTRY | docker.kopens.io/ps | イメージを取得するレジストリ。空にするとローカルタグのみ使用します(直接ビルドした場合) |
PP_IMAGE_TAG | (空値) | 当社イメージセット(server · web)のカルバータグ |
PS_IMAGE_TAG_SERVER | (なし) | plantpulse-studio-server だけ別タグで起動する場合 |
PS_IMAGE_TAG_WEB | (なし) | plantpulse-studio-web だけ別タグで起動する場合 |
PS_IMAGE_TAG_AGENT_SERVER | 0c5ac7fb | エージェントサイドカー。カルバーではなくダイジェストピン(OpenHands SDK v1.43.1)のため PP_IMAGE_TAG には追従しません |
PP_IMAGE_TAG は空にしておくことを推奨します空にしておくと bin/start.sh が VERSION ファイルのカルバーを読み取り、リリースごとに自動追従します。
ここに月を手動で記入すると、その値がそのまま固定されます — 実際にこれが原因で1ヶ月前のイメージが
起動したことがあります。
特定の時点に固定する必要がある場合は、月(2026.09)ではなくスナップショットタグ(2026.09-20260911)を
入れてください。date +%Y.%m で計算しないでください — 毎月1日 00:00~04:00 KST の間は
まだ存在しないタグを指します(その月のリリースは 04:00 に行われます)。
TAG · AGENT_SERVER_TAG という変数は存在しませんcompose が読み込むのは上記の表の名前だけです。TAG=2026.08 のように記述しても
何も起こらず、スタックは VERSION のカルバーで起動します — 固定したつもりで
追従している状態になります。
特定のリリース時点に固定するにはスナップショットタグを使ってください — 例: TAG=2026.08-20260810。
:::
ロケールとタイムゾーン
プラットフォーム・Edge と同じ変数名を使用します。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_LANG | en | Web の既定言語(ko / en)。ブラウザに保存された値が優先されます |
PP_TZ | Asia/Seoul | IANA タイムゾーン ID。"今日 / 昨日" のような相対時間の解釈基準 |
韓国語の現場であれば PP_LANG=ko にしてください。
データ保存場所
| 変数 | デフォルト値 | 説明 |
|---|---|---|
DATA_ROOT | /var/lib/pp-studio | ワークスペース・ビルド成果物・状態がすべてこの下に保存されます |
バックアップ対象がこのパスです → バックアップと復元。
データベース — 外部 PostgreSQL
スタジオは外部 PostgreSQL を使用します。 プラットフォームが使うものと同じ PG を共有して構いません。
| 変数 | 例 |
|---|---|
DATABASE_URL | postgres://<user>:<password>@<db-host>:5432/ppstudio |
🔴 PG_PASSWORD という変数はありません。 DB パスワードは DATABASE_URL 1行の中に
含まれます — パスワードだけを個別に変更する変数を用意すると URL と矛盾する可能性があるため、1行にまとめました。
DATABASE_URL は必須です空のままにするとインストールはその場で停止し、何が空かを通知します — それらしいデフォルト値を 捏造することはありません。
サーバーは既存のデータベースに対してマイグレーションのみ行います。DB とロールは作成しません —
bin/provision-platform-db.sh がその作業を行います。
インストール の「データベース準備」を参照してください。
プラットフォーム連携
| 変数 | 説明 |
|---|---|
PP_API_URL | 実データ取得とログイン認証を委任するプラットフォームのアドレス |
PP_API_TOKEN | そのプラットフォームの api_key |
ログやコンテナ内では PLATFORM_API_TARGET · PLATFORM_API_KEY と表示されます。
.env に記述する名前は PP_API_URL · PP_API_TOKEN です — 下記の「2層の名前」を
参照してください。
リスナーポート
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PORT | 5170 | スタジオサーバー(オーケストレーター)の API ポート。Web が内部でプロキシするため外部に開く必要はありません — 診断用(curl localhost:5170/health) |
APPS_PORT | 5171 | プレビューとデプロイ済みアプリを配信する別のリスナーポート |
- ポートに直接接続するインストール — ファイアウォールでこのポートも開かないとプレビュー・デプロイアプリ・QR 接続ができません。
- リバースプロキシの背後 — 開く必要はありません。プロキシが同じドメインの
/container/preview·/appsをこのリスナーに転送します → ドメインとリバースプロキシ。
クライアントは相対パスのみ使用します。プレビュー・デプロイアプリの公開 URL を個別に知らせる必要がなく 80/443 のみ開く構成でもそのまま動作します。
AI プロバイダー
ここでの値は初期値です。画面(環境設定 → AI)で入力した値がこの値を上書きします。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
AI_PROVIDER | openai-compatible | 空にすると常に openai-compatible になります |
PI_LLM_URL | (空値 — 必須) | ゲートウェイアドレス。デフォルト値は設定しません |
AI_MODEL | gpt-4o | モデル名 |
PI_LLM_API_KEY | (空値 — 必須) | OpenAI 互換キー |
PS_ANTHROPIC_API_KEY | (空値) | クラウド Claude を使用する場合のみ |
⚠ PI_LLM_URL と PI_LLM_API_KEY は空のままだとスタックが起動を拒否します。
PI_LLM_URL にそれらしいデフォルト値を入れない理由ゲートウェイがそのホストに存在しない場合、チャット全体が fetch failed になりますが、値がそれらしく
見えるため原因の特定にコストがかかります。 実際のアドレスを記述してください。入力した値が正しいかどうかは、環境設定 → AI タブの
接続テストで保存前に確認できます → 環境設定(管理者)。
プロバイダーは**AI_PROVIDER で明示します。** どのキーが含まれているかで選択すると、env 構成に
よって何で起動するか予測できません。
CORS
| 変数 | デフォルト値 | 説明 |
|---|---|---|
STUDIO_CORS_ORIGINS | (空値 = same-origin) | 別ドメインからアクセスする場合のみ指定 |
インストール・起動フラグ
.env ではなくコマンドの前に付けて使用するものです(SKIP_DOCKER=1 bash bin/install.sh)。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
SKIP_DOCKER | 0 | 1 の場合、Docker インストール手順をスキップします(既にインストール済みのとき) |
SKIP_WAIT | 0 | 1 の場合、起動完了を待たずにスクリプトが終了します |
WAIT_READY_MIN | 10 | 起動完了を待つ時間(分)。回線が遅い、イメージが大きい場合に増やします |
エージェントサイドカーリソース
| 変数 | デフォルト値 | 説明 |
|---|---|---|
AGENT_SERVER_CPUS | 1 | ビルダーサイドカーに割り当てる CPU 数 |
AGENT_SERVER_MEMORY | 2g | ビルダーサイドカーのメモリ上限 |
env で運ばないもの
ユーザーアカウントとロールは環境変数で設定しません。 サーバーはアカウントが1つもないとき
管理者を1つ DB に作成し、その後はアプリのユーザー管理画面で追加・削除し、
ロール(admin / builder / viewer)もそこで付与します。
関連ドキュメント
- インストール — 最初に値を設定する手順
- シークレット管理 — キーの保存場所
- 環境設定(管理者) — 画面で変更する値
- ドメインとリバースプロキシ
2層の名前 — .env とコンテナ内では異なります
🔴 ここでミスが最も多く発生します。 ログ・docker inspect・製品ソースで見える名前と
.env に記述する名前が異なります。記述するのは左側です。
.env に記述する名前 | コンテナ内で見える名前 |
|---|---|
PP_API_URL | PLATFORM_API_TARGET |
PP_API_TOKEN | PLATFORM_API_KEY |
PI_LLM_URL | AI_BASE_URL |
PI_LLM_API_KEY | AI_API_KEY |
PS_ANTHROPIC_API_KEY | ANTHROPIC_API_KEY |
残り(DATABASE_URL · DATA_ROOT · APPS_PORT · AI_PROVIDER · AI_MODEL ·
STUDIO_CORS_ORIGINS)は両方の名前が同じです。
1つのサーバーに複数の製品(プラットフォーム · AI · スタジオ)が共存します。.env 側の名前に製品
接頭辞(PP_ プラットフォーム · PI_ 共通インフラ · PS_ スタジオ)を付けておくと、どの製品の値なのかが
名前だけで明らかになり、1つの値を2つの製品で共有する場合も混乱しません。