跳到主要内容

端口配置信息

PlantPulse 以 Docker Compose 堆栈的方式运行,每个容器都有自己的端口。单服务器和集群都遵循相同的端口设计。

「防火墙已打开」与「主机上实际打开」不同

绑定到主机的端口由 compose/docker-compose.ymlports: 决定。 install.sh 打开的防火墙规则列表范围更广。防火墙中存在的端口并不意味着该端口有响应。

本页的第一个表格是主机上实际打开的所有端口。其他端口仅在容器内部通信。

哪个容器开放什么

容器主机上开放的端口
plantpulse-proxy80 · 443 · 1883 · 1884 — 用户和设备的唯一入口
plantpulse-plugin-opcua-server11004 · 11005
plantpulse-ha10210
plantpulse-datalake所有基础设施类(下表)
plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse · plantpulse-plugin-aasx-server — 仅在代理后运行
plantpulse-certs无(一次性任务)

端口拓扑

推荐外部暴露(用户 / 外部系统)

端口容器协议用途推荐
80proxyHTTP运营控制台 / REST API推荐使用反向代理
443proxyHTTPS运营控制台 / REST API (TLS)
7443datalakeHTTPS管理控制台
4950datalakeHTTPS监控 UI + /api/health监控系统
1883proxyTCPMQTT 明文 — Edge 设备 / 传感器采集推荐专网
1884proxyTCP+TLSMQTT over TLS(代理透传,broker 端到端)推荐 TLS
11004 / 11005opcua-serverOPC-UA外部设备连接端点推荐 TLS
10210haHTTPHA 守护进程 /api/health · /api/cluster — 2 节点集群中对端连接仅限对端 IP
9094datalakeTCP+TLSKafka 外部客户端TLS 必需
5500 / 5501datalakeHTTP / HTTPS外部系统数据查询API Key

运营建议:仅向外部暴露 80/443,其他端口保留在专网内。

Web 控制台实时推送无需额外端口

实时推送通过代理 (443) 进行。不会在主机上打开单独的 WebSocket 端口。

消息传递

端口容器协议用途
1883 / 1884proxyTCP / TLSMQTT (HiveMQ)。代理发布
18883 / 18884datalakeTCP / TLS预留。当前没有监听器开放此端口
9092datalakeTCPKafka PLAINTEXT(仅专网)
9093datalakeTCPKafka KRaft 控制器
9094datalakeTCP+TLSKafka SASL_SSL
Kafka 不经过代理

Kafka 客户端在引导后会重新连接advertised.listeners 公告的地址。如果前面放代理,需要同时修改这个地址,否则会在引导成功后无声地失败。因此 Kafka 端口由数据湖直接发布。

STOMP (ActiveMQ) 已停用

浏览器实时推送改为 SSE 后,STOMP broker 已从数据湖镜像中移除。61000 / 61004 不再服务。 如果旧防火墙规则中仍有这些端口,请清理。

存储(仅专网)

端口协议用途
9042CQLCassandra
7000 / 7001TCPCassandra Gossip / SSL
5432TCPPostgreSQL
6379TCPValkey (Redis 兼容)
6380TCP+TLSValkey TLS 监听器
9000HTTPMinIO API
9001HTTPMinIO 控制台

分析 / SQL(仅专网)

端口协议用途
7077TCPSpark Master RPC
4440HTTPSpark Master UI — 不是 8080
8081HTTPSpark Worker UI
10000ThriftKyuubi SQL Gateway
10099HTTPKyuubi REST API
19001HTTPGravitino 统一目录
9083ThriftHive Metastore
3500 / 3600HTTPLab 分析环境
4000 / 4001HTTP / HTTPSSQL 查询服务

处理 / 时序(仅专网)

端口协议用途
7400 / 7401HTTP / HTTPSCEP (Esper)
7800 / 7801HTTP / HTTPS时序引擎 (TSE)
3000HTTPGrafana 仪表板
5500 / 5501HTTP / HTTPS数据网关

工作流(仅专网)

端口协议用途
7233gRPCTemporal Frontend
8233HTTPTemporal Web UI
8380HTTPKestra (UI + API)
8381HTTPKestra 管理端口

其他数据湖端口

端口用途
7003诊断控制台(仅专网)
60000 / 60001OPC Agent 数据采集(仅专网)
6199 / 6299 / 6399 / 6499 / 7099JMX agent — 仅允许管制节点 IP
9500 · 9501 · 9600 不再在主机上打开

9500 / 9501 是 plantpulse-batch-web 的 Tomcat,9600 是 plantpulse-warehouse 的 Web 服务器 — 应用层。当批处理和仓库与数据湖在同一容器时的定义在数据湖一侧残留,但已清理。

两个应用都在各自的容器中运行,不在主机上打开端口,因此状态由 bin/status.shbin/logs.sh <컨테이너> 查看。如果旧监控配置中仍有这三个端口,请移除。

容器内部专用(主机不暴露)

以下端口仅在容器内通信。从主机用 curl 查询不会有响应。

端口目标替代确认方法
8090 · 4800 / 4801AAS(BaSyx) V3 API · V2 Registry/AAS如需外部访问,另行评估反向代理
7199 · 7279Cassandra · HiveMQ JMXbin/shell.sh 进入数据湖后确认
服务器、批处理、仓库的应用端口各应用容器内部bin/status.sh / bin/logs.sh <컨테이너>
4949 是明文传输

控制台和健康 API 在两个端口都服务 — 4950 (HTTPS) 和 4949 (明文 HTTP)。相同的控制台、相同的 API,仅协议不同。4949 不再重定向到 4950。

4949 是明文传输 — 登录密码和会话 Cookie 以明文流动。在不可信网络中使用 4950。4949 是为那些自签名证书警告实际上会阻止运营人员的环境而保留的选项。

# 호스트 / 외부에서
curl -kfsS https://<server-ip>:4950/api/health | jq

# 컨테이너 안에서 (어떤 구성에서도 동작합니다)
docker exec plantpulse-datalake curl -kfsS https://127.0.0.1:4950/api/health | jq

安装前检查端口冲突

# 핵심 포트 점유 확인
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'

无输出表示无冲突。如有输出:

# 점유 프로세스 확인
sudo lsof -i :<port>
sudo ss -tlnp | grep ":<port>"

常见冲突端口:80 (Apache/Nginx)、5432 (外部 PostgreSQL)、3000 (Grafana/Node.js)、9092 (外部 Kafka)、6379 (外部 Redis)。如果正在使用外部服务,改变该服务的端口通常更简单。

bin/preflight.sh 在安装前非破坏性地检查主要端口 (80 · 443 · 7443 · 4949 · 4950)。

防火墙配置示例

install.sh自动配置主机防火墙 (firewalld / ufw)。以下是需要在上层防火墙(公司网络、云安全组、路由器)手动允许时的示例。

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

自动配置确认

# RHEL/Rocky/Oracle
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-rich-rules

# Ubuntu
sudo ufw status numbered

云安全组(如 AWS / GCP / Azure)

除主机防火墙外,云安全组也需相同配置。

入站规则端口
运营控制台0.0.0.0/0(或公司 IP)80, 443, 7443
健康检查监控节点4950
MQTT设备1883, 1884
OPC-UA设备11004, 11005
Kafka TLS外部客户端9094
专网VPC CIDR1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, …

相关文档