Zum Hauptinhalt springen

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 Firewall ist offen" ist nicht dasselbe wie „der Port ist tatsächlich auf dem Host offen"

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

ContainerAuf dem Host offene Ports
plantpulse-proxy80 · 443 · 1883 · 1884 — die einzige Schnittstelle für Benutzer und Anlagen
plantpulse-plugin-opcua-server11004 · 11005
plantpulse-ha10210
plantpulse-datalakeAlle Infrastruktur-Ports (siehe Tabelle unten)
plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse · plantpulse-plugin-aasx-serverKeine — wird nur hinter dem Proxy ausgeführt
plantpulse-certsKeine (einmalige Ausführung)

Port-Topologie

Nach außen empfohlene Ports (Benutzer / externe Systeme)

PortContainerProtokollZweckEmpfehlung
80proxyHTTPBetriebskonsole / REST APIReverse Proxy empfohlen
443proxyHTTPSBetriebskonsole / REST API (TLS)
7443datalakeHTTPSAdmin-Konsole
4950datalakeHTTPSMonitor-UI + /api/healthMonitoring-System
1883proxyTCPMQTT Klartext — Erfassung von Edge-Geräten / SensorenPrivates Netzwerk empfohlen
1884proxyTCP+TLSMQTT over TLS (Proxy ist Passthrough, Broker terminiert)TLS empfohlen
11004 / 11005opcua-serverOPC-UAEndpunkt für externe AnlagenTLS empfohlen
10210haHTTPHA-Daemon /api/health · /api/cluster — in 2-Cluster-Konfiguration verbinden sich PeersNur Peer-IP
9094datalakeTCP+TLSKafka externe ClientsTLS erforderlich
5500 / 5501datalakeHTTP / HTTPSExterne Systeme zur DatenabfrageAPI-Schlüssel

Betriebsempfehlung: Es wird empfohlen, nur 80/443 nach außen freizugeben und die übrigen Ports nur im privaten Netzwerk zu halten.

Die Web-Konsole benötigt keinen separaten Port für Echtzeit-Push

Echtzeit-Push läuft über den Proxy (443). Es wird kein separater WebSocket-Port auf dem Host geöffnet.

Messaging

PortContainerProtokollZweck
1883 / 1884proxyTCP / TLSMQTT (HiveMQ). Der Proxy veröffentlicht
18883 / 18884datalakeTCP / TLSReserviert. Es gibt derzeit keinen Listener auf diesen Ports
9092datalakeTCPKafka PLAINTEXT (nur privates Netzwerk)
9093datalakeTCPKafka KRaft Controller
9094datalakeTCP+TLSKafka SASL_SSL
Kafka läuft nicht über den Proxy

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.

STOMP (ActiveMQ) ist veraltet

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)

PortProtokollZweck
9042CQLCassandra
7000 / 7001TCPCassandra Gossip / SSL
5432TCPPostgreSQL
6379TCPValkey (Redis-kompatibel)
6380TCP+TLSValkey TLS Listener
9000HTTPMinIO API
9001HTTPMinIO Console

Analytics / SQL (nur privates Netzwerk)

PortProtokollZweck
7077TCPSpark Master RPC
4440HTTPSpark Master UI — nicht 8080
8081HTTPSpark Worker UI
10000ThriftKyuubi SQL Gateway
10099HTTPKyuubi REST API
19001HTTPGravitino Unified Catalog
9083ThriftHive Metastore
3500 / 3600HTTPLab Analytics-Umgebung
4000 / 4001HTTP / HTTPSSQL Query Service

Verarbeitung / Zeitreihen (nur privates Netzwerk)

PortProtokollZweck
7400 / 7401HTTP / HTTPSCEP (Esper)
7800 / 7801HTTP / HTTPSTime Series Engine (TSE)
3000HTTPGrafana Dashboard
5500 / 5501HTTP / HTTPSData Gateway

Workflow (nur privates Netzwerk)

PortProtokollZweck
7233gRPCTemporal Frontend
8233HTTPTemporal Web UI
8380HTTPKestra (UI + API)
8381HTTPKestra Management Port

Weitere Datalake-Ports

PortZweck
7003Diagnose-Konsole (nur privates Netzwerk)
60000 / 60001OPC Agent Datenerfassung (nur privates Netzwerk)
6199 / 6299 / 6399 / 6499 / 7099JMX Agent — nur Management-Node-IPs zulassen
9500 · 9501 · 9600 werden nicht mehr auf dem Host freigegeben

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.

PortZielSo überprüfen Sie es stattdessen
8090 · 4800 / 4801AAS (BaSyx) V3 API · V2 Registry/AASBei Bedarf für externen Zugriff einen separaten Reverse Proxy überprüfen
7199 · 7279Cassandra · HiveMQ JMXNach Eintritt in Datalake über bin/shell.sh überprüfen
App-Ports von Server / Batch / WarehouseJeder App-Container internbin/status.sh / bin/logs.sh <컨테이너>
4949 ist unverschlüsselt

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-RegelQuellePort
Betriebskonsole0.0.0.0/0 (oder Unternehmens-IP)80, 443, 7443
Health CheckMonitoring-Knoten4950
MQTTGeräte1883, 1884
OPC-UAAnlagen11004, 11005
Kafka TLSExterne Clients9094
Privates NetzwerkVPC CIDR1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, …

Zugehörige Dokumentation