Referenz der Umgebungsvariablen
Alle Konfigurationen von PlantPulse beginnen an einem einzigen Punkt: den Umgebungsvariablen. Diese Seite ist eine Referenz, in der die Variablen, die bei Installation und Betrieb auftreten, nach Kategorien geordnet sind.
Diese Seite behandelt die Infrastruktur-/Deployment-Umgebungsvariablen (
PP_*·DOCKER_PP_*). Für Anwendungseigenschaften (engine.*,websocket.*usw.) besuchen Sie bitte die Eigenschaften-Referenz.
1. Wo befinden sich die Konfigurationsdateien?
Die Platform funktioniert als Docker Compose Stack, wobei die Werte an zwei Stellen definiert sind.
| Definitionsort | Was befindet sich hier | Wer liest dies |
|---|---|---|
plantpulse-platform-docker/bin/env.sh | Auf dem Host festgelegte Werte — Standard-Anmeldedaten, Docker-Runtime, Netzwerk, auf dem Host berechnete Ressourcenwerte | Betriebsskripte des Hosts |
plantpulse-platform-docker/compose/docker-compose.yml | Werte, die der Container tatsächlich sieht | Container |
env.sh nichtDie sechs Apps (plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse-web · plantpulse-plugin-opcua · plantpulse-plugin-aasx · plantpulse-ha) sourcen env.sh nicht. Der einzige Definitionsort, den die App sieht, ist compose.
Das bedeutet, ein Name, der nur in env.sh vorhanden ist, aber nicht in compose, erreicht die App nicht, und die App nutzt die im jar/WAR eingebetteten Standardwerte. Tatsächlich gab es einen Vorfall (2026-08-29), bei dem fünf Apps an einer Stelle weiterhin alte Namen verwendeten, obwohl die Kennung nur im Data Lake geändert worden war.
Die Art und Weise, wie Werte pro Tier bestimmt werden, unterscheidet sich.
| Tier | Was bestimmt den Wert |
|---|---|
plantpulse-datalake | Von compose übergebene Werte → pd des Containers empfängt sie als ${VAR:-기본값}. Der übergebene Wert gewinnt |
| Sechs Apps | Die von compose übergebene Umgebungsvariable überschreibt die im jar/WAR eingebetteten Standardwerte |
plantpulse-certs | Sieht nur PP_TLS_* von compose. Dateien werden nicht gesourct |
Priorität — Was gewinnt gegen was
Die Reihenfolge, in der bin/env.sh auf der Host-Seite von oben nach unten durchlaufen wird, entspricht der Priorität.
| Priorität | Quelle | Grund für den Sieg |
|---|---|---|
| 1 (Höchste) | /etc/kopens/plantpulse-platform.env (Secret Sidecar) | export VAR=값 ist eine bedingungslose Zuweisung und überschreibt sogar Shell-Exports |
| 2 | /etc/kopens/platform.node.env (Node-spezifisch) | Wird nach dem Sidecar gesourct, ebenfalls bedingungslose Zuweisung |
| 3 | export der aufrufenden Shell | Gewinnt gegen :- des Standardwerts — jedoch nur, wenn 1 und 2 diesen Namen nicht definiert haben |
| 4 (Niedrigste) | ${VAR:-기본값} von bin/env.sh | Nur wenn unset |
Auf einem fertig installierten Node wird PP_PG_PASSWORD=새값 bin/up.sh stillschweigend ignoriert, da der Sidecar diesen Namen bereits hält. Die einzige Möglichkeit, den Wert zu ändern, ist über bin/passwd.sh / bin/rotate-secret.sh.
🔑 Die Referenz für Geheimwerte liegt unter /etc/kopens/
Die tatsächlichen Werte von Dienstkonto-Passwörtern (PP_PG_PASSWORD · PP_CASSANDRA_PASSWORD · PP_MQ_PASSWORD usw.) und API-Keys befinden sich in Sidecar-Dateien außerhalb des Repo-Baums.
| Datei | Status |
|---|---|
/etc/kopens/plantpulse-platform.env | Aktuelle Referenz — Gemeinsames Protokoll für die drei Produkte platform · ai · studio (plantpulse-<product>.env), Berechtigungen 0600 |
/opt/kopens/plantpulse-platform.env | Alter Pfad (nur existiert von 2026-08-25 bis 08-29) — Wird weder gelesen noch geschrieben. Falls vorhanden, setzt das Installationsskript dies auf die Referenz zurück |
Überprüfen Sie zuerst mit ls -l /etc/kopens/, ob eine Referenz vorhanden ist.
Der Sidecar gewinnt gegen bin/env.sh. In env.sh wird zuerst der Sidecar gesourct, und alle darunter liegenden Werte haben das Format ${VAR:-기본값}. Daher passiert nichts, wenn Sie nur das Passwort in env.sh ändern — der alte Wert des Sidecars gewinnt weiterhin.
install.sh lädt die Standardwerte von bin/env.sh direkt in den Sidecar. Daher müssen diese während der Inbetriebnahme zwingend ersetzt werden → Initialpasswort
Da compose Passwörter als ${PP_X:?} anfordert, bootet der Stack gar nicht erst, wenn ein Wert leer ist, anstatt «halb konfiguriert» zu starten.
Die Änderung des Sidecars allein reicht nicht aus. Bei Werten, bei denen das Serverkonto die Referenz ist (wie bei PostgreSQL · Aster TSDB), muss auch die Serverseite geändert werden. Wenn die Reihenfolge falsch ist, startet die Platform nicht.
Verwenden Sie das dedizierte Verfahren — Passwort ändern (Credential Rotation). Dies ist eine Aufgabe, die einmal bei der Inbetriebnahme abgeschlossen wird.
🔑 Kennzeichnet Geheimwerte. Geben Sie die Originalwerte nicht in git, Issues oder Chats ein.
1.5 Container-Runtime · Host-Ressourcen (DOCKER_*)
Diese Werte werden von bin/env.sh festgelegt. Die folgenden Ressourcenwerte sind keine fixen Standardwerte, sondern werden basierend auf dem Host berechnet — bei Verwendung von Konstanten könnte der Start auf kleinen Hosts verweigert werden (Docker lehnt dies ab, wenn --cpus größer als die tatsächlichen Kerne ist) oder es kommt während des Bootens zu einem OOM-Kill. Die pro Box spezifizierten Werte gewinnen immer.
| Variable | Wie sie festgelegt wird |
|---|---|
DOCKER_CMD | docker (Podman ebenfalls möglich) |
DOCKER_REGISTRY | docker.kopens.io/pp — Registry-Präfix der acht Stack-Images |
PP_IMAGE_TAG | latest. Für Releases werden fixe Tags wie 2026.08 empfohlen |
DOCKER_PP_CPUS | nproc (bei Lesefehler 8) |
DOCKER_PP_CLUSTER_CORES | DOCKER_PP_CPUS - 2, mindestens 4 · maximal 30. Wird als PP_CLUSTER_CORES an den Container übergeben |
DOCKER_PP_MEMORY | 90% des Host-RAM, mindestens 8G |
DOCKER_DATALAKE_MEMORY | 96G — Dies ist der Mindestwert für den Data Lake Master. Da der Wert abgeschnitten wird, damit er 90% des Host-RAM nicht überschreitet, kann bei einem Host mit weniger als 107G keine Zuweisung von 96G erfolgen; ein solcher Host ist unterdimensioniert. 64G ist keine unterstützte Spezifikation (Systemanforderungen) |
DOCKER_PW_MEMORY | 60G, bei kleinem Host 90% des RAM — Worker verwenden dasselbe Image wie der Master, aber da weniger Dienste laufen, wird dies separat festgelegt |
DOCKER_PP_DATA_DISK_NAME | Rückverfolgung der tatsächlichen Disk hinter / über findmnt + lsblk (LVM/dm bis zur physischen Disk). Bei Fehler sda |
DOCKER_PP_EXTERNAL_IP | Standardmäßig leerer Wert. In NAT-Umgebungen die tatsächliche öffentliche IP |
DOCKER_PP_EXTERNAL_IP einDieser Wert fließt über PP_SERVICE_IP in den SAN des TLS-Zertifikats. Wenn auch nur eine IP in einem falschen Format enthalten ist, lehnt openssl die gesamte Erweiterungsdatei ab, sodass kein einziges Zertifikat generiert wird.
Netzwerk
| Variable | Standardwert | Beschreibung |
|---|---|---|
DOCKER_PP_NETWORK | pp-net | Name des Docker-Netzwerks |
DOCKER_SUBNET | 10.99.0.0/24 | Subnetz (darf sich nicht mit anderen Containernetzen überschneiden) |
DOCKER_GATEWAY | 10.99.0.1 | Gateway |
DOCKER_PP_IP | 10.99.0.100 | Fixe IP des Data Lake |
Speicherlimits pro App — festgelegt durch compose
Die Bereitstellung separater mem_limit für jede App ist der primäre Zweck der Container-Trennung (OOM-Isolierung). Selbst wenn eine App ihr Limit erreicht, bleiben andere Apps und die Infrastruktur stabil.
| Variable | Standardwert | Dienst |
|---|---|---|
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 |
Volumes
| Variable | Standardwert | Verwendungszweck |
|---|---|---|
DOCKER_PP_DATA_VOLUME | pp-data | Permanente Datenspeicherung |
DOCKER_PP_TEMP_VOLUME | pp-temp | Temporäre Daten |
DOCKER_PP_BACKUP_VOLUME | pp-backup | Backup-Speicher |
DOCKER_PP_SECURITY_VOLUME | pp-security | TLS-Material |
DOCKER_PP_PROXY_CERTS_VOLUME | — | Variable existiert nicht. Das Volume für Proxy-Zertifikate pp-proxy-certs ist direkt in compose per Name eingetragen |
install.sh Einmaloptionen
| Variable | Effekt |
|---|---|
SKIP_OS=1 | Überspringt OS-Setup |
SKIP_LOGIN=1 | Überspringt Registry-Login |
SKIP_FW=1 | Überspringt Firewall-Konfiguration |
DOCKER_DATA_DIR | Pfad zum Docker data-root (Standard /data1/docker-data) |
2. Mindestprüfung
Bei einer Neuinstallation auf einem einzelnen Server müssen nur wenige Dinge manuell angepasst werden, da die Ressourcenwerte basierend auf dem Host berechnet werden.
| Was | Wo | Bemerkung |
|---|---|---|
🔑 Verschiedene *_PASSWORD · API-Keys | bin/passwd.sh / bin/rotate-secret.sh | Zwingend bei Inbetriebnahme ersetzen. Ändert sich nicht durch Dateibearbeitung |
PP_LANG | bin/env.sh | Bei Betrieb in Korea ko (Standard en) |
PP_TZ | bin/env.sh | Für Betrieb in Korea Asia/Seoul beibehalten |
DOCKER_PP_EXTERNAL_IP | bin/env.sh | Nur hinter NAT. Ansonsten leer lassen |
DOCKER_DATALAKE_MEMORY | bin/env.sh | Standard 96G. Wird bei kleinen Hosts automatisch gesenkt |
PP_* nach §3 sind «Namen, die der Container sieht»Werte wie PP_HOST_IP · PP_DATA_DIR · PP_CLUSTER_CORES sind Namen, die innerhalb des Containers gelten. Die Festlegung dieser Werte auf dem Host erfolgt durch compose und DOCKER_* von bin/env.sh (§1.5). Beispielsweise wird die Kernanzahl von DOCKER_PP_CLUSTER_CORES berechnet und als PP_CLUSTER_CORES an den Container übergeben.
Erwarten Sie keine Wirkung, wenn Sie nur PP_CLUSTER_CORES auf dem Host ändern — wenn der Wert nicht übergeben wird, vertraut Kyuubi auf 30 Kerne, die auf einer 16-vCPU-Box gar nicht existieren, und startet niemals.
3. Platform Basis / Netzwerk / Ressourcen
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_HOME | /opt/kopens/plantpulse-platform | Installationsroot (identisch im Container) |
PP_SCHEME | PP | Deployment-Identifikationsschema |
PP_MODE | MASTER | Node-Rolle (MASTER / Worker) — Achse für Clustering (horizontale Skalierung) |
PP_OPTIONS | {} | Spezielles JSON zum Ein-/Ausschalten einzelner Dienste (siehe §3.1 unten) |
PP_HOST_IP | 127.0.0.1 | IP dieses Nodes |
PP_SERVICE_IP | 127.0.0.1 | Service-Bind-IP |
PP_MASTER_IP | 127.0.0.1 | Master(Data Lake)-IP, die Worker/APP-Tiers anvisieren. Dient auch als Quelle für Kafka advertised.listeners. Wird bei Installation des DATALAKE Tiers automatisch auf Host-IP erkannt, falls nicht spezifiziert |
PP_PUBLIC_IP | 127.0.0.1 | Extern公開 IP (NAT-Umgebung) |
PP_DATA_DIR | /data1/pp-data | Data-Root |
PP_TEMP_DIR | /data1/pp-temp | Root für temporäre Dateien |
PP_BACKUP_DIR | /data1/pp-backup | Backup-Root |
PP_DATA_DISK_NAME | sdb | Gerätebezeichnung der Datenplatte |
PP_CLUSTER_CORES | 30 | Anzahl verwendeter Kerne |
PP_CLUSTER_MEMORY_BY_CORE | 2G | Speicherzuweisung pro Kern |
PP_LANG | en | Standardsprache |
PP_TZ | Asia/Seoul | Zeitzone (automatisch auf alle Java-Prozesse angewendet) |
3.1 PP_OPTIONS — Einzelne Dienste an/aus
PP_OPTIONS ist ein JSON zum Ein- und Ausschalten einzelner Komponenten. Der Standardwert ist {}; nicht spezifizierte Keys werden als true (aktiv) betrachtet.
Bsp. Um das integrierte Valkey auszuschalten und ein extern verwaltetes Redis zu verwenden:
export PP_OPTIONS='{"enable-valkey":false}'
Verfügbare enable-* Keys (alle Standard 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. Datenspeicher
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_REDIS_HOST / PP_REDIS_PORT | plantpulse-datalake / 6379 | Valkey/Redis (TLS Listener 6380) |
PP_REDIS_USER / 🔑 PP_REDIS_PASSWORD | redis / — | Redis-Konto |
PP_POSTGRES_HOST / PP_POSTGRES_PORT | plantpulse-datalake / 5432 | PostgreSQL 18 (Percona) |
PP_PG_USER / 🔑 PP_PG_PASSWORD | plantpulse / — | PostgreSQL-Konto |
PP_CASSANDRA_HOST / PP_CASSANDRA_PORT | plantpulse-datalake / 9042 | Aster TSDB |
PP_CASSANDRA_USER / 🔑 PP_CASSANDRA_PASSWORD | cassandra / — | Aster TSDB-Konto |
PP_CASSANDRA_PORT | 9042 | Aster TSDB Port, den Storage-Layer-Clients wiederverwenden. Eine Variable PP_STORAGE_PORT existiert nicht |
PP_S3_HOST / PP_S3_PORT | plantpulse-datalake / 9000 | RustFS Objektspeicher |
PP_S3_USER / 🔑 PP_S3_PASSWORD | rustfs / — | RustFS-Konto |
PP_S3_BUCKET | plantpulse | Standard-Bucket — Iceberg-Daten · Backup |
PP_S3_UPLOAD_BUCKET | upload | Upload-Bucket. Wird nur in plantpulse-server-web bereitgestellt (geht absichtlich nicht an Worker). Die Trennung der Buckets dient dazu, dass Aufbewahrungsregeln einer Seite nicht auf die andere wirken |
PP_DB_NAME | pp | PostgreSQL Datenbankname |
PP_KEYSPACE | pp | Aster TSDB Keyspace-Name |
PP_HIVE_DB | hive-metastore-230 | Hive Metastore DB |
5. Messaging
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_MQ_USER / 🔑 PP_MQ_PASSWORD | mq / — | Kafka·MQTT gemeinsames Konto (es gibt kein Kafka-exklusives Konto) |
PP_TOPIC_PREFIX | pp | Kafka-Topic-Präfix (pp-tag-point usw.) |
PP_KAFKA_HOST / PP_KAFKA_PORT | PP_MASTER_IP / 9092 | Kafka Broker |
PP_KAFKA_TLS_PORT | 9094 | Kafka externer TLS |
PP_KAFKA_CONTROLLER_PORT | 9093 | Kafka KRaft Controller |
PP_MQTT_HOST / PP_MQTT_PORT | PP_MASTER_IP / 1883 | MQTT (HiveMQ) |
PP_MQTT_TLS_PORT | 1884 | MQTT TLS |
Da der Browser-Realtime-Push auf SSE umgestellt wurde, wurde der STOMP-Broker aus dem Data Lake Image entfernt. Die Variable PP_STOMP_* und die Ports 61000/61004 werden nicht mehr bedient. Falls diese noch in alten Firewall-Regeln existieren, entfernen Sie diese bitte.
6. Verarbeitung · Zeitreihe · Analyse · Workflow
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_CEP_HOST / PP_CEP_PORT / PP_CEP_TLS_PORT | plantpulse-datalake / 7400 / 7401 | CEP-Server |
PP_CEP_PROTOCOL | http | CEP-Zugriffsprotokoll. Für verteilt/Container wird https empfohlen |
PP_CEP_CONNECT_PORT | (abgeleitet) | Zugriffsport server-web→CEP. Automatisch nach Protokoll ausgerichtet (http→7400, https→7401). Bei expliziter Angabe hat dieser Wert Priorität |
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-Zugriffsprotokoll (interner Loopback Standard http) |
PP_DATA_GATEWAY_CONNECT_PORT | (abgeleitet) | DGW-Zugriffsport. Automatisch nach Protokoll ausgerichtet (http→5500, https→5501). Bei expliziter Angabe hat dieser Wert Priorität |
PP_TSE_HOST / PP_TSE_PORT / PP_TSE_TLS_PORT | plantpulse-datalake / 7800 / 7801 | Zeitreihen-Engine(TSE). Server listen sowohl auf http 7800 als auch https 7801 |
PP_TSE_PROTOCOL | http | TSE-Client-Zugriffsprotokoll. Standard ist Klartext http, da interne Kommunikation — getrennt vom TLS-Masterswitch(PP_TLS_ENABLED) (2026-08) |
PP_TSE_CONNECT_PORT | (nicht gesetzt) | Administrator-Override-Hook, der nicht von env.sh exportiert wird. Das Template nutzt ${PP_TSE_CONNECT_PORT:7800} als Fallback |
PP_TSE_JDBC_SCHEME | — | Variable existiert nicht. Da das jdbc.tse.url Template ts hartcodiert, kann das Schema nicht geändert werden |
PP_TSE_USER / 🔑 PP_TSE_PASSWORD | tse / — | TSE-Konto |
PP_ANALYTICS_USER / 🔑 PP_ANALYTICS_PASSWORD | spark / — | Analyse(Spark/Kyuubi Client)-Konto. Separate Anmeldedaten, getrennt vom internen Metastore von Kyuubi(PP_HIVE_*) |
PP_HIVE_HOST / PP_HIVE_PORT | PP_MASTER_IP / 9083 | Hive Metastore |
PP_HIVE_USER / 🔑 PP_HIVE_PASSWORD | hive / — | Hive-Konto |
PP_SPARK_HOST / PP_SPARK_PORT | PP_MASTER_IP / 7077 | Spark Master |
PP_KYUUBI_PORT | 10000 | Kyuubi SQL Gateway |
PP_GRAVITINO_USER / 🔑 PP_GRAVITINO_PASSWORD | gravitino / — | Gravitino Katalog |
PP_TEMPORAL_HOST / PP_TEMPORAL_PORT | plantpulse-datalake / 7233 | Temporal Engine (Web UI 8233) |
PP_TEMPORAL_USER / 🔑 PP_TEMPORAL_PASSWORD | temporal / — | Temporal-Konto |
PP_KESTRA_HOST / PP_KESTRA_PORT | plantpulse-datalake / 8380 | Kestra Scheduler |
PP_KESTRA_ADMIN_EMAIL / 🔑 PP_KESTRA_ADMIN_PASSWORD | admin@plantpulse.io / — | Kestra Administrator |
PP_KESTRA_DB_USER / 🔑 PP_KESTRA_DB_PASSWORD | kestra / — | Kestra Meta DB |
7. Plugin · Monitoring · Web-Layer
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_OPCUA_TCP_PORT | 11004 | OPC-UA opc.tcp Protokollport |
PP_OPCUA_TLS_PORT | 11005 | OPC-UA TLS |
PP_AAS_SERVER_PORT | 8090 | AAS(BaSyx V3) API. UI ist 8091, Registry/AAS-Ports(4800/4801) sind im Code fixiert und werden nicht durch env geändert |
PP_GRAFANA_DB_USER / 🔑 PP_GRAFANA_DB_PASSWORD | grafana / — | Zugriff auf PlantPulse Dashboard Speicher(PostgreSQL). Wenn leer, führt pd start zu exit 3. Eine Variable zur Festlegung des Administratorkontos existiert nicht |
Die folgenden können nicht über env geändert werden — selbst wenn Werte eingetragen werden, passiert nichts.
| Was | Port | Warum |
|---|---|---|
| PlantPulse Dashboard | 3000 | Ist als Zahl in ports: von compose eingetragen(PP_GRAFANA_PORT existiert nicht) |
| WebSocket Push | — | PP_WEBSOCKET_PORT · PP_WEBSOCKET_PORT_SSL · PP_WEBSOCKET_USER · PP_WEBSOCKET_SERVER_PASSWORD existieren nirgendwo im Repository |
| AAS Registry/AAS | 4800 · 4801 | Im Code fixiert |
PP_OPCUA_PORT existiert ebenfalls nicht — OPC-UA hat nur PP_OPCUA_TCP_PORT.
Mail-Server und Konsolen- · Vor-Ort-App-Adressen sind keine Umgebungsvariablen. PP_MAIL_SMTP_* wird nicht gelesen, Werte werden in pp.mm_config eingetragen — Mail-Konfiguration · Adress-Konfiguration.
8. TLS / SSL
| Variable | Standardwert | Beschreibung |
|---|---|---|
PP_TLS_ENABLED | true | TLS Master-Switch — bestimmt das Standardprotokoll des Service-Clients |
PP_TLS_CERT_DIR | /var/security/plantpulse | Zertifikatsverzeichnis |
PP_TLS_DOMAIN | plantpulse.io | Zertifikatsdomain |
🔑 PP_TLS_KEYSTORE_PASSWORD / 🔑 PP_TLS_TRUSTSTORE_PASSWORD | — | keystore/truststore Passwort (muss auf allen Nodes identisch sein) |
PP_TLS_VALID_DAYS | 3650 | Zertifikatsgültigkeit (Tage) |
PP_TLS_SAN_IPS | PP_HOST_IP,…,127.0.0.1 | Zertifikats-SAN-IP. Im Betrieb muss zwingend die externe Zugriffs-IP (z.B. öffentliche IP) enthalten sein |
PP_TLS_SAN_DNS | localhost,<hostname>,<domain> | Zertifikats-SAN-DNS |
PP_TLS_NODE_NAMES | master worker-1 … worker-5 | Cluster-Node-Name |
PP_TLS_FORCE_REGENERATE | false | Erzwingt Zertifikatsregeneration bei true |
9. API-Key / AI-Gateway
Alle haben Standardwerte für die Entwicklung (fallback). Im Betrieb/bei Kundenlieferung zwingend über Docker
-eoderexportersetzen.
| Variable | Beschreibung |
|---|---|
🔑 PP_API_KEY | Interner Plattform-API-Key (Authentifizierung Server ↔ Edge-Agent) |
🔑 PP_DATA_GATEWAY_API_KEY | server-web → data-gateway JDBC Authentifizierung |
🔑 PP_CEP_API_KEY | server-web → CEP-Server X-API-Key (muss mit CEP-Server cep.api.key übereinstimmen) |
🔑 PP_FLOW_WEBHOOK_API_KEY | Flow Engine externer Webhook Authentifizierung |
PP_AI_OPENAI_ENABLED · PP_AI_OPENAI_BASE_URL · PP_AI_OPENAI_API_KEY · PP_AI_OPENAI_MODEL haben
ab dem 18.09.2026 keine Wirkung mehr. Sie werden ohne Fehler oder Warnung stillschweigend ignoriert,
obwohl es im Server so aussieht, als wären sie konfiguriert.
Die Referenz für AI-Konfigurationen ist die PostgreSQL-Tabelle pp.mm_config, und der Key-Name wurde in ai.openai.*
zu ai.llm.* geändert. Die Werte werden über die Einstellungsmaske der Konsole(/env) oder über die Tabelle eingegeben —
Eigenschaften-Referenz — AI-Konfiguration.
10. Verfahren zur Anwendung nach Änderung
vi /etc/kopens/plantpulse-platform.env # 사이드카 — 여기를 고칩니다
cd /opt/kopens/plantpulse-platform-docker/bin
./restart.sh # 준비될 때까지 대기 (종료 코드 0 = 쓸 수 있다)
Werte, die in bin/env.sh eingetragen wurden, gehen bei Neuinstallation oder Upgrade verloren. Da das Installationsskript den gesamten Installationsbaum löscht und neu lädt, überlebt nur der Sidecar, da er außerhalb dieses Baums liegt.
Wenn Sie Werte ändern müssen, die der Container sieht, ändern Sie compose/docker-compose.yml und starten Sie in derselben Weise neu. Die Konfigurationsvorlage ist über einen Bind-Mount mit /etc/kopens/conf des Hosts verbunden, sodass sie direkt auf dem Host bearbeitet werden kann und auch bei Neuinstallationen erhalten bleibt.
Falls Variablen geändert wurden, aber nicht wirksam sind, prüfen Sie bitte in dieser Reihenfolge:
| Prüfung | Inhalt |
|---|---|
| ① Gewinnt der Sidecar? | Wenn im gleichen Namen in /etc/kopens/plantpulse-platform.env vorhanden, verlieren sowohl env.sh als auch Shell-Exports → Priorität |
| ② Erreicht der Name die App? | Die sechs Apps lesen env.sh nicht. Wenn es nicht in compose steht, erreicht es die App nicht |
| ③ Wurde neu gestartet? | Die meisten Werte, einschließlich Locale und Zeitzone, werden nur zum Zeitpunkt des Bootens übernommen |
| ④ Ist es ein Passwort? | Passwörter werden nicht durch Dateibearbeitung geändert → Passwortrotation |
Weitere Einzelheiten entnehmen Sie bitte dem Startguide.