Zum Hauptinhalt springen

Umgebungsvariablen – Referenz

PlantPulse wird über Umgebungsvariablen an einer einzigen Stelle konfiguriert. Diese Seite ist eine kategorisierte Referenz für Variablen, die bei Installation und Betrieb anfallen.

Diese Seite behandelt Infrastruktur- und Deployment-Umgebungsvariablen(PP_* · DOCKER_PP_*). Für Anwendungseigenschaften (engine.*, websocket.* u. a.) siehe Eigenschaften-Referenz.

1. Wo liegen die Konfigurationsdateien?

Die Plattform läuft als Docker-Compose-Stack, und es gibt zwei Definitisorte für Werte.

DefinitionsortWas ist hierWer liest
plantpulse-platform-docker/bin/env.shWerte vom Host – Anmeldedaten-Defaults, Docker-Laufzeit, Netzwerk, berechnete Ressourcenwerte vom HostHost-Betriebsskripte
plantpulse-platform-docker/compose/docker-compose.ymlWerte, die Container tatsächlich sehenContainer
App-Container lesen env.sh nicht

Die sechs Apps (plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse · plantpulse-plugin-opcua-server · plantpulse-plugin-aasx-server · plantpulse-ha) sourced nicht env.sh. Der einzige Definitionsort für Apps ist compose.

Das heißt, ein Name, der nur in env.sh existiert und nicht in compose, erreicht die App nicht, und die App nutzt den eingebauten Default aus jar/WAR. Es gab tatsächlich einen Vorfall, bei dem fünf Apps auf einem Standort, bei dem nur der Data-Lake die Identifikatoren änderte, weiterhin den alten Namen verwendeten (2026-08-29).

Jede Ebene bestimmt Werte anders.

EbeneWas legt den Wert fest
plantpulse-datalakeCompose übergibt den Wert → pd des Containers empfängt ihn als ${VAR:-기본값}. Der übergebene Wert gewinnt
Sechs AppsUmgebungsvariablen von compose überschreiben jar/WAR-interne Defaults
plantpulse-certsLiest nur PP_TLS_* von compose. Sourced nicht aus der Datei

Priorität – Was überschreibt was

Die Reihenfolge, in der bin/env.sh von oben nach unten läuft, ist die Prioritätsordnung.

PrioritätQuelleWarum es gewinnt
1 (höchste)/etc/kopens/plantpulse-platform.env (Secret-Sidecar)export VAR=값 bedingungslos zugewiesen, überschreibt auch Shell-exports
2/etc/kopens/platform.node.env (pro Node)Wird nach Sidecar sourced, ebenfalls bedingungslose Zuweisung
3export der aufgerufenen ShellÜberschreibt :- des Defaults – nur wenn 1·2 diesen Namen nicht haben
4 (niedrigste)bin/env.sh in ${VAR:-기본값}Wird nur verwendet, wenn unset
Priorität 1 ist der häufigste Fehler

Nach der Installation wird PP_PG_PASSWORD=새값 bin/up.sh auf einem Knoten stillschweigend ignoriert. Der Sidecar hat diesen Namen bereits. Um den Wert zu ändern, verwenden Sie nur bin/passwd.sh / bin/rotate-secret.sh.

🔑 Die Authorität für Geheimnisse liegt unter /etc/kopens/

DB- und Messaging-Passwörter sowie API-Schlüssel befinden sich nicht in den obigen zwei Dateien, sondern im Sidecar

Die tatsächlichen Werte für Dienstkonten-Passwörter (PP_PG_PASSWORD · PP_CASSANDRA_PASSWORD · PP_MQ_PASSWORD usw.) und API-Schlüssel befinden sich außerhalb des Repo-Baums in der Sidecar-Datei.

DateiStatus
/etc/kopens/plantpulse-platform.envAktuelle Autorität – gemeinsame Konvention für platform · ai · studio (plantpulse-<product>.env), Berechtigung 0600
/opt/kopens/plantpulse-platform.envAlter Pfad (existierte nur 2026-08-25 ~ 08-29) – wird nicht gelesen oder geschrieben. Wenn vorhanden, setzt das Installationsskript es auf den aktuellen Pfad zurück

Prüfen Sie zuerst mit ls -l /etc/kopens/, ob die Autorität vorhanden ist.

Der Sidecar überschreibt bin/env.sh. env.sh sourced zuerst den Sidecar oben, und darunter sind alle Werte ${VAR:-기본값}-Form, daher hat das Ändern nur des Passworts in env.sh keine Wirkung – der alte Wert des Sidecars gewinnt weiterhin.

Bei der Installation werden keine Zufallszahlen generiert

install.sh platziert den Default-Wert von bin/env.sh direkt im Sidecar. Sie müssen ihn daher bei der Inbetriebnahme unbedingt austauschenAnfangspasswort

Compose erfordert Passwörter als ${PP_X:?}, daher startet der Stack nicht teilweise konfiguriert, sondern startet überhaupt nicht, wenn der Wert leer ist.

Ändern Sie nicht Passwörter und API-Schlüssel durch Dateibearbeitung

Das Ändern des Sidecars allein reicht nicht. Bei Werten wie PostgreSQL · Cassandra, wo der Server-Konto die Autorität ist, müssen Sie auch die Serverseite ändern, und die falsche Reihenfolge verhindert, dass die Plattform startet.

Verwenden Sie das dedizierte Verfahren – Passwortänderung (Credential Rotation). Dies ist eine Aufgabe, die einmal bei der Inbetriebnahme durchgeführt wird und dann erledigt ist.

Das 🔑-Symbol kennzeichnet Geheimnisse. Geben Sie diese nicht in git · Issues · Chat ein.

1.5 Container-Laufzeit · Host-Ressourcen (DOCKER_*)

Werte, die durch bin/env.sh definiert werden. Die folgenden Ressourcenwerte werden nicht als festgelegte Defaults berechnet, sondern der Host wird beobachtet – die Verwendung von Konstanten kann dazu führen, dass auf kleinen Hosts der Start abgelehnt wird (wenn --cpus größer als echte Kerne ist, lehnt docker ab) oder während des Startens OOM-killed wird. Eine für jedes System angegebene Wert gewinnt immer.

VariableWie bestimmt
DOCKER_CMDdocker (podman auch möglich)
DOCKER_REGISTRYdocker.kopens.io/pp – Registry-Präfix für acht Stack-Images
PP_IMAGE_TAGlatest. Bei Release wird ein festes Tag wie 2026.08 empfohlen
DOCKER_PP_CPUSnproc (bei Lesefehler 8)
DOCKER_PP_CLUSTER_CORESDOCKER_PP_CPUS - 2, mindestens 4 · höchstens 30. An Container als PP_CLUSTER_CORES übergeben
DOCKER_PP_MEMORY90% der Host-RAM, minimum 8G
DOCKER_DATALAKE_MEMORY80G. Wenn der Host kleiner ist, 90% RAM (am 2026-09-04 auf 64G erhöht – der spark-submit des Archivers läuft jetzt in diesem Container, und der 64G-Grenzwert verursachte OOM. Gemessener Peak 63,9G)
DOCKER_PW_MEMORYgleicher Wert wie DOCKER_DATALAKE_MEMORY – Worker verwendet das gleiche Image wie Data-Lake, daher das gleiche Budget
DOCKER_PP_DATA_DISK_NAMETatsächliche Festplatte hinter / wird rückwärts über findmnt + lsblk nachverfolgt (LVM/dm auch auf physische Festplatte). Bei Fehler sda
DOCKER_PP_EXTERNAL_IPStandard leer. Nur in NAT-Umgebung echte öffentliche IP
Keine ungültigen IPs in DOCKER_PP_EXTERNAL_IP eingeben

Dieser Wert fließt über PP_SERVICE_IP in die TLS-Zertifikat-SAN ein. Wenn auch nur eine IP mit falschem Format gemischt wird, lehnt openssl die gesamte Erweiterungsdatei ab und keine Zertifikate werden generiert.

Netzwerk

VariableStandardBeschreibung
DOCKER_PP_NETWORKpp-netDocker-Netzwerk-Name
DOCKER_SUBNET10.99.0.0/24Subnetz (keine Überlappung mit anderen Container-Netzen)
DOCKER_GATEWAY10.99.0.1Gateway
DOCKER_PP_IP10.99.0.100Feste IP des Data-Lake

Pro-App-Speichergrenzen – compose bestimmt

Jede App hat ein separates mem_limit als erstes Ziel der Container-Isolation (OOM-Isolation). Wenn eine App ihre Grenze erreicht, bleiben andere Apps und die Infrastruktur am Leben.

VariableStandardService
DOCKER_SERVER_MEMORY / DOCKER_SERVER_HEAP16g / 12gplantpulse-server-web
DOCKER_BATCH_MEMORY / DOCKER_BATCH_HEAP4g / 3gplantpulse-batch-web
DOCKER_WAREHOUSE_MEMORY8gplantpulse-warehouse
DOCKER_OPCUA_MEMORY4gplantpulse-plugin-opcua-server
DOCKER_AASX_MEMORY4gplantpulse-plugin-aasx-server
DOCKER_HA_MEMORY2gplantpulse-ha
DOCKER_DATALAKE_MEMORY80gplantpulse-datalake

Volumes

VariableStandardZweck
DOCKER_PP_DATA_VOLUMEpp-dataPersistente Datenspeicherung
DOCKER_PP_TEMP_VOLUMEpp-tempTemporäre Daten
DOCKER_PP_BACKUP_VOLUMEpp-backupSicherungsspeicher
DOCKER_PP_SECURITY_VOLUMEpp-securityTLS-Material
DOCKER_PP_PROXY_CERTS_VOLUMEpp-proxy-certsProxy-Zertifikate

install.sh einmalige Optionen

VariableEffekt
SKIP_OS=1OS-Setup überspringen
SKIP_LOGIN=1Registry-Login überspringen
SKIP_FW=1Firewall-Konfiguration überspringen
DOCKER_DATA_DIRDocker data-root Pfad (Standard /data1/docker-data)

2. Das Minimum – das sollten Sie überprüfen

Bei einer neuen Installation auf einem einzelnen Server sind nur wenige Dinge zu ändern. Ressourcenwerte werden von der Installation basierend auf dem Host berechnet.

WasWoHinweis
🔑 Verschiedene *_PASSWORD · API-Schlüsselbin/passwd.sh / bin/rotate-secret.shMuss bei Inbetriebnahme ausgetauscht werden. Dateibearbeitung funktioniert nicht
PP_LANGbin/env.shFür koreanischen Betrieb ko (Standard en)
PP_TZbin/env.shFür koreanischen Betrieb Asia/Seoul beibehalten
DOCKER_PP_EXTERNAL_IPbin/env.shNur hinter NAT. Andernfalls leer lassen
DOCKER_DATALAKE_MEMORYbin/env.shStandard 80G. Wird automatisch reduziert, wenn Host klein ist
Die PP_* in Abschnitt 3 und darunter sind «Namen, die der Container sieht»

Werte wie PP_HOST_IP · PP_DATA_DIR · PP_CLUSTER_CORES sind Namen, die im Container gelten, und die Werte werden vom Host durch compose und bin/env.sh von DOCKER_* festgelegt (§1.5). Die Kernanzahl wird beispielsweise durch DOCKER_PP_CLUSTER_CORES berechnet und als PP_CLUSTER_CORES an den Container übergeben.

Erwarten Sie nicht, dass eine Änderung von nur PP_CLUSTER_CORES auf dem Host wirksam wird – wenn Sie sie nicht übergeben, wird Kyuubi glauben, dass 30 Kerne existieren, die auf einem 16-vCPU-Kasten nicht existieren, und wird niemals starten.

3. Plattform-Grundlagen / Netzwerk / Ressourcen

VariableStandardBeschreibung
PP_HOME/opt/kopens/plantpulse-platformInstallations-Root (identisch im Container)
PP_SCHEMEPPDeployment-Identifikationsschema
PP_MODEMASTERKnotenrolle (MASTER / Worker) – Achse der Clusterbildung
PP_TIERFULLGate der Ebenen, die dieser Knoten startet (FULL / DATALAKE / APP) – unabhängig von PP_MODE. FULL=Infrastruktur+Apps All-in-One, DATALAKE=nur Infrastruktur, APP=nur Apps (ferngesteuerte Data-Lake-Verbindung). Details siehe 2-Knoten-Split-Installation
PP_OPTIONS{}Einzelne Service-Ein-/Aus JSON. Das Ebenen-Gate ist zu PP_TIER migriert (siehe Abschnitt 3.3 unten)
PP_HOST_IP127.0.0.1IP dieses Knotens
PP_SERVICE_IP127.0.0.1Service-Bind-IP
PP_MASTER_IP127.0.0.1Master(Data-Lake)-IP, auf die Worker/APP-Ebene verweist. Auch Quelle für Kafka advertised.listeners. Bei Bereitstellung der DATALAKE-Ebene automatisch erkannt, wenn nicht angegeben
PP_DATALAKE_ANCHOR(abgeleitet)Standard-IP-Anker für 5 Datastore HOSTs. APP-Ebene=PP_MASTER_IP(ferngesteuert), sonst(FULL/DATALAKE)=PP_HOST_IP(eigene IP). Abgeleiteter Wert, nicht direkt zu setzen (siehe Abschnitt 3.2 unten)
PP_PUBLIC_IP127.0.0.1Externe öffentliche IP (NAT-Umgebung)
PP_DATA_DIR/data1/pp-dataDaten-Root
PP_TEMP_DIR/data1/pp-tempTemporäre Dateien-Root
PP_BACKUP_DIR/data1/pp-backupSicherungs-Root
PP_DATA_DISK_NAMEsdbDatenspeicher-Gerätename
PP_CLUSTER_CORES30Anzahl verwendeter Kerne
PP_CLUSTER_MEMORY_BY_CORE2GRAM pro Kern
PP_LANGenStandardsprache
PP_TZAsia/SeoulZeitzone (automatisch auf alle Java-Prozesse angewendet)

3.1 PP_TIER – Gate der Ebenen-Aktivierung

PP_TIER definiert welche Ebene dieser Knoten startet. Völlig unabhängig von PP_MODE (MASTER/WORKER), der Clustering-Achse.

PP_TIERGestartete Ebene
FULL (Standard)Infrastruktur + Anwendungen (Single-Box All-in-One – gleich wie bestehende Installation, wenn nicht angegeben)
DATALAKENur Infrastruktur-Ebene (Cassandra/PG/Kafka/MQTT/Redis/MinIO/Spark/Hive/TSE/CEP/Data Gateway/Temporal/Kestra/Monitor)
APPNur Anwendungs-Ebene (Server/Batch/Warehouse/OPC-UA/AASX/HA – ferngesteuerte Data-Lake-Verbindung)

Für die Aufteilung von Data-Lake/Anwendungen auf zwei Boxen siehe 2-Knoten-Split-Installation.

3.2 PP_DATALAKE_ANCHOR – Datastore-Anker (abgeleiteter Wert)

Konzept: Die Standard-Hosts von PP_REDIS_HOST·PP_POSTGRES_HOST·PP_CASSANDRA_HOST·PP_MINIO_HOST·PP_TSE_HOST·PP_TEMPORAL_HOST·PP_KESTRA_HOST·PP_DATA_GATEWAY_HOST·PP_CEP_HOST sind alle als ${PP_DATALAKE_ANCHOR} auszulegen.

  • In der APP-Ebene sind die Speicher fern (Data-Lake-Knoten), daher PP_DATALAKE_ANCHOR = PP_MASTER_IP.
  • In anderen (FULL/DATALAKE) wird auf die eigene IP gebunden, daher PP_DATALAKE_ANCHOR = PP_HOST_IP.

Dieser Wert ist von PP_TIER abgeleitet, daher nicht direkt zu setzen. Der APP-Knoten zeigt auf den Data-Lake, wenn Sie nur PP_MASTER_IP angeben, alle Datastore-Hosts werden automatisch richtig zeigen.

3.3 PP_OPTIONS – Einzelne Service-Ein-/Aus

PP_OPTIONS ist JSON zum Ein- und Ausschalten einzelner Komponenten. Standard ist {}, nicht angegebene Schlüssel gelten alle als true(aktiv). Ebenen-Aktivierung (alte use-infra / use-app) ist zu PP_TIER migriert.

Beispiel: Um externe verwaltete Redis zu nutzen und eingebautes Valkey auszuschalten:

export PP_OPTIONS='{"enable-valkey":false}'

Verfügbare enable-*-Schlüssel (alle Standard true):

enable-messaging · enable-valkey · enable-postgres · enable-cassandra · enable-spark · enable-minio · enable-tse · enable-cep · enable-workflow · enable-data-gateway · enable-sql · enable-hive · enable-gravitino · enable-kyuubi · enable-grafana · enable-monitor

4. Datenspeicher

VariableStandardBeschreibung
PP_REDIS_HOST / PP_REDIS_PORT${PP_DATALAKE_ANCHOR} / 6379Valkey/Redis (TLS-Listener 6380)
PP_REDIS_USER / 🔑 PP_REDIS_PASSWORDredis / —Redis-Konto
PP_POSTGRES_HOST / PP_POSTGRES_PORT${PP_DATALAKE_ANCHOR} / 5432PostgreSQL 18 (Percona)
PP_PG_USER / 🔑 PP_PG_PASSWORDplantpulse / —PostgreSQL-Konto
PP_CASSANDRA_HOST / PP_CASSANDRA_PORT${PP_DATALAKE_ANCHOR} / 9042Cassandra
PP_CASSANDRA_USER / 🔑 PP_CASSANDRA_PASSWORDcassandra / —Cassandra-Konto
PP_STORAGE_PORT9042Cassandra-Port für Speicherebenen-Clients
PP_MINIO_HOST / PP_MINIO_PORT${PP_DATALAKE_ANCHOR} / 9000MinIO-Objekt-Speicher
PP_MINIO_USER / 🔑 PP_MINIO_PASSWORDminio / —MinIO-Konto
PP_MINIO_BUCKETplantpulseStandard-Bucket
PP_DB_NAMEppPostgreSQL-Datenbankname
PP_KEYSPACEppCassandra-Keyspace-Name
PP_HIVE_DBhive-metastore-230Hive-Metastore-DB

5. Nachrichtenübertragung

VariableStandardBeschreibung
PP_MQ_USER / 🔑 PP_MQ_PASSWORDmq / —Kafka·MQTT gemeinsames Konto (kein separates Kafka-Konto)
PP_TOPIC_PREFIXppKafka-Topic-Präfix (wie pp-tag-point)
PP_KAFKA_HOST / PP_KAFKA_PORTPP_MASTER_IP / 9092Kafka-Broker
PP_KAFKA_TLS_PORT9094Kafka externe TLS
PP_KAFKA_CONTROLLER_PORT9093Kafka KRaft-Controller
PP_MQTT_HOST / PP_MQTT_PORTPP_MASTER_IP / 1883MQTT (HiveMQ)
PP_MQTT_TLS_PORT1884MQTT TLS
STOMP (ActiveMQ) ist pensioniert

Mit der Browser-Echtzeit-Push zu SSE haben die STOMP-Broker aus dem Data-Lake-Image entfernt. PP_STOMP_*-Variablen und 61000/61004-Ports sind nicht mehr verfügbar. Falls sie noch in alten Firewall-Regeln existieren, können Sie diese bereinigen.

6. Verarbeitung · Zeitreihen · Analytik · Workflows

VariableStandardBeschreibung
PP_CEP_HOST / PP_CEP_PORT / PP_CEP_TLS_PORT${PP_DATALAKE_ANCHOR} / 7400 / 7401CEP-Server
PP_CEP_PROTOCOLhttpCEP-Verbindungsprotokoll. Für verteilt/Container wird https empfohlen
PP_CEP_CONNECT_PORT(abgeleitet: PP_DATA_GATEWAY_TLS_PORT)server-web→CEP-Verbindungsport. Automatisch zum Protokoll (http→7400, https→7401). Wenn explizit, hat dieser Wert Vorrang
PP_DATA_GATEWAY_HOST / PP_DATA_GATEWAY_PORT / PP_DATA_GATEWAY_TLS_PORT${PP_DATALAKE_ANCHOR} / 5500 / 5501Data Gateway
PP_DATA_GATEWAY_PROTOCOLhttpDGW-Verbindungsprotokoll (intern loopback Standard http)
PP_DATA_GATEWAY_CONNECT_PORT(abgeleitet)DGW-Verbindungsport. Automatisch zum Protokoll (http→5500, https→5501). Wenn explizit, hat dieser Wert Vorrang
PP_TSE_HOST / PP_TSE_PORT / PP_TSE_TLS_PORT${PP_DATALAKE_ANCHOR} / 7800 / 7801Zeitreihen-Engine (TSE). Server hört auf http 7800 · https 7801
PP_TSE_PROTOCOLhttpTSE-Client-Verbindungsprotokoll. Interner Signalweg, daher Klartext http Standard – getrennt vom TLS-Hauptschalter(PP_TLS_ENABLED) (2026-08)
PP_TSE_CONNECT_PORT(nicht gesetzt)env.sh exportierte Betreiber-explizite Override-Hook. Vorlage verbraucht als ${PP_TSE_CONNECT_PORT:7800}-Fallback
PP_TSE_JDBC_SCHEMEtsJDBC-Schema. Klartext ts Standard (jdbc.tse.url-Vorlage ist ts hart codiert)
PP_TSE_USER / 🔑 PP_TSE_PASSWORDtse / —TSE-Konto
PP_ANALYTICS_USER / 🔑 PP_ANALYTICS_PASSWORDspark / —Analytics(Spark/Kyuubi-Client)-Konto. Separate Anmeldedaten vom internen Kyuubi-Metastore(PP_HIVE_*)
PP_HIVE_HOST / PP_HIVE_PORTPP_MASTER_IP / 9083Hive-Metastore
PP_HIVE_USER / 🔑 PP_HIVE_PASSWORDhive / —Hive-Konto
PP_SPARK_HOST / PP_SPARK_PORTPP_MASTER_IP / 7077Spark-Master
PP_KYUUBI_PORT10000Kyuubi-SQL-Gateway
PP_GRAVITINO_USER / 🔑 PP_GRAVITINO_PASSWORDgravitino / —Gravitino-Katalog
PP_TEMPORAL_HOST / PP_TEMPORAL_PORT${PP_DATALAKE_ANCHOR} / 7233Temporal-Engine (Web UI 8233)
PP_TEMPORAL_USER / 🔑 PP_TEMPORAL_PASSWORDtemporal / —Temporal-Konto
PP_KESTRA_HOST / PP_KESTRA_PORT${PP_DATALAKE_ANCHOR} / 8380Kestra-Scheduler
PP_KESTRA_ADMIN_EMAIL / 🔑 PP_KESTRA_ADMIN_PASSWORDadmin@plantpulse.io / —Kestra-Administrator
PP_KESTRA_DB_USER / 🔑 PP_KESTRA_DB_PASSWORDkestra / —Kestra-Metadaten-DB

7. Plugins · Observability · Web-Ebene

VariableStandardBeschreibung
PP_OPCUA_PORT / PP_OPCUA_TCP_PORT11004OPC-UA opc.tcp-Protokoll-Port
PP_OPCUA_TLS_PORT11005OPC-UA TLS
PP_AAS_V3_PORT8090AAS(BaSyx V3) API. UI ist 8091, Registry/AAS-Ports(4800/4801) sind im Code fest und können nicht per env geändert werden
PP_GRAFANA_PORT3000Grafana-Dashboard
PP_GRAFANA_ADMIN_USER / 🔑 PP_GRAFANA_ADMIN_PASSWORDadmin / —Grafana-Administrator
PP_WEBSOCKET_PORT / PP_WEBSOCKET_PORT_SSL8000 / 8004Echtzeit-Push-WebSocket
PP_WEBSOCKET_USER / 🔑 PP_WEBSOCKET_SERVER_PASSWORDws / —WebSocket-Server-Konto
PP_MAIL_SMTP_PORT25Alarm-/Report-Mail-Versand SMTP
PP_MAIL_SMTP_USER / 🔑 PP_MAIL_SMTP_PASSWORDwebmaster@kopens.com / —SMTP-Konto
PP_MAIL_SMTP_AUTH / PP_MAIL_SMTP_STARTTLSfalse / falseSMTP-Authentifizierung · STARTTLS

8. TLS / SSL

VariableStandardBeschreibung
PP_TLS_ENABLEDtrueTLS-Hauptschalter – bestimmt Standard-Protokoll der Service-Clients
PP_DEFAULT_PROTOCOL(abgeleitet: PP_TLS_ENABLED)Service-Client-Standard-Protokoll. PP_TLS_ENABLED=truehttps, falsehttp. TSE u. a. erben diesen Wert, damit Protokoll/Port nicht mit Schalter kollidieren
PP_TLS_CERT_DIR/var/security/plantpulseZertifikat-Verzeichnis
PP_TLS_DOMAINplantpulse.ioZertifikat-Domäne
🔑 PP_TLS_KEYSTORE_PASSWORD / 🔑 PP_TLS_TRUSTSTORE_PASSWORDkeystore/truststore-Passwörter (müssen auf allen Knoten gleich sein)
PP_TLS_VALID_DAYS3650Zertifikat-Gültigkeit (Tage)
PP_TLS_SAN_IPSPP_HOST_IP,…,127.0.0.1Zertifikat-SAN-IP. Muss in Betrieb die externe Zugriffsanfrage-IP (z. B. öffentliche IP) enthalten
PP_TLS_SAN_DNSlocalhost,<hostname>,<domain>Zertifikat-SAN-DNS
PP_TLS_NODE_NAMESmaster worker-1 … worker-5Cluster-Knotenname
PP_TLS_FORCE_REGENERATEfalseZertifikat bei true zwingen zu regenerieren

9. API-Schlüssel / AI-Gateway

Alle haben Entwicklungs-Defaults (Fallback). Bei Betrieb/Kundenlieferung müssen Sie durch Docker -e oder export ersetzen.

VariableBeschreibung
🔑 PP_API_KEYInnerer Plattform-API-Schlüssel (Server ↔ Edge-Agent-Authentifizierung)
🔑 PP_DATA_GATEWAY_API_KEYserver-web → data-gateway JDBC-Authentifizierung
🔑 PP_CEP_API_KEYserver-web → CEP-Server X-API-Key (muss CEP-Server cep.api.key entsprechen)
🔑 PP_FLOW_WEBHOOK_API_KEYFlow-Engine externe Webhook-Authentifizierung
PP_AI_OPENAI_ENABLEDAI-Gateway aktivieren (Standard false)
PP_AI_OPENAI_BASE_URLOpenAI-kompatible LLM-Proxy-URL (Standard https://api.openai.com)
🔑 PP_AI_OPENAI_API_KEYLLM-API-Schlüssel (erforderlich wenn PP_AI_OPENAI_ENABLED=true)
PP_AI_OPENAI_MODELZu verwendendes Modell (Standard gpt-5-mini)

10. Anwendung nach Änderung

cd /opt/kopens/plantpulse-platform-docker/bin
vi env.sh # 호스트 쪽 값 (DOCKER_* · PP_LANG · PP_TZ 등)
./restart.sh # 스택 재시작 — 준비될 때까지 대기 (종료 코드 0 = 쓸 수 있다)

Wenn Sie Werte ändern müssen, die der Container sieht, bearbeiten Sie compose/docker-compose.yml und starten neu mit der gleichen Methode. Die Konfigurationsvorlage ist als Bind-Mount unter /etc/kopens/conf des Hosts verfügbar und kann direkt vom Host bearbeitet werden. Sie werden auch bei Neuinstallationen beibehalten.

Wenn eine Änderung einer Variablen nicht wirksam wird, überprüfen Sie der Reihe nach:

ÜberprüfungInhalt
① Gewinnt SidecarWenn derselbe Name in /etc/kopens/plantpulse-platform.env existiert, schlägt env.sh auch Shell-export fehl → Priorität
② Ist es ein Name, der die App erreichtDie sechs Apps lesen env.sh nicht. Wenn nicht in compose, erreicht die App es nicht
③ Wurde neu gestartetDie meisten Werte, einschließlich Gebietsschema und Zeitzone, werden nur beim Start angewendet
④ Ist es ein PasswortPasswörter können nicht durch Dateibearbeitung geändert werden → Passwort-Rotation

Detailliertes Verfahren siehe Startleitfaden.

Führen Sie env-reset.sh nicht im Container aus

env-reset.sh im Data-Lake-Container ist ein entwicklungsspezifisches Werkzeug, das alle PP_* unset und env.sh erneut liest. Wenn Sie es hier ausführen, verlieren Sie die durch compose eingespeisten Werte und fallen auf die im Image eingebauten Defaults zurück.