So ändern Sie Einstellungen
Je nachdem, was Sie ändern, unterscheiden sich die zu bearbeitende Datei und die Art der Übernahme. Suchen Sie Ihren Fall zuerst in der Tabelle unten.
Der Datensee rendert seine Konfiguration bei jedem Start neu.
Er liest die Vorlagen von plantpulse-datalake-cli/config/templates/, füllt ${PP_*} aus und
überschreibt dann die Konfigurationsplätze der einzelnen Komponenten (wie plantpulse-storage/db/cassandra/conf/cassandra.yaml).
Welche Vorlage wohin gehört, steht auf der einen Seite config/render.map.
Wenn Sie also cassandra.yaml · postgresql.conf · kafka.properties öffnen und ändern,
kehrt beim nächsten pd start alles zum Original zurück. Die Stelle zum Ändern ist die Vorlage.
# ❌ 이렇게 고치면 다음 기동에 사라진다
vi /opt/kopens/plantpulse-platform/plantpulse-storage/db/cassandra/conf/cassandra.yaml
# ✅ 템플릿을 고친다 — 호스트의 /etc/kopens/conf 가 템플릿 자리로 마운트돼 있다
vi /etc/kopens/conf/cassandra.yaml.template
docker exec plantpulse-datalake pd config render # 렌더해 보고
docker exec plantpulse-datalake pd config diff # 「지금 도는 설정」과의 차이 (0 = 같다)
docker exec plantpulse-datalake pd restart storage # 해당 서비스만 재시작
Wenn pd config diff nicht 0 ist, bedeutet das: Die Laufzeitdateien weichen von der Vorlage ab – entweder hat sie jemand direkt geändert oder die Darstellung (Rendering) ist noch nicht erfolgt.
| Was Sie ändern möchten | Beispiel | Wo Sie es ändern | Übernahme |
|---|---|---|---|
| Passwörter · API-Schlüssel | PostgreSQL-Passwort, CEP-API-Schlüssel | bin/passwd.sh | Das Tool startet sogar neu |
| Adresse · Identität dieser Box | Adresse, unter der andere Boxen sich verbinden, Kafka-Werbeadresse, NAT-öffentliche IP | /etc/kopens/platform.node.env | bin/restart-datalake.sh |
| Gemeinsame, nicht geheime Werte aller Knoten | Sprache · Zeitzone, Backup-Zeitplan-Schalter, Konsolen-Log-Endpunkt | /etc/kopens/plantpulse-platform.env | bin/restart-datalake.sh |
| Container-Ressourcen | Speicherlimit des Datensees | /etc/kopens/platform.node.env (DOCKER_DATALAKE_MEMORY) | bin/restart-datalake.sh |
| «Zeilen» der Engine-Konfiguration | postgresql.conf-Parameter, Kafka-Aufbewahrungsdauer, Aster TSDB-Heap | /etc/kopens/conf/<파일>.template | bin/restart-datalake.sh oder im Container pd config render + pd restart <서비스> |
| Backup-Zeitplan | Zeitpunkt des nächtlichen Backups | Im Container pd backup schedule set | Sofort |
| Öffentliche Ports | Auf dem Host geöffnete Ports | compose/docker-compose.yml | bin/restart-datalake.sh — Achtung |
cd /opt/kopens/plantpulse-platform-docker/bin
./status.sh # 0 = 정상
docker exec plantpulse-datalake pd config diff # 런타임 파일 = 렌더 결과인가 (0 = 같다)
docker exec plantpulse-datalake pd doctor # FAIL 0
1. Passwörter · API-Schlüssel
Öffnen Sie keine Dateien. passwd.sh erledigt in einem einzigen Befehl: Kontowechsel auf der Serverseite → Sidecar aktualisieren → Konfiguration neu rendern → Neustart.
cd /opt/kopens/plantpulse-platform-docker
bin/passwd.sh --list # 바꿀 수 있는 키
bin/passwd.sh PP_PG_PASSWORD # 값은 프롬프트로 (권장)
Details finden Sie unter Passwörter · API-Schlüssel ändern.
2. Adresse und Identität dieser Box – Knotendatei
/etc/kopens/platform.node.env ist die Datei für Werte, die nur für diese Box gelten. Kopieren Sie sie nicht auf andere Boxen – tatsächlich wurde eine Box, auf die die Datei einer anderen kopiert wurde, stillschweigend mit der falschen Rolle neu installiert.
| Variable | Wann eintragen | Wenn leer |
|---|---|---|
PP_MASTER_IP | Wenn andere Boxen (Edge, KI, Worker) sich mit diesem Datensee verbinden müssen – die LAN-Adresse dieses Hosts | Adresse im Compose-Netzwerk (10.99.0.100) – funktioniert nur innerhalb derselben Box |
PP_KAFKA_ADVERTISED_HOST | Nur wenn hinter NAT oder über eine zweite Schnittstelle mit Kafka verbunden wird | Das Tool leitet beim Start ab (Betreiberwert > PP_MASTER_IP > Host-Standard-IP). Normalerweise leer lassen |
DOCKER_PP_EXTERNAL_IP | Öffentliche IP in NAT-Umgebungen. Geht in das SAN des TLS-Zertifikats | Leer lassen – bei falscher IP wird kein einziges Zertifikat erstellt |
PP_NODE_ID | Wenn es mehr als eine Box gibt: der kurze, eindeutige Name dieser Box | Wird vom Container-Hostnamen abgeleitet – bei zwei Boxen verdrängen sie sich gegenseitig. Vor dem Anschließen der zweiten Box festlegen |
sudo vi /etc/kopens/platform.node.env
# PP_MASTER_IP=192.168.10.20
cd /opt/kopens/plantpulse-platform-docker/bin
./restart-datalake.sh # 데이터레이크만 재생성 + 준비 대기 + 의존 앱 판정
127.0.0.1 ist, verweigert das Rendering (Exit 8)Wenn die Adresse, die der Server dem Client gibt («Verbinde dich wieder hierher» – Kafka advertised.listeners, Aster TSDB broadcast_rpc_address, Temporal broadcastAddress), eine Loopback-Adresse ist, funktioniert der Server an Ort und Stelle einwandfrei, aber alle anderen Container laufen auf sich selbst zurück. Es sieht so aus, als wären alle Portprüfungen „UP“, aber kein Client kann sich verbinden. Die Fehlermeldung nennt die zu korrigierenden Namen – das sind PP_HOST_IP · PP_MASTER_IP · PP_KAFKA_ADVERTISED_HOST in der Knotendatei.
3. Gemeinsame, nicht geheime Werte aller Knoten – Sidecar
Das Sidecar /etc/kopens/plantpulse-platform.env ist nicht nur für Geheimnisse gedacht. Nicht geheime, gemeinsame Werte können Sie auch in einer Zeile VAR=값 eintragen; bin/env.sh liest sie und übergibt sie an Compose. Welche Variablen verfügbar sind, steht vollständig mit Kommentaren in compose/platform.env.example – wählen Sie dort die Zeilen aus und übertragen Sie sie.
Häufig verwendete:
| Variable | Standardwert | Bedeutung |
|---|---|---|
PP_LANG | en | Bei koreanischem Betrieb ko |
PP_TZ | Asia/Seoul | Zeitreihen werden in dieser Zeitzonen-Epoche gespeichert, daher für den koreanischen Betrieb beibehalten |
PP_BACKUP_SCHEDULE_ENABLED | true | Bei false protokollieren die fünf Backup-Timer nur noch „skipped“ und enden |
PP_DATALAKE_ADMIN_LOGS_ENABLED | true | Bei false wird nur der Protokollbildschirm (Endpunkt) der Konsole heruntergefahren |
PP_KEYSPACE · PP_DB_NAME · PP_TOPIC_PREFIX | pp | Vom Datensee „erstellte“ und von der App „gelesene“ Bezeichner. Nach der Installation nicht mehr ändern |
sudo vi /etc/kopens/plantpulse-platform.env
# PP_LANG=ko
cd /opt/kopens/plantpulse-platform-docker/bin
./restart.sh # 언어 · 타임존은 앱에도 닿으므로 전체 재시작
# generated: und # last rotation: werden vom Tool verwaltet. Die übrigen Zeilen können VAR=값 sein. Auch alte export VAR=값-Zeilen werden gelesen, aber beim nächsten Update wieder im neuen Format geschrieben.
4. Container-Speicher
Das Speicherlimit des Datensee-Containers ist DOCKER_DATALAKE_MEMORY. Standard ist 96G, und das ist das Minimum — 64G ist keine unterstützte Größe. Es wird auf 90% des Host-RAMs gekappt; ein Host mit weniger als 107G kann daher keine 96G vergeben und liegt unter der Spezifikation (Systemanforderungen). Zum Erhöhen tragen Sie den Wert in die Knotendatei ein.
sudo vi /etc/kopens/platform.node.env
# DOCKER_DATALAKE_MEMORY=128g
cd /opt/kopens/plantpulse-platform-docker/bin
./restart-datalake.sh
PID 1 im Container ist systemd. Daher wird nur der Java-Prozess per cgroup OOM-killed, während docker ps weiterhin Up anzeigt. Die Kill-Protokolle stehen nur unter dmesg des Hosts. Am 2026-09-04 ist das tatsächlich bei einem Limit von 64g passiert (gemessener Peak 63.9G); der Standardwert wurde daraufhin auf 80G erhöht. Am 2026-10-04 wurde er erneut auf 96G erhöht. Am 2026-10-29 erreichte der Container das 96G-Limit, und Kafka fiel mit einem Speicherzuweisungsfehler (ENOMEM) aus — senken Sie den Wert nicht unter 96G.
dmesg -T | grep -i "memory cgroup"
docker inspect plantpulse-datalake --format '{{.State.OOMKilled}}'
5. «Zeilen» der Engine-Konfiguration – Vorlagen
Wenn Sie Parameter zu postgresql.conf hinzufügen oder die Aufbewahrungsdauer von Kafka ändern – also Zeilen statt Werte ändern –, bearbeiten Sie die Vorlagen auf dem Host. Welche Vorlage zu welcher Datei wird, finden Sie in der Vorlagenliste.
# 1. 호스트에서 템플릿 편집
sudo vi /etc/kopens/conf/postgresql.conf.template
# 2-a. 데이터레이크 전체 재시작 — 기동 때 자동 렌더
cd /opt/kopens/plantpulse-platform-docker/bin
./restart-datalake.sh
# 2-b. 또는 서비스 하나만 — 컨테이너 안에서
docker exec plantpulse-datalake pd config diff # 무엇이 바뀔지 먼저 본다
docker exec plantpulse-datalake pd config render # 생성물을 실제로 쓴다
docker exec plantpulse-datalake pd restart storage # 그 서비스만 재기동
# 3. 확인
docker exec plantpulse-datalake pd config diff # 0 = 런타임이 렌더 결과와 같다
Nur pd config render einzugeben und nicht neu zu starten, ist keine „Übernahme“. Es wurde nur die Datei geändert. Erst pd restart <서비스> gehört zum vollständigen Ablauf.
Wenn das Image neue Standardwerte mitbringt – 3-Wege-Seeding
/etc/kopens/conf ist eine Host-Datei und wird nicht automatisch geändert, selbst wenn das Image neue Standardwerte mitbringt. Deshalb vergleicht das Start-Tool bei jeder Bereitstellung die Dateien auf Dateiebene: die Standardwerte dieses Images, die Standardwerte der letzten Bereitstellung (/etc/kopens/conf.dist) und die Host-Datei.
| Fall | Was das Tool tut |
|---|---|
| Vom Betreiber nicht geänderte Datei, Standardwerte geändert | Durch neue Standardwerte ersetzen |
| Vom Betreiber geänderte Datei, Standardwerte geändert | Betreiberdatei beibehalten + [WARN] operator edit kept, but THE IMAGE DEFAULT CHANGED + Diff der Standardwertänderungen ausgeben |
| Vom Betreiber geänderte Datei, Standardwerte unverändert | Beibehalten (still) |
| Neues Vorlagen-Image | Installieren |
| Image entfernt Vorlage | Host-Datei behalten und warnen |
Wenn Sie in der Ausgabe von restart.sh · update.sh die Zeile [WARN] operator edit kept sehen, müssen Sie Ihre Bearbeitung und die neuen Standardwerte manuell zusammenführen. Die Position der neuen Standardwertdatei wird in derselben Zeile angegeben.
Wo Ihre Vorlage von den Image-Standardwerten abweicht, sehen Sie im Container.
docker exec plantpulse-datalake pd config diff --templates
# same — 같다
# differs — 호스트 사본이 다르다 (렌더는 이쪽을 쓴다)
# local — 운영자가 추가한 파일
# missing — 이미지엔 있는데 호스트엔 없다
Um das Host-Verzeichnis vollständig auf die Image-Standardwerte zurückzusetzen (das Tool legt ein Backup unter /etc/kopens/conf.backup/<시각>/ an):
cd /opt/kopens/plantpulse-platform-docker/bin
TEMPLATE_FORCE_SEED=1 ./restart-datalake.sh
6. Backup-Zeitplan
Keine Datei wird geändert. Im Container schreiben pd backup schedule set in die Tabelle backup_schedule der datalake-Datenbank einen Quartz-Cron. Der Scheduler in plantpulse-datalake-admin-api liest und führt diese Tabelle aus. Der «Schedule editor» auf dem Backup-Bildschirm der Verwaltungskonsole ruft denselben Befehl auf.
docker exec plantpulse-datalake pd backup schedule # 지금 일정
docker exec plantpulse-datalake pd backup schedule set --job postgres-diff --calendar "*-*-* 02:45:00"
docker exec plantpulse-datalake pd backup schedule set --job purge --enabled false
docker exec plantpulse-datalake pd backup schedule reset --job postgres-diff # 기본값으로
Es gibt fünf Jobnamen – postgres-diff · postgres-full · cassandra-diff · cassandra-full · purge. Die Kalender folgen der systemd-Syntax (*-*-* 02:45:00 täglich, Sun *-*-* 01:00:00 Sonntag). Fehlerhafte Ausdrücke werden abgelehnt, ohne etwas zu schreiben. Die Auswahl bleibt in /data1/pp-data/backup/schedule.json erhalten und übersteht auch das Neuerstellen des Containers → Backup · Wiederherstellung
7. Öffentliche Ports
Die auf dem Host geöffneten Ports bestimmt der Dienst ports: in plantpulse-datalake von compose/docker-compose.yml. Achten Sie beim Ändern auf zwei Dinge.
- Den Port, auf dem der Container lauscht, legen
defaults.env(PP_*_PORT) und die Vorlage fest. Nur den veröffentlichten Port zu ändern führt zu Diskrepanzen wie „Container bindet auf 6379, Compose veröffentlicht 6399“. Beides muss zusammenpassen. 1883/1884(MQTT) werden nicht vom Datensee, sondern vom Proxy-Container veröffentlicht. Wenn Sie dem Datensee denselben Port hinzufügen, schlägt der Start wegen eines Bind-Konflikts fehl.
Die vollständige Portliste und die Firewall finden Sie unter Ports und Dienste verwalten.
Wenn die Übernahme nicht funktioniert – der Reihe nach prüfen
| Prüfung | Inhalt |
|---|---|
| ① Welche Datei gewinnt? | Die Spalte # source: in bin/env.sh --print. Knotendatei > Sidecar > Shell > Standardwerte |
| ② Ist es ein Name, der den Container erreicht? | Namen, die Compose nicht schreibt, kommen nicht an → Variablen-Referenz |
| ③ Wurde der Container neu erstellt? | Werte aus Sidecar und Knotendatei werden nur bei der Container-Neuerstellung übernommen. docker restart reicht nicht – verwenden Sie restart-datalake.sh |
| ④ Wurde gerendert? | Ist pd config diff gleich 0? Wenn 1, dann pd config render und neu starten |
| ⑤ Ist es ein Passwort? | Durch Dateibearbeitung nicht änderbar → passwd.sh |
| ⑥ Ist die Vorlage veraltet? | pd config diff --templates mit differs · missing → siehe oben 3-Wege-Seeding |
Was Sie nicht tun sollten
- Bearbeiten Sie nicht
PP_HOME/…/conf/*im Container. Beim nächsten Start verschwindet es, und bis dahin weiß niemand, welche Version die echte ist. - Versuchen Sie nicht, Wertänderungen mit
docker restart plantpulse-datalakeumzusetzen. Umgebungsvariablen werden beim Neuerstellen des Containers festgelegt.restart-datalake.sherledigt das. - Verwenden Sie
FORCE=1 pd startnicht. Es startet einen weiteren Prozess auf demselben Port über den laufenden. - Ändern Sie
PP_KEYSPACE·PP_DB_NAME·PP_TOPIC_PREFIXnicht nach der Installation. Es entsteht ein neuer, leerer Speicher mit neuem Namen, und die alten Daten bleiben unter dem alten Namen zurück.