Port-Konfigurationsinformationen
PlantPulse wird als Docker Compose-Stack betrieben, wobei jeder Container über eigene Ports verfügt. Sowohl Einzelserver als auch Cluster folgen demselben Port-Design.
Die am Host gebundenen Ports werden durch ports: in compose/docker-compose.yml bestimmt. Die von install.sh geöffnete Firewall-Liste ist umfangreicher. Nur weil ein Port in der Firewall steht, bedeutet dies nicht, dass über diesen Port eine Antwort erfolgt.
Die erste Tabelle dieser Seite enthält alle Ports, die tatsächlich am Host geöffnet werden. Alle anderen Ports funktionieren nur innerhalb der Container.
Welcher Container öffnet was
| Container | Am Host geöffnete Ports |
|---|---|
plantpulse-proxy | 80 · 443 · 1883 · 1884 — Einziger Zugang für Benutzer und Anlagen |
plantpulse-plugin-opcua | 11004 · 11005 |
plantpulse-ha | 10210 |
plantpulse-datalake | Alle Infrastruktur-Komponenten (untenstehende Tabelle) |
plantpulse-batch-web | 9500 · 9501 (PP_BATCH_HTTP_PORT · PP_BATCH_TLS_PORT) |
plantpulse-warehouse-web | 9600 · 9601 (PP_WAREHOUSE_HTTP_PORT · PP_WAREHOUSE_TLS_PORT) |
plantpulse-server-web · plantpulse-plugin-aasx | Keine — Betrieb nur hinter dem Proxy |
plantpulse-certs | Keine (öffnet keine Ports) |
Port-Topologie
Empfohlene externe Freigabe (Benutzer / Externe Systeme)
| Port | Container | Protokoll | Zweck | Empfehlung |
|---|---|---|---|---|
| 80 | proxy | HTTP | Bedienkonsole / REST API | Reverse Proxy empfohlen |
| 443 | proxy | HTTPS | Bedienkonsole / REST API (TLS) | ✓ |
| 4950 | datalake | HTTPS | Monitoring-UI + /api/health | Monitoring-System |
| 1883 | proxy | TCP | MQTT Klartext — Edge-Gerät / Sensor-Erfassung | Privatnetz empfohlen |
| 1884 | proxy | TCP+TLS | MQTT over TLS (Proxy als Passthrough, Broker als Endpunkt) | TLS empfohlen |
| 11004 / 11005 | opcua-server | OPC-UA | Endpunkt für externe Anlagen | TLS empfohlen |
| 10210 | ha | HTTP | HA-Daemon /api/health · /api/cluster — Peers verbinden sich in 2-Cluster-Konfigurationen | Nur Peer-IP |
| 9094 | datalake | TCP+TLS | Kafka externer Client | TLS erforderlich |
| 5500 / 5501 | datalake | HTTP / HTTPS | Datenabfrage externe Systeme | API Key |
Betriebsempfehlung: Es wird empfohlen, nur 80/443 extern freizugeben und alle anderen Ports nur im Privatnetz zu betreiben.
Die Batch- und Warehouse-Container binden diese vier Ports am Host (siehe erste Tabelle oben). Dies dient dazu, dass der Operator die Container direkt abfragen kann, und ist nicht für die externe Freigabe gedacht. Sperren Sie diese in der übergeordneten Firewall und führen Sie Prüfungen innerhalb des Hosts durch.
curl -fsS http://127.0.0.1:9500/api/health | jq # 배치
curl -fsS http://127.0.0.1:9600/api/health | jq # 웨어하우스
Um Ports zu verschieben, ändern Sie PP_BATCH_HTTP_PORT · PP_BATCH_TLS_PORT · PP_WAREHOUSE_HTTP_PORT · PP_WAREHOUSE_TLS_PORT in .env.
Der Echtzeit-Push erfolgt über den Proxy (443). Es wird kein separater WebSocket-Port am Host geöffnet.
Messaging
| Port | Container | Protokoll | Zweck |
|---|---|---|---|
| 1883 / 1884 | proxy | TCP / TLS | MQTT (HiveMQ). Wird vom Proxy publiziert |
| 18883 / 18884 | datalake | TCP / TLS | Reserviert. Derzeit gibt es keinen Listener für diese Ports |
| 9092 | datalake | TCP | Kafka PLAINTEXT (Nur Privatnetz) |
| 9093 | datalake | TCP | Kafka KRaft Controller |
| 9094 | datalake | TCP+TLS | Kafka SASL_SSL |
Kafka-Clients verbinden sich nach dem Bootstrap erneut mit der Adresse, die advertised.listeners mitgeteilt hat. Würde ein Proxy davor geschaltet, müsste auch diese Adresse geändert werden; andernfalls würde nur das Bootstrap erfolgreich sein, gefolgt von einem stillen Fehler. Daher publiziert der Datalake die Kafka-Ports direkt.
Da der Echtzeit-Push im Browser auf SSE umgestellt wurde, wurde der STOMP-Broker aus dem Datalake-Image entfernt. 61000 / 61004 werden nicht mehr bedient. Bitte entfernen Sie diese aus alten Firewall-Regeln.
Storage (Nur Privatnetz)
| Port | Protokoll | Zweck |
|---|---|---|
| 9042 | CQL | Aster TSDB |
| 7000 / 7001 | TCP | Aster TSDB Gossip / SSL |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Valkey (Redis-kompatibel) |
| 6380 | TCP+TLS | Valkey TLS Listener |
| 9000 | HTTP | RustFS API |
| 9001 | HTTP | RustFS Console |
Analyse / SQL (Nur Privatnetz)
| Port | Protokoll | Zweck |
|---|---|---|
| 7077 | TCP | Spark Master RPC |
| 4440 | HTTP | Spark Master UI — Nicht 8080 |
| 8081 | HTTP | Spark Worker UI |
| 10000 | Thrift | Kyuubi SQL Gateway |
| 10099 | HTTP | Kyuubi REST API |
| 19001 | HTTP | Gravitino Unified Catalog |
| 9083 | Thrift | Hive Metastore |
| 3500 / 3600 | HTTP | Lab-Analyseumgebung |
| 4000 / 4001 | HTTP / HTTPS | SQL-Abfrageservice |
Verarbeitung / Zeitreihe (Nur Privatnetz)
| Port | Protokoll | Zweck |
|---|---|---|
| 7400 / 7401 | HTTP / HTTPS | CEP (Aster CEP) |
| 7800 / 7801 | HTTP / HTTPS | Zeitreihen-Engine (TSE) |
| 3000 | HTTP | PlantPulse Dashboard |
| 5500 / 5501 | HTTP / HTTPS | Data Gateway |
Workflow (Nur Privatnetz)
| Port | Protokoll | Zweck |
|---|---|---|
| 7233 | gRPC | Temporal Frontend |
| 8233 | HTTP | Temporal Web UI |
| 8380 | HTTP | Kestra (UI + API) |
| 8381 | HTTP | Kestra Management-Port |
Weitere Datalake-Ports
| Port | Zweck |
|---|---|
| 7003 | Diagnosekonsole (Nur Privatnetz) |
| 60000 / 60001 | OPC Agent Erfassung (Nur Privatnetz) |
| 6199 / 6299 / 6399 / 6499 / 7099 | JMX Agent — Bitte nur IP des Überwachungsknotens zulassen |
Diese vier Ports gehören zur App-Tier — 9500 · 9501 sind die zwei Tomcat-Connectoren von plantpulse-batch-web, 9600 · 9601 gehören zu plantpulse-warehouse-web. Beides sind HTTP- und HTTPS-Connectoren, wobei 9501 · 9601 keine Umleitungen sind, sondern eigenständige Connectoren mit jeweils eigenem SSLHostConfig.
Die Definitionen aus der Zeit, als Batch und Warehouse noch im selben Container wie der Datalake waren, blieben auf der Datalake-Seite bestehen; damals wurden Host-Ports belegt, aber da dahinter nichts war, kam es zu Verbindungsresets (entdeckt am 02.09.2026). Diese Definitionen wurden bereinigt.
Und am 07.09.2026 begannen die App-Container, diese selbstständig zu öffnen (Entscheidung des Benutzers). Damit ist die Aussage «App-Container publizieren nichts» nicht mehr korrekt. Es ist daher umso wichtiger, diese Ports aus der Datalake-Liste zu entfernen — wenn zwei Container denselben Port belegen, schlägt der Start des später startenden Containers mit einem Fehler fehl, der nur den «Portnamen» nennt.
Nur für interne Container (Nicht am Host öffentlich)
Die folgenden Ports funktionieren nur innerhalb der Container. Anfragen an curl vom Host bleiben unbeantwortet.
| Port | Ziel | Alternative Prüfmethode |
|---|---|---|
| 8090 · 4800 / 4801 | AAS(BaSyx) V3 API · V2 Registry/AAS | Bei Bedarf für externen Zugriff separate Reverse Proxy Prüfung |
| 7199 · 7279 | Aster TSDB · HiveMQ JMX | Über bin/shell.sh in den Datalake eintreten und prüfen |
App-Ports von plantpulse-server-web | Interner Container | bin/status.sh / bin/logs.sh <컨테이너> |
Die Konsole und die Health-API werden auf beiden Ports bedient — 4950 (HTTPS) und 4949 (Klartext HTTP). Es handelt sich um dieselbe Konsole und API, nur das Schema unterscheidet sich. 4949 leitet nicht mehr auf 4950 um.
4949 ist Klartext — Login-Passwörter und Session-Cookies werden unverschlüsselt übertragen. In nicht vertrauenswürdigen Netzen verwenden Sie 4950. 4949 ist eine Option für Systeme, bei denen Selbstsignatur-Zertifikatswarnungen den Operator tatsächlich blockieren würden.
# 호스트 / 외부에서
curl -kfsS https://<server-ip>:4950/api/health | jq
# 컨테이너 안에서 (어떤 구성에서도 동작합니다)
docker exec plantpulse-datalake curl -kfsS https://127.0.0.1:4950/api/health | jq
Prüfung auf Port-Konflikte vor der Installation
# 핵심 포트 점유 확인
ss -tlnp | grep -E ':(80|443|1883|1884|3000|4000|4950|5432|5500|6379|7077|7233|7400|7800|8233|8380|9000|9042|9092|10000|10210|11004|19001)\s'
Keine Ausgabe bedeutet kein Konflikt. Bei einer Ausgabe:
# 점유 프로세스 확인
sudo lsof -i :<port>
sudo ss -tlnp | grep ":<port>"
Häufige Konfliktports: 80 (Apache/Nginx), 5432 (externes PostgreSQL), 3000 (Grafana/Node.js), 9092 (externes Kafka), 6379 (externes Redis). Wenn externe Dienste genutzt werden, ist es einfacher, den Port des jeweiligen Dienstes zu verschieben.
bin/preflight.sh prüft vor der Installation die Hauptports (80 · 443 · 4949 · 4950) zerstörungsfrei.
In der obigen Zeile von
ssfehlen 9500 · 9501 · 9600 · 9601. Da Batch und Warehouse diese Ports nutzen, fügen Sie diese in den regulären Ausdruck ein, um zu prüfen, ob auch diese frei sind.
Beispiel für Firewall-Einstellungen
install.sh konfiguriert die Host-Firewall (firewalld / ufw) automatisch. Die folgenden Beispiele gelten für die manuelle Freigabe in der übergeordneten Firewall (Unternezwerk, Cloud-Sicherheitsgruppen, Router).
firewalld (RHEL/Rocky/Oracle)
# 외부 노출 (모든 IP)
for port in 80 443 4950; do
firewall-cmd --permanent --add-port=${port}/tcp
done
# 외부 노출 (TLS 메시징 / 설비)
for port in 1884 9094 11004 11005; do
firewall-cmd --permanent --add-port=${port}/tcp
done
# 사설망 only (RFC 1918 + Tailscale CGN 허용)
for src in 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 100.64.0.0/10; do
for port in 1883 5432 6379 7077 7233 7800 8233 8380 9000 9001 9042 9092 10000 10210 19001; do
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=${src} port port=${port} protocol=tcp accept"
done
done
firewall-cmd --reload
ufw (Ubuntu)
# 외부 노출
for port in 80 443 4950 1884 9094 11004 11005; do
ufw allow ${port}/tcp
done
# 사설망 only
for port in 1883 5432 6379 7077 7233 7800 8233 8380 9000 9042 9092 10000 10210 19001; do
for src in 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 100.64.0.0/10; do
ufw allow from $src to any port $port
done
done
ufw enable
Prüfung der automatischen Konfiguration
# RHEL/Rocky/Oracle
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-rich-rules
# Ubuntu
sudo ufw status numbered
Cloud-Sicherheitsgruppen (z. B. AWS / GCP / Azure)
Zusätzlich zur Host-Firewall müssen die Cloud-Sicherheitsgruppen identisch konfiguriert werden.
| Inbound-Regel | Quelle | Port |
|---|---|---|
| Bedienkonsole | 0.0.0.0/0 (oder Firmen-IP) | 80, 443 |
| Health-Check | Monitoring-Knoten | 4950 |
| MQTT | Geräte | 1883, 1884 |
| OPC-UA | Anlagen | 11004, 11005 |
| Kafka TLS | Externer Client | 9094 |
| Privatnetz | VPC CIDR | 1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, … |
Verwandte Dokumente
- Systemanforderungen — Hardware / OS / Tuning
- Einzeilen-Installation (Empfohlen) — Automatische Firewall-Konfiguration
- Docker-Installation — Container-Konfiguration und Port-Mapping
- Modul-Index — Port-Details pro Modul
- Administrator: Port- und Serviceverwaltung — Betriebsprüfverfahren