環境変数リファレンス
PlantPulse のすべての設定は 環境変数の一箇所 から始まります。このページは、インストールおよび運用時に使用する変数をカテゴリー別に整理したリファレンスです。
このページでは インフラ/配備環境変数(
PP_*·DOCKER_PP_*) を扱います。アプリケーションの動作プロパティ(engine.*,websocket.*など)については プロパティリファレンス を参照してください。
1. 設定ファイルはどこにありますか?
Platform は Docker Compose スタック で動作し、値の 定義箇所は2つ あります。
| 定義箇所 | 何がここにあるか | 誰が読むか |
|---|---|---|
plantpulse-platform-docker/bin/env.sh | ホストで決定される値 — 認証情報のデフォルト値、docker ランタイム、ネットワーク、ホストで 計算される リソース値 | ホストの運用スクリプト |
plantpulse-platform-docker/compose/docker-compose.yml | コンテナが実際に参照する値 | コンテナ |
env.sh を読みませんアプリ6種(plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse-web · plantpulse-plugin-opcua · plantpulse-plugin-aasx · plantpulse-ha)は env.sh を source しません。 アプリが参照する定義箇所は compose のみ です。
つまり env.sh にのみ存在し compose にない名前はアプリに 届かず 、アプリは jar/WAR 内蔵のデフォルト値で動作します。実際にデータレイクでのみ識別子を変更したサイトで、アプリ5種が旧名称を使い続けた事故がありました(2026-08-29)。
ティアごとに値が決定される方式が異なります。
| ティア | 何が値を決定するか |
|---|---|
plantpulse-datalake | compose が渡した値 → コンテナの pd が ${VAR:-기본값} として受け取ります。 渡した値が優先されます |
| アプリ6種 | compose が渡した環境変数が jar/WAR 内蔵のデフォルト値を上書きします |
plantpulse-certs | compose の PP_TLS_* のみを参照します。ファイルを source しません |
優先順位 — 何が何を上書きするか
ホスト側で bin/env.sh が上から下へ実行される順序がそのまま優先順位となります。
| 優先順位 | 出典 | 優先される理由 |
|---|---|---|
| 1 (最上位) | /etc/kopens/plantpulse-platform.env (シークレットサイドカー) | export VAR=값 無条件代入 であるため、シェル export も上書きします |
| 2 | /etc/kopens/platform.node.env (ノード別) | サイドカーの次に source され、同様に無条件代入となります |
| 3 | 呼出シェルの export | デフォルト値の :- より優先されます — ただし 1・2 にその名前が記載されていない場合のみ |
| 4 (最下位) | bin/env.sh の ${VAR:-기본값} | unset の場合のみ |
インストールが完了したノードで PP_PG_PASSWORD=새값 bin/up.sh は 静かに無視されます。 サイドカーが既にその名前を保持しているためです。値を変更する方法は bin/passwd.sh / bin/rotate-secret.sh のみです。
🔑 機密値の正本は /etc/kopens/ 以下にある
サービスアカウントのパスワード(PP_PG_PASSWORD · PP_CASSANDRA_PASSWORD · PP_MQ_PASSWORD など)と API キーの実際の値は repo ツリー外 のサイドカーファイルにあります。
| ファイル | 状態 |
|---|---|
/etc/kopens/plantpulse-platform.env | 現行正本 — platform · ai · studio の3製品共通規約(plantpulse-<product>.env), 権限 0600 |
/opt/kopens/plantpulse-platform.env | 旧パス (2026-08-25 ~ 08-29 のみ存在) — 読み書きしません。残っている場合はインストールスクリプトが正本に戻します |
ls -l /etc/kopens/ で正本があるかまず確認してください。
サイドカーが bin/env.sh より優先されます。 env.sh は最上位でサイドカーを先に source し、その下の値がすべて ${VAR:-기본값} 形式であるためです。そのため env.sh のパスワードだけを変更しても 何も起こりません — サイドカーの旧値が優先され続けます。
install.sh は bin/env.sh のデフォルト値をそのままサイドカーに格納します。そのため、 コミッショニング時に必ず交換 する必要があります → 初期パスワード
compose はパスワードを ${PP_X:?} として要求するため、値が空の場合、スタックは «中途半端に設定された状態で起動» せず、 起動しません。
サイドカーを修正するだけでは反映されません。PostgreSQL · Aster TSDB のように サーバーアカウントが正本 である値はサーバー側も同時に変更する必要があり、 順序を間違えると Platform が起動しません。
専用の手順を使用してください — パスワード変更 (クレデンシャルローテーション)。 コミッショニング時に一度 変更して完了させる作業です。
🔑 表示は 機密値 です。git・Issue・チャットに原文を記載しないでください。
1.5 コンテナランタイム · ホストリソース (DOCKER_*)
bin/env.sh が決定する値です。以下のリソース値は 固定デフォルト値ではなく、ホストを確認して計算されます — 定数を使用すると、小規模なホストで起動自体が拒否されるか(--cpus が実際のコア数より大きい場合、docker が拒否します)、起動中に OOM-kill されるためです。 ボックスごとに指定した値が常に優先されます。
| 変数 | 決定方法 |
|---|---|---|
| DOCKER_CMD | docker (podman も可能) |
| DOCKER_REGISTRY | docker.kopens.io/pp — スタックイメージ8種のレジストリ prefix |
| PP_IMAGE_TAG | latest. リリース時は 2026.08 のような固定タグを推奨します |
| DOCKER_PP_CPUS | nproc (読み込み失敗時は 8) |
| DOCKER_PP_CLUSTER_CORES | DOCKER_PP_CPUS - 2, 最小 4 · 最大 30. コンテナに PP_CLUSTER_CORES として伝達 |
| DOCKER_PP_MEMORY | ホスト RAM の 90%, 最小 8G |
| DOCKER_DATALAKE_MEMORY | 96G — データレイクマスターの 最小値 です。ホスト RAM の 90% を超えないように制限されるため、ホストが 107G 未満であれば 96G を割り当てることができず、そのホストは要件未達となります。64G はサポート仕様ではありません (システム要件) |
| DOCKER_PW_MEMORY | 60G, ホストが小規模な場合は RAM の 90% — ワーカーはマスターと同じイメージですが、動作するサービスが少ないため 別途 設定します |
| DOCKER_PP_DATA_DISK_NAME | / を支える実際のディスクを findmnt + lsblk で逆追跡 (LVM/dm も物理ディスクまで)。失敗時は sda |
| DOCKER_PP_EXTERNAL_IP | デフォルトは空値. NAT 環境のみ実際の公認 IP |
DOCKER_PP_EXTERNAL_IP に無効な IP を入力しないでくださいこの値は PP_SERVICE_IP を経て TLS 証明書の SAN に組み込まれます。形式が正しくない IP が一つでも含まれていると、openssl が拡張ファイル全体を拒否し、 証明書が一枚も生成されません。
ネットワーク
| 変数 | デフォルト値 | 説明 |
|---|---|---|
DOCKER_PP_NETWORK | pp-net | docker network 名 |
DOCKER_SUBNET | 10.99.0.0/24 | サブネット (他のコンテナネットワークと重複しないように) |
DOCKER_GATEWAY | 10.99.0.1 | ゲートウェイ |
DOCKER_PP_IP | 10.99.0.100 | データレイクの固定 IP |
アプリ別メモリ制限 — compose が決定します
アプリごとに mem_limit を設けることが コンテナ分離の第一目的(OOM 隔離) です。一つのアプリが制限に達しても、他のアプリとインフラは生存します。
| 変数 | デフォルト値 | サービス |
|---|---|---|
DOCKER_SERVER_MEMORY / DOCKER_SERVER_HEAP | 14g / 8g | plantpulse-server-web |
DOCKER_BATCH_MEMORY / DOCKER_BATCH_HEAP | 4g / 3g | plantpulse-batch-web |
DOCKER_WAREHOUSE_MEMORY | 8g | plantpulse-warehouse-web |
DOCKER_OPCUA_MEMORY | 3g | plantpulse-plugin-opcua |
DOCKER_AASX_MEMORY | 3g | plantpulse-plugin-aasx |
DOCKER_HA_MEMORY | 2g | plantpulse-ha |
DOCKER_DATALAKE_MEMORY | 96g | plantpulse-datalake |
ボリューム
| 変数 | デフォルト値 | 用途 |
|---|---|---|
DOCKER_PP_DATA_VOLUME | pp-data | データ永続保存 |
DOCKER_PP_TEMP_VOLUME | pp-temp | 一時データ |
DOCKER_PP_BACKUP_VOLUME | pp-backup | バックアップストレージ |
DOCKER_PP_SECURITY_VOLUME | pp-security | TLS 資材 |
DOCKER_PP_PROXY_CERTS_VOLUME | — | 存在しない変数です。 プロキシ証明書ボリューム pp-proxy-certs は compose に名前で固定されています |
install.sh 一回性オプション
| 変数 | 効果 |
|---|---|
SKIP_OS=1 | OS セットアップ省略 |
SKIP_LOGIN=1 | レジストリログイン省略 |
SKIP_FW=1 | ファイアウォール設定省略 |
DOCKER_DATA_DIR | Docker data-root パス (デフォルト /data1/docker-data) |
2. 最低限ここだけは確認してください
新規の単一サーバーインストールで実際に操作する箇所はわずかです。リソース値はインストール時にホストを確認して計算されるためです。
| 何を | どこで | 備考 |
|---|---|---|
🔑 各種 *_PASSWORD · API キー | bin/passwd.sh / bin/rotate-secret.sh | コミッショニング時に 必ず交換. ファイル編集では変更されません |
PP_LANG | bin/env.sh | 韓国語運用の場合は ko (デフォルト en) |
PP_TZ | bin/env.sh | 韓国運用は Asia/Seoul を維持 |
DOCKER_PP_EXTERNAL_IP | bin/env.sh | NAT 配下の場合のみ. それ以外は空値のまま |
DOCKER_DATALAKE_MEMORY | bin/env.sh | デフォルト 96G. ホストが小規模な場合は自動的に低くなります |
PP_* は «コンテナが参照する名前» ですPP_HOST_IP · PP_DATA_DIR · PP_CLUSTER_CORES などの値はコンテナ内で通じる名前であり、 ホストでその値を決定するのは compose と bin/env.sh の DOCKER_* です(§1.5)。例えば、コア数は DOCKER_PP_CLUSTER_CORES が計算し、コンテナに PP_CLUSTER_CORES として伝達されます。
ホストで PP_CLUSTER_CORES だけを修正して反映されることを期待しないでください — 渡されなければ、16 vCPU ボックスに存在しない 30 コアを信じて Kyuubi が永久に起動しません。
3. プラットフォーム基本 / ネットワーク / リソース
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_HOME | /opt/kopens/plantpulse-platform | インストールルート (コンテナ内部で同一) |
PP_SCHEME | PP | 配備識別スキーム |
PP_MODE | MASTER | ノード役割 (MASTER / ワーカー) — クラスタリング(水平拡張)の軸 |
PP_OPTIONS | {} | 個別サービス on/off 専用 JSON (以下 §3.1 参照) |
PP_HOST_IP | 127.0.0.1 | このノードの IP |
PP_SERVICE_IP | 127.0.0.1 | サービスバインド IP |
PP_MASTER_IP | 127.0.0.1 | ワーカー/APP ティアが参照する マスター(データレイク) IP. Kafka advertised.listeners のソースでもある。 DATALAKE ティアインストール時に未指定ならホスト IP で自動検知 |
PP_PUBLIC_IP | 127.0.0.1 | 外部公開 IP (NAT 環境) |
PP_DATA_DIR | /data1/pp-data | データルート |
PP_TEMP_DIR | /data1/pp-temp | 一時ファイルルート |
PP_BACKUP_DIR | /data1/pp-backup | バックアップルート |
PP_DATA_DISK_NAME | sdb | データディスクデバイス名 |
PP_CLUSTER_CORES | 30 | 使用コア数 |
PP_CLUSTER_MEMORY_BY_CORE | 2G | コアあたりメモリ割り当て |
PP_LANG | en | 基本言語 |
PP_TZ | Asia/Seoul | タイムゾーン (すべての java プロセスに自動適用) |
3.1 PP_OPTIONS — 個別サービス on/off
PP_OPTIONS は 個別コンポーネントをオン/オフにする JSON です。デフォルト値は {} であり、未指定のキーはすべて true(有効) とみなされます。
例) 外部管理型 Redis を使用して内蔵 Valkey をオフにする場合:
export PP_OPTIONS='{"enable-valkey":false}'
利用可能な enable-* キー (すべてデフォルト true):
enable-messaging · enable-valkey · enable-postgres · enable-cassandra · enable-spark · enable-rustfs · enable-tse · enable-cep · enable-workflow · enable-data-gateway · enable-sql · enable-hive · enable-gravitino · enable-kyuubi · enable-grafana · enable-monitor
4. データストア
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_REDIS_HOST / PP_REDIS_PORT | plantpulse-datalake / 6379 | Valkey/Redis (TLS リスナー 6380) |
PP_REDIS_USER / 🔑 PP_REDIS_PASSWORD | redis / — | Redis アカウント |
PP_POSTGRES_HOST / PP_POSTGRES_PORT | plantpulse-datalake / 5432 | PostgreSQL 18 (Percona) |
PP_PG_USER / 🔑 PP_PG_PASSWORD | plantpulse / — | PostgreSQL アカウント |
PP_CASSANDRA_HOST / PP_CASSANDRA_PORT | plantpulse-datalake / 9042 | Aster TSDB |
PP_CASSANDRA_USER / 🔑 PP_CASSANDRA_PASSWORD | cassandra / — | Aster TSDB アカウント |
PP_CASSANDRA_PORT | 9042 | ストレージ層クライアントが再利用する Aster TSDB ポート. PP_STORAGE_PORT という変数は 存在しません |
PP_S3_HOST / PP_S3_PORT | plantpulse-datalake / 9000 | RustFS オブジェクトストレージ |
PP_S3_USER / 🔑 PP_S3_PASSWORD | rustfs / — | RustFS アカウント |
PP_S3_BUCKET | plantpulse | デフォルトバケット — Iceberg データ · バックアップ |
PP_S3_UPLOAD_BUCKET | upload | アップロード物バケット. plantpulse-server-web にのみ格納されます(ワーカーには意図的に送りません)。バケットを分けた理由は、一方の保存規則が他方に影響しないようにするためです |
PP_DB_NAME | pp | PostgreSQL データベース名 |
PP_KEYSPACE | pp | Aster TSDB キースペース名 |
PP_HIVE_DB | hive-metastore-230 | Hive メタストア DB |
5. メッセージング
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_MQ_USER / 🔑 PP_MQ_PASSWORD | mq / — | Kafka・MQTT 共用アカウント (Kafka 専用アカウントは存在しません) |
PP_TOPIC_PREFIX | pp | Kafka トピック接頭辞 (pp-tag-point など) |
PP_KAFKA_HOST / PP_KAFKA_PORT | PP_MASTER_IP / 9092 | Kafka ブローカー |
PP_KAFKA_TLS_PORT | 9094 | Kafka 外部 TLS |
PP_KAFKA_CONTROLLER_PORT | 9093 | Kafka KRaft コントローラー |
PP_MQTT_HOST / PP_MQTT_PORT | PP_MASTER_IP / 1883 | MQTT (HiveMQ) |
PP_MQTT_TLS_PORT | 1884 | MQTT TLS |
ブラウザのリアルタイムプッシュが SSE に変更されたため、STOMP ブローカーがデータレイクイメージから除外されました。 PP_STOMP_* 変数と 61000/61004 ポートは これ以上サービスされません。 旧ファイアウォールルールに残っている場合は整理してください。
6. 処理 · 時系列 · 分析 · ワークフロー
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_CEP_HOST / PP_CEP_PORT / PP_CEP_TLS_PORT | plantpulse-datalake / 7400 / 7401 | CEP サーバー |
PP_CEP_PROTOCOL | http | CEP 接続プロトコル. 分散/コンテナは https を推奨 |
PP_CEP_CONNECT_PORT | (派生) | server-web→CEP 接続ポート. プロトコルに自動整合 (http→7400, https→7401). 明示すればその値が優先 |
PP_DATA_GATEWAY_HOST / PP_DATA_GATEWAY_PORT / PP_DATA_GATEWAY_TLS_PORT | plantpulse-datalake / 5500 / 5501 | Data Gateway |
PP_DATA_GATEWAY_PROTOCOL | http | DGW 接続プロトコル (内部 loopback デフォルト http) |
PP_DATA_GATEWAY_CONNECT_PORT | (派生) | DGW 接続ポート. プロトコルに自動整合 (http→5500, https→5501). 明示すればその値が優先 |
PP_TSE_HOST / PP_TSE_PORT / PP_TSE_TLS_PORT | plantpulse-datalake / 7800 / 7801 | 時系列エンジン(TSE). サーバーは http 7800・https 7801 の両方を listen |
PP_TSE_PROTOCOL | http | TSE クライアント接続プロトコル. 内部区間通信のため平文 http が基本 — TLS マスタースイッチ(PP_TLS_ENABLED)と分離(2026-08) |
PP_TSE_CONNECT_PORT | (未設定) | env.sh が export しない運用者明示オーバーライドフック. テンプレートが ${PP_TSE_CONNECT_PORT:7800} フォールバックとして消費 |
PP_TSE_JDBC_SCHEME | — | 存在しない変数です。 jdbc.tse.url テンプレートが ts をハードコーディングしているため、スキームは変更できません |
PP_TSE_USER / 🔑 PP_TSE_PASSWORD | tse / — | TSE アカウント |
PP_ANALYTICS_USER / 🔑 PP_ANALYTICS_PASSWORD | spark / — | 分析(Spark/Kyuubi クライアント)アカウント. Kyuubi 内部メタストア(PP_HIVE_*)と分離された別個の認証情報 |
PP_HIVE_HOST / PP_HIVE_PORT | PP_MASTER_IP / 9083 | Hive メタストア |
PP_HIVE_USER / 🔑 PP_HIVE_PASSWORD | hive / — | Hive アカウント |
PP_SPARK_HOST / PP_SPARK_PORT | PP_MASTER_IP / 7077 | Spark マスター |
PP_KYUUBI_PORT | 10000 | Kyuubi SQL ゲートウェイ |
PP_GRAVITINO_USER / 🔑 PP_GRAVITINO_PASSWORD | gravitino / — | Gravitino カタログ |
PP_TEMPORAL_HOST / PP_TEMPORAL_PORT | plantpulse-datalake / 7233 | Temporal エンジン (Web UI 8233) |
PP_TEMPORAL_USER / 🔑 PP_TEMPORAL_PASSWORD | temporal / — | Temporal アカウント |
PP_KESTRA_HOST / PP_KESTRA_PORT | plantpulse-datalake / 8380 | Kestra スケジューラ |
PP_KESTRA_ADMIN_EMAIL / 🔑 PP_KESTRA_ADMIN_PASSWORD | admin@plantpulse.io / — | Kestra 管理者 |
PP_KESTRA_DB_USER / 🔑 PP_KESTRA_DB_PASSWORD | kestra / — | Kestra メタ DB |
7. プラグイン · 観測 · ウェブ階層
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_OPCUA_TCP_PORT | 11004 | OPC-UA opc.tcp プロトコルポート |
PP_OPCUA_TLS_PORT | 11005 | OPC-UA TLS |
PP_AAS_SERVER_PORT | 8090 | AAS(BaSyx V3) API. UI は 8091, Registry/AAS ポート(4800/4801)はコードに固定されており env で変更されません |
PP_GRAFANA_DB_USER / 🔑 PP_GRAFANA_DB_PASSWORD | grafana / — | PlantPulse Dashboard ストレージ(PostgreSQL)接続. 空の場合 pd start が exit 3. 管理者アカウントを決定する変数は 存在しません |
以下は env で変更できません — 値を記載しても何も起こりません。
| 対象 | ポート | 理由 |
|---|---|---|
| PlantPulse Dashboard | 3000 | compose の ports: に数値で固定されています(PP_GRAFANA_PORT は存在しません) |
| WebSocket プッシュ | — | PP_WEBSOCKET_PORT · PP_WEBSOCKET_PORT_SSL · PP_WEBSOCKET_USER · PP_WEBSOCKET_SERVER_PASSWORD は ストレージのどこにもありません |
| AAS Registry/AAS | 4800 · 4801 | コード固定 |
PP_OPCUA_PORT もありません — OPC-UA は PP_OPCUA_TCP_PORT のみです。
メールサーバーとコンソール・現場アプリのアドレスは環境変数ではありません。 PP_MAIL_SMTP_* は指定しても読み込まれず、値は pp.mm_config に設定します — メール設定 · アドレス設定。
8. TLS / SSL
| 変数 | デフォルト値 | 説明 |
|---|---|---|
PP_TLS_ENABLED | true | TLS マスタースイッチ — サービスクライアントの基本プロトコルを決定 |
PP_TLS_CERT_DIR | /var/security/plantpulse | 証明書ディレクトリ |
PP_TLS_DOMAIN | plantpulse.io | 証明書ドメイン |
🔑 PP_TLS_KEYSTORE_PASSWORD / 🔑 PP_TLS_TRUSTSTORE_PASSWORD | — | keystore/truststore パスワード (全ノード同一であること) |
PP_TLS_VALID_DAYS | 3650 | 証明書有効期間(日) |
PP_TLS_SAN_IPS | PP_HOST_IP,…,127.0.0.1 | 証明書 SAN IP. 運用では外部接続 IP(例: 公認 IP)を必ず含めること |
PP_TLS_SAN_DNS | localhost,<hostname>,<domain> | 証明書 SAN DNS |
PP_TLS_NODE_NAMES | master worker-1 … worker-5 | クラスタノード名 |
PP_TLS_FORCE_REGENERATE | false | true 時に証明書を強制再生成 |
9. API キー / AI ゲートウェイ
すべて開発用デフォルト値(fallback)があります。 運用/顧客納品時に Docker
-eまたはexportで必ず交換 してください。
| 変数 | 説明 |
|---|---|
🔑 PP_API_KEY | プラットフォーム内部 API キー (サーバー ↔ エッジエージェント認証) |
🔑 PP_DATA_GATEWAY_API_KEY | server-web → data-gateway JDBC 認証 |
🔑 PP_CEP_API_KEY | server-web → CEP サーバー X-API-Key (CEP サーバー cep.api.key と一致させること) |
🔑 PP_FLOW_WEBHOOK_API_KEY | Flow Engine 外部ウェブフック認証 |
PP_AI_OPENAI_ENABLED · PP_AI_OPENAI_BASE_URL · PP_AI_OPENAI_API_KEY · PP_AI_OPENAI_MODEL は
2026-09-18 から何も行いません。 指定してもエラーや警告なく 静かに無視 され、
サーバーは設定されたように見えます。
AI 設定の正本は PostgreSQL pp.mm_config 表であり、キー名称も ai.openai.* から
ai.llm.* に変更されました。値を入力する経路はコンソールの設定画面(/env)またはその表です —
プロパティリファレンス — AI 設定。
10. 変更後の適用手順
vi /etc/kopens/plantpulse-platform.env # 사이드카 — 여기를 고칩니다
cd /opt/kopens/plantpulse-platform-docker/bin
./restart.sh # 준비될 때까지 대기 (종료 코드 0 = 쓸 수 있다)
bin/env.sh に記載した値は 再インストール・アップグレード時に消失します。 インストールスクリプトがインストールツリーを
丸ごと削除して再取得するためです。サイドカーはツリー外にあるため生存します。
コンテナが参照する値を変更する必要がある場合は compose/docker-compose.yml を修正した後、同様の方法で再起動します。設定テンプレートはホストの /etc/kopens/conf にバインドマウントされており、ホストから直接編集でき、再インストール後も保存されます。
変数を変更しても反映されない場合は、順に確認してください。
| 確認事項 | 内容 |
|---|---|
| ① サイドカーが優先されていないか | /etc/kopens/plantpulse-platform.env に同じ名前があれば env.sh もシェル export も負けます → 優先順位 |
| ② アプリに届く名前か | アプリ6種は env.sh を読みません。 compose になければアプリに届きません |
| ③ 再起動したか | ロケール・タイムゾーンを含め、ほとんどの値が 起動時点でのみ 反映されます |
| ④ パスワードか | パスワードはファイルの編集では変更されません → パスワードローテーション |
詳細な手順は スタートガイド を参照してください。