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.
| Definitionsort | Was ist hier | Wer liest |
|---|---|---|
plantpulse-platform-docker/bin/env.sh | Werte vom Host – Anmeldedaten-Defaults, Docker-Laufzeit, Netzwerk, berechnete Ressourcenwerte vom Host | Host-Betriebsskripte |
plantpulse-platform-docker/compose/docker-compose.yml | Werte, die Container tatsächlich sehen | Container |
env.sh nichtDie 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.
| Ebene | Was legt den Wert fest |
|---|---|
plantpulse-datalake | Compose übergibt den Wert → pd des Containers empfängt ihn als ${VAR:-기본값}. Der übergebene Wert gewinnt |
| Sechs Apps | Umgebungsvariablen von compose überschreiben jar/WAR-interne Defaults |
plantpulse-certs | Liest 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ät | Quelle | Warum 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 |
| 3 | export 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 |
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/
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.
| Datei | Status |
|---|---|
/etc/kopens/plantpulse-platform.env | Aktuelle Autorität – gemeinsame Konvention für platform · ai · studio (plantpulse-<product>.env), Berechtigung 0600 |
/opt/kopens/plantpulse-platform.env | Alter 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.
install.sh platziert den Default-Wert von bin/env.sh direkt im Sidecar. Sie müssen ihn daher bei der Inbetriebnahme unbedingt austauschen → Anfangspasswort
Compose erfordert Passwörter als ${PP_X:?}, daher startet der Stack nicht teilweise konfiguriert, sondern startet überhaupt nicht, wenn der Wert leer ist.
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.
| Variable | Wie bestimmt |
|---|---|
DOCKER_CMD | docker (podman auch möglich) |
DOCKER_REGISTRY | docker.kopens.io/pp – Registry-Präfix für acht Stack-Images |
PP_IMAGE_TAG | latest. Bei Release wird ein festes Tag wie 2026.08 empfohlen |
DOCKER_PP_CPUS | nproc (bei Lesefehler 8) |
DOCKER_PP_CLUSTER_CORES | DOCKER_PP_CPUS - 2, mindestens 4 · höchstens 30. An Container als PP_CLUSTER_CORES übergeben |
DOCKER_PP_MEMORY | 90% der Host-RAM, minimum 8G |
DOCKER_DATALAKE_MEMORY | 80G. 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_MEMORY | gleicher Wert wie DOCKER_DATALAKE_MEMORY – Worker verwendet das gleiche Image wie Data-Lake, daher das gleiche Budget |
DOCKER_PP_DATA_DISK_NAME | Tatsächliche Festplatte hinter / wird rückwärts über findmnt + lsblk nachverfolgt (LVM/dm auch auf physische Festplatte). Bei Fehler sda |
DOCKER_PP_EXTERNAL_IP | Standard leer. Nur in NAT-Umgebung echte öffentliche IP |
DOCKER_PP_EXTERNAL_IP eingebenDieser 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
| Variable | Standard | Beschreibung |
|---|---|---|
DOCKER_PP_NETWORK | pp-net | Docker-Netzwerk-Name |
DOCKER_SUBNET | 10.99.0.0/24 | Subnetz (keine Überlappung mit anderen Container-Netzen) |
DOCKER_GATEWAY | 10.99.0.1 | Gateway |
DOCKER_PP_IP | 10.99.0.100 | Feste 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.
| Variable | Standard | Service |
|---|---|---|
DOCKER_SERVER_MEMORY / DOCKER_SERVER_HEAP | 16g / 12g | plantpulse-server-web |
DOCKER_BATCH_MEMORY / DOCKER_BATCH_HEAP | 4g / 3g | plantpulse-batch-web |
DOCKER_WAREHOUSE_MEMORY | 8g | plantpulse-warehouse |
DOCKER_OPCUA_MEMORY | 4g | plantpulse-plugin-opcua-server |
DOCKER_AASX_MEMORY | 4g | plantpulse-plugin-aasx-server |
DOCKER_HA_MEMORY | 2g | plantpulse-ha |
DOCKER_DATALAKE_MEMORY | 80g | plantpulse-datalake |
Volumes
| Variable | Standard | Zweck |
|---|---|---|
DOCKER_PP_DATA_VOLUME | pp-data | Persistente Datenspeicherung |
DOCKER_PP_TEMP_VOLUME | pp-temp | Temporäre Daten |
DOCKER_PP_BACKUP_VOLUME | pp-backup | Sicherungsspeicher |
DOCKER_PP_SECURITY_VOLUME | pp-security | TLS-Material |
DOCKER_PP_PROXY_CERTS_VOLUME | pp-proxy-certs | Proxy-Zertifikate |
install.sh einmalige Optionen
| Variable | Effekt |
|---|---|
SKIP_OS=1 | OS-Setup überspringen |
SKIP_LOGIN=1 | Registry-Login überspringen |
SKIP_FW=1 | Firewall-Konfiguration überspringen |
DOCKER_DATA_DIR | Docker 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.
| Was | Wo | Hinweis |
|---|---|---|
🔑 Verschiedene *_PASSWORD · API-Schlüssel | bin/passwd.sh / bin/rotate-secret.sh | Muss bei Inbetriebnahme ausgetauscht werden. Dateibearbeitung funktioniert nicht |
PP_LANG | bin/env.sh | Für koreanischen Betrieb ko (Standard en) |
PP_TZ | bin/env.sh | Für koreanischen Betrieb Asia/Seoul beibehalten |
DOCKER_PP_EXTERNAL_IP | bin/env.sh | Nur hinter NAT. Andernfalls leer lassen |
DOCKER_DATALAKE_MEMORY | bin/env.sh | Standard 80G. Wird automatisch reduziert, wenn Host klein ist |
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
| Variable | Standard | Beschreibung |
|---|---|---|
PP_HOME | /opt/kopens/plantpulse-platform | Installations-Root (identisch im Container) |
PP_SCHEME | PP | Deployment-Identifikationsschema |
PP_MODE | MASTER | Knotenrolle (MASTER / Worker) – Achse der Clusterbildung |
PP_TIER | FULL | Gate 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_IP | 127.0.0.1 | IP dieses Knotens |
PP_SERVICE_IP | 127.0.0.1 | Service-Bind-IP |
PP_MASTER_IP | 127.0.0.1 | Master(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_IP | 127.0.0.1 | Externe öffentliche IP (NAT-Umgebung) |
PP_DATA_DIR | /data1/pp-data | Daten-Root |
PP_TEMP_DIR | /data1/pp-temp | Temporäre Dateien-Root |
PP_BACKUP_DIR | /data1/pp-backup | Sicherungs-Root |
PP_DATA_DISK_NAME | sdb | Datenspeicher-Gerätename |
PP_CLUSTER_CORES | 30 | Anzahl verwendeter Kerne |
PP_CLUSTER_MEMORY_BY_CORE | 2G | RAM pro Kern |
PP_LANG | en | Standardsprache |
PP_TZ | Asia/Seoul | Zeitzone (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_TIER | Gestartete Ebene |
|---|---|
FULL (Standard) | Infrastruktur + Anwendungen (Single-Box All-in-One – gleich wie bestehende Installation, wenn nicht angegeben) |
DATALAKE | Nur Infrastruktur-Ebene (Cassandra/PG/Kafka/MQTT/Redis/MinIO/Spark/Hive/TSE/CEP/Data Gateway/Temporal/Kestra/Monitor) |
APP | Nur 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_HOSTsind alle als${PP_DATALAKE_ANCHOR}auszulegen.
- In der
APP-Ebene sind die Speicher fern (Data-Lake-Knoten), daherPP_DATALAKE_ANCHOR = PP_MASTER_IP.- In anderen (
FULL/DATALAKE) wird auf die eigene IP gebunden, daherPP_DATALAKE_ANCHOR = PP_HOST_IP.Dieser Wert ist von
PP_TIERabgeleitet, daher nicht direkt zu setzen. DerAPP-Knoten zeigt auf den Data-Lake, wenn Sie nurPP_MASTER_IPangeben, 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
| Variable | Standard | Beschreibung |
|---|---|---|
PP_REDIS_HOST / PP_REDIS_PORT | ${PP_DATALAKE_ANCHOR} / 6379 | Valkey/Redis (TLS-Listener 6380) |
PP_REDIS_USER / 🔑 PP_REDIS_PASSWORD | redis / — | Redis-Konto |
PP_POSTGRES_HOST / PP_POSTGRES_PORT | ${PP_DATALAKE_ANCHOR} / 5432 | PostgreSQL 18 (Percona) |
PP_PG_USER / 🔑 PP_PG_PASSWORD | plantpulse / — | PostgreSQL-Konto |
PP_CASSANDRA_HOST / PP_CASSANDRA_PORT | ${PP_DATALAKE_ANCHOR} / 9042 | Cassandra |
PP_CASSANDRA_USER / 🔑 PP_CASSANDRA_PASSWORD | cassandra / — | Cassandra-Konto |
PP_STORAGE_PORT | 9042 | Cassandra-Port für Speicherebenen-Clients |
PP_MINIO_HOST / PP_MINIO_PORT | ${PP_DATALAKE_ANCHOR} / 9000 | MinIO-Objekt-Speicher |
PP_MINIO_USER / 🔑 PP_MINIO_PASSWORD | minio / — | MinIO-Konto |
PP_MINIO_BUCKET | plantpulse | Standard-Bucket |
PP_DB_NAME | pp | PostgreSQL-Datenbankname |
PP_KEYSPACE | pp | Cassandra-Keyspace-Name |
PP_HIVE_DB | hive-metastore-230 | Hive-Metastore-DB |
5. Nachrichtenübertragung
| Variable | Standard | Beschreibung |
|---|---|---|
PP_MQ_USER / 🔑 PP_MQ_PASSWORD | mq / — | Kafka·MQTT gemeinsames Konto (kein separates Kafka-Konto) |
PP_TOPIC_PREFIX | pp | Kafka-Topic-Präfix (wie pp-tag-point) |
PP_KAFKA_HOST / PP_KAFKA_PORT | PP_MASTER_IP / 9092 | Kafka-Broker |
PP_KAFKA_TLS_PORT | 9094 | Kafka externe 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 |
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
| Variable | Standard | Beschreibung |
|---|---|---|
PP_CEP_HOST / PP_CEP_PORT / PP_CEP_TLS_PORT | ${PP_DATALAKE_ANCHOR} / 7400 / 7401 | CEP-Server |
PP_CEP_PROTOCOL | http | CEP-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 / 5501 | Data Gateway |
PP_DATA_GATEWAY_PROTOCOL | http | DGW-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 / 7801 | Zeitreihen-Engine (TSE). Server hört auf http 7800 · https 7801 |
PP_TSE_PROTOCOL | http | TSE-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_SCHEME | ts | JDBC-Schema. Klartext ts Standard (jdbc.tse.url-Vorlage ist ts hart codiert) |
PP_TSE_USER / 🔑 PP_TSE_PASSWORD | tse / — | TSE-Konto |
PP_ANALYTICS_USER / 🔑 PP_ANALYTICS_PASSWORD | spark / — | Analytics(Spark/Kyuubi-Client)-Konto. Separate Anmeldedaten vom internen Kyuubi-Metastore(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 | ${PP_DATALAKE_ANCHOR} / 7233 | Temporal-Engine (Web UI 8233) |
PP_TEMPORAL_USER / 🔑 PP_TEMPORAL_PASSWORD | temporal / — | Temporal-Konto |
PP_KESTRA_HOST / PP_KESTRA_PORT | ${PP_DATALAKE_ANCHOR} / 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-Metadaten-DB |
7. Plugins · Observability · Web-Ebene
| Variable | Standard | Beschreibung |
|---|---|---|
PP_OPCUA_PORT / PP_OPCUA_TCP_PORT | 11004 | OPC-UA opc.tcp-Protokoll-Port |
PP_OPCUA_TLS_PORT | 11005 | OPC-UA TLS |
PP_AAS_V3_PORT | 8090 | AAS(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_PORT | 3000 | Grafana-Dashboard |
PP_GRAFANA_ADMIN_USER / 🔑 PP_GRAFANA_ADMIN_PASSWORD | admin / — | Grafana-Administrator |
PP_WEBSOCKET_PORT / PP_WEBSOCKET_PORT_SSL | 8000 / 8004 | Echtzeit-Push-WebSocket |
PP_WEBSOCKET_USER / 🔑 PP_WEBSOCKET_SERVER_PASSWORD | ws / — | WebSocket-Server-Konto |
PP_MAIL_SMTP_PORT | 25 | Alarm-/Report-Mail-Versand SMTP |
PP_MAIL_SMTP_USER / 🔑 PP_MAIL_SMTP_PASSWORD | webmaster@kopens.com / — | SMTP-Konto |
PP_MAIL_SMTP_AUTH / PP_MAIL_SMTP_STARTTLS | false / false | SMTP-Authentifizierung · STARTTLS |
8. TLS / SSL
| Variable | Standard | Beschreibung |
|---|---|---|
PP_TLS_ENABLED | true | TLS-Hauptschalter – bestimmt Standard-Protokoll der Service-Clients |
PP_DEFAULT_PROTOCOL | (abgeleitet: PP_TLS_ENABLED) | Service-Client-Standard-Protokoll. PP_TLS_ENABLED=true→https, false→http. TSE u. a. erben diesen Wert, damit Protokoll/Port nicht mit Schalter kollidieren |
PP_TLS_CERT_DIR | /var/security/plantpulse | Zertifikat-Verzeichnis |
PP_TLS_DOMAIN | plantpulse.io | Zertifikat-Domäne |
🔑 PP_TLS_KEYSTORE_PASSWORD / 🔑 PP_TLS_TRUSTSTORE_PASSWORD | — | keystore/truststore-Passwörter (müssen auf allen Knoten gleich sein) |
PP_TLS_VALID_DAYS | 3650 | Zertifikat-Gültigkeit (Tage) |
PP_TLS_SAN_IPS | PP_HOST_IP,…,127.0.0.1 | Zertifikat-SAN-IP. Muss in Betrieb die externe Zugriffsanfrage-IP (z. B. öffentliche IP) enthalten |
PP_TLS_SAN_DNS | localhost,<hostname>,<domain> | Zertifikat-SAN-DNS |
PP_TLS_NODE_NAMES | master worker-1 … worker-5 | Cluster-Knotenname |
PP_TLS_FORCE_REGENERATE | false | Zertifikat bei true zwingen zu regenerieren |
9. API-Schlüssel / AI-Gateway
Alle haben Entwicklungs-Defaults (Fallback). Bei Betrieb/Kundenlieferung müssen Sie durch Docker
-eoderexportersetzen.
| Variable | Beschreibung |
|---|---|
🔑 PP_API_KEY | Innerer Plattform-API-Schlüssel (Server ↔ Edge-Agent-Authentifizierung) |
🔑 PP_DATA_GATEWAY_API_KEY | server-web → data-gateway JDBC-Authentifizierung |
🔑 PP_CEP_API_KEY | server-web → CEP-Server X-API-Key (muss CEP-Server cep.api.key entsprechen) |
🔑 PP_FLOW_WEBHOOK_API_KEY | Flow-Engine externe Webhook-Authentifizierung |
PP_AI_OPENAI_ENABLED | AI-Gateway aktivieren (Standard false) |
PP_AI_OPENAI_BASE_URL | OpenAI-kompatible LLM-Proxy-URL (Standard https://api.openai.com) |
🔑 PP_AI_OPENAI_API_KEY | LLM-API-Schlüssel (erforderlich wenn PP_AI_OPENAI_ENABLED=true) |
PP_AI_OPENAI_MODEL | Zu 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üfung | Inhalt |
|---|---|
| ① Gewinnt Sidecar | Wenn 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 erreicht | Die sechs Apps lesen env.sh nicht. Wenn nicht in compose, erreicht die App es nicht |
| ③ Wurde neu gestartet | Die meisten Werte, einschließlich Gebietsschema und Zeitzone, werden nur beim Start angewendet |
| ④ Ist es ein Passwort | Passwörter können nicht durch Dateibearbeitung geändert werden → Passwort-Rotation |
Detailliertes Verfahren siehe Startleitfaden.
env-reset.sh nicht im Container ausenv-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.