Portkonfigurationsinformationen
PlantPulse wird als Docker Compose Stack ausgeführt, wobei jeder Container seinen eigenen Port hat. Sowohl Single-Server- als auch Cluster-Setups folgen dem gleichen Portdesign.
Die auf dem Host gebundenen Ports werden durch compose/docker-compose.yml in ports: definiert. Die Liste der Ports, die install.sh öffnet, ist breiter. Nur weil ein Port in der Firewall vorhanden ist, bedeutet das nicht, dass er reagiert.
Die erste Tabelle auf dieser Seite zeigt alle Ports, die tatsächlich auf dem Host offen sind. Alle anderen Ports funktionieren nur innerhalb von Containern.
Welcher Container öffnet welche Ports
| Container | Auf dem Host offene Ports |
|---|---|
plantpulse-proxy | 80 · 443 · 1883 · 1884 — die einzige Schnittstelle für Benutzer und Anlagen |
plantpulse-plugin-opcua-server | 11004 · 11005 |
plantpulse-ha | 10210 |
plantpulse-datalake | Alle Infrastruktur-Ports (siehe Tabelle unten) |
plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse · plantpulse-plugin-aasx-server | Keine — wird nur hinter dem Proxy ausgeführt |
plantpulse-certs | Keine (einmalige Ausführung) |
Port-Topologie
Nach außen empfohlene Ports (Benutzer / externe Systeme)
| Port | Container | Protokoll | Zweck | Empfehlung |
|---|---|---|---|---|
| 80 | proxy | HTTP | Betriebskonsole / REST API | Reverse Proxy empfohlen |
| 443 | proxy | HTTPS | Betriebskonsole / REST API (TLS) | ✓ |
| 7443 | datalake | HTTPS | Admin-Konsole | ✓ |
| 4950 | datalake | HTTPS | Monitor-UI + /api/health | Monitoring-System |
| 1883 | proxy | TCP | MQTT Klartext — Erfassung von Edge-Geräten / Sensoren | Privates Netzwerk empfohlen |
| 1884 | proxy | TCP+TLS | MQTT over TLS (Proxy ist Passthrough, Broker terminiert) | TLS empfohlen |
| 11004 / 11005 | opcua-server | OPC-UA | Endpunkt für externe Anlagen | TLS empfohlen |
| 10210 | ha | HTTP | HA-Daemon /api/health · /api/cluster — in 2-Cluster-Konfiguration verbinden sich Peers | Nur Peer-IP |
| 9094 | datalake | TCP+TLS | Kafka externe Clients | TLS erforderlich |
| 5500 / 5501 | datalake | HTTP / HTTPS | Externe Systeme zur Datenabfrage | API-Schlüssel |
Betriebsempfehlung: Es wird empfohlen, nur 80/443 nach außen freizugeben und die übrigen Ports nur im privaten Netzwerk zu halten.
Echtzeit-Push läuft über den Proxy (443). Es wird kein separater WebSocket-Port auf dem Host geöffnet.
Messaging
| Port | Container | Protokoll | Zweck |
|---|---|---|---|
| 1883 / 1884 | proxy | TCP / TLS | MQTT (HiveMQ). Der Proxy veröffentlicht |
| 18883 / 18884 | datalake | TCP / TLS | Reserviert. Es gibt derzeit keinen Listener auf diesen Ports |
| 9092 | datalake | TCP | Kafka PLAINTEXT (nur privates Netzwerk) |
| 9093 | datalake | TCP | Kafka KRaft Controller |
| 9094 | datalake | TCP+TLS | Kafka SASL_SSL |
Kafka-Clients verbinden sich nach dem Bootstrap erneut mit den Adressen, die advertised.listeners angibt. Wenn Sie einen Proxy davor setzen, müssen Sie diese Adressen ebenfalls ändern. Wenn das falsch ist, wird der Bootstrap zwar erfolgreich sein, aber dann stillschweigend fehlschlagen. Deshalb veröffentlicht Kafka direkt vom Datalake.
Mit der Umstellung des Browser-Push von STOMP auf SSE wurde der STOMP-Broker aus dem Datalake-Image entfernt. Die Ports 61000 / 61004 werden nicht mehr bedient. Falls diese noch in alten Firewall-Regeln vorhanden sind, entfernen Sie sie bitte.
Speicher (nur privates Netzwerk)
| Port | Protokoll | Zweck |
|---|---|---|
| 9042 | CQL | Cassandra |
| 7000 / 7001 | TCP | Cassandra Gossip / SSL |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Valkey (Redis-kompatibel) |
| 6380 | TCP+TLS | Valkey TLS Listener |
| 9000 | HTTP | MinIO API |
| 9001 | HTTP | MinIO Console |
Analytics / SQL (nur privates Netzwerk)
| 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 Analytics-Umgebung |
| 4000 / 4001 | HTTP / HTTPS | SQL Query Service |
Verarbeitung / Zeitreihen (nur privates Netzwerk)
| Port | Protokoll | Zweck |
|---|---|---|
| 7400 / 7401 | HTTP / HTTPS | CEP (Esper) |
| 7800 / 7801 | HTTP / HTTPS | Time Series Engine (TSE) |
| 3000 | HTTP | Grafana Dashboard |
| 5500 / 5501 | HTTP / HTTPS | Data Gateway |
Workflow (nur privates Netzwerk)
| 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 | Diagnose-Konsole (nur privates Netzwerk) |
| 60000 / 60001 | OPC Agent Datenerfassung (nur privates Netzwerk) |
| 6199 / 6299 / 6399 / 6499 / 7099 | JMX Agent — nur Management-Node-IPs zulassen |
9500 / 9501 sind Tomcat von plantpulse-batch-web, 9600 ist der Web-Server von plantpulse-warehouse — das ist die App-Tier. Die Definitionen stammten aus der Zeit, als Batch und Warehouse im gleichen Container wie Datalake liefen, wurden aber bereinigt.
Beide Applikationen werden in ihren eigenen Containern ausgeführt und geben keine Host-Ports frei. Der Status wird über bin/status.sh und bin/logs.sh <컨테이너> überprüft. Falls diese drei Ports noch in alten Monitoring-Einstellungen vorhanden sind, entfernen Sie sie.
Nur innerhalb von Containern (nicht auf Host freigegeben)
Die folgenden Ports sind nur innerhalb von Containern aktiv. Wenn Sie vom Host aus über curl danach fragen, bekommen Sie keine Antwort.
| Port | Ziel | So überprüfen Sie es stattdessen |
|---|---|---|
| 8090 · 4800 / 4801 | AAS (BaSyx) V3 API · V2 Registry/AAS | Bei Bedarf für externen Zugriff einen separaten Reverse Proxy überprüfen |
| 7199 · 7279 | Cassandra · HiveMQ JMX | Nach Eintritt in Datalake über bin/shell.sh überprüfen |
| App-Ports von Server / Batch / Warehouse | Jeder App-Container intern | bin/status.sh / bin/logs.sh <컨테이너> |
Die Konsole und Health API werden auf beiden Ports bedient — 4950 (HTTPS) und 4949 (unverschlüsseltes HTTP). Es ist die gleiche Konsole, die gleiche API, nur das Schema unterscheidet sich. 4949 wird nicht mehr auf 4950 umgeleitet.
4949 ist unverschlüsselt — Anmeldekennwörter und Sitzungs-Cookies fließen im Klartext. Verwenden Sie in nicht vertrauenswürdigen Netzwerken 4950. 4949 ist die Option für Umgebungen, in denen die Warnung vor selbstsigniertem Zertifikat den Operator tatsächlich stoppt.
# 호스트 / 외부에서
curl -kfsS https://<server-ip>:4950/api/health | jq
# 컨테이너 안에서 (어떤 구성에서도 동작합니다)
docker exec plantpulse-datalake curl -kfsS https://127.0.0.1:4950/api/health | jq
Portkonflikt-Überprüfung vor der Installation
# 핵심 포트 점유 확인
ss -tlnp | grep -E ':(80|443|1883|1884|3000|4000|4950|5432|5500|6379|7077|7233|7400|7443|7800|8233|8380|9000|9042|9092|10000|10210|11004|19001)\s'
Keine Ausgabe bedeutet kein Konflikt. Bei Ausgabe:
# 점유 프로세스 확인
sudo lsof -i :<port>
sudo ss -tlnp | grep ":<port>"
Häufig in Konflikt stehende Ports: 80 (Apache/Nginx), 5432 (externe PostgreSQL), 3000 (Grafana/Node.js), 9092 (externes Kafka), 6379 (externes Redis). Falls Sie externe Services verwenden, ist es einfacher, deren Ports zu verschieben.
bin/preflight.sh überprüft vor der Installation zerstörungsfrei die Hauptports (80 · 443 · 7443 · 4949 · 4950).
Firewall-Konfigurationsbeispiele
install.sh konfiguriert die Host-Firewall (firewalld / ufw) automatisch. Hier sind Beispiele für den Fall, dass Sie sie in einer übergeordneten Firewall (Unternehmensnetzwerk, Cloud-Sicherheitsgruppe, Router) manuell erlauben müssen.
firewalld (RHEL/Rocky/Oracle)
# 외부 노출 (모든 IP)
for port in 80 443 7443 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 7443 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
Automatische Konfiguration überprüfen
# 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 Sie auch die Cloud-Sicherheitsgruppe gleich konfigurieren.
| Inbound-Regel | Quelle | Port |
|---|---|---|
| Betriebskonsole | 0.0.0.0/0 (oder Unternehmens-IP) | 80, 443, 7443 |
| Health Check | Monitoring-Knoten | 4950 |
| MQTT | Geräte | 1883, 1884 |
| OPC-UA | Anlagen | 11004, 11005 |
| Kafka TLS | Externe Clients | 9094 |
| Privates Netzwerk | VPC CIDR | 1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, … |
Zugehörige Dokumentation
- Systemanforderungen — Hardware / OS / Tuning
- One-Line-Installation (empfohlen) — automatische Firewall-Konfiguration
- Docker-Installation — Container-Konfiguration und Port-Mapping
- Modulindex — modulspezifische Port-Details
- Administrator: Port- und Service-Verwaltung — Betriebsprüfverfahren