跳到主要内容

端口配置信息

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

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

绑定到主机的端口由 compose/docker-compose.yml 的 ports: 决定。 install.sh 开放的防火墙列表范围更广。即便在防火墙中开放,并不意味着该端口一定会有响应。

本页面的第一个表格列出了 所有实际在主机上开放的端口。除此之外的端口仅在容器内部通信。

容器端口开放情况​

容器主机开放端口
plantpulse-proxy80 · 443 · 1883 · 1884 — 用户与设备连接的唯一入口
plantpulse-plugin-opcua11004 · 11005
plantpulse-ha10210
plantpulse-datalake所有基础设施类 (详见下表)
plantpulse-batch-web9500 · 9501 (PP_BATCH_HTTP_PORT · PP_BATCH_TLS_PORT)
plantpulse-warehouse-web9600 · 9601 (PP_WAREHOUSE_HTTP_PORT · PP_WAREHOUSE_TLS_PORT)
plantpulse-server-web · plantpulse-plugin-aasx无 — 仅在代理后运行
plantpulse-certs无 (不开放端口)

端口拓扑​

外部暴露建议 (用户 / 外部系统)​

端口容器协议用途建议
80proxyHTTP运行控制台 / REST API建议使用反向代理
443proxyHTTPS运行控制台 / REST API (TLS)✓
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 暴露给外部,其余端口仅在私有网络中使用。

9500 · 9501 · 9600 · 9601 虽然在主机 «开放», 但请勿暴露至外部

批处理和仓库容器将这四个端口绑定到主机 (见上方第一个表格)。这是为了让操作员能直接访问该容器,而非为了向外部开放。 请在顶层防火墙中将其拦截,仅在主机内部进行确认。

curl -fsS http://127.0.0.1:9500/api/health | jq # 배치
curl -fsS http://127.0.0.1:9600/api/health | jq # 웨어하우스

如需更改端口,请修改 .env 中的 PP_BATCH_HTTP_PORT · PP_BATCH_TLS_PORT · PP_WAREHOUSE_HTTP_PORT · PP_WAREHOUSE_TLS_PORT。

Web 控制台实时推送无需独立端口

实时推送通过代理 (443) 发出,不会在主机上开放单独的 WebSocket 端口。

消息传递​

端口容器协议用途
1883 / 1884proxyTCP / TLSMQTT (HiveMQ). 由 代理发布 (publish)
18883 / 18884datalakeTCP / TLS预留。目前没有监听这些端口的程序
9092datalakeTCPKafka PLAINTEXT (仅私有网络)
9093datalakeTCPKafka KRaft 控制器
9094datalakeTCP+TLSKafka SASL_SSL
Kafka 不经过代理

Kafka 客户端在引导 (Bootstrap) 后,将根据 advertised.listeners 告知的地址 重新连接。如果在前方放置代理,必须同步更改该地址,否则在引导成功后会静默失败。因此 Kafka 端口由数据湖直接发布。

STOMP (ActiveMQ) 已弃用

随着浏览器实时推送更改为 SSE,STOMP Broker 已从数据湖镜像中移除。61000 / 61004 不再提供服务。 若旧防火墙规则中仍保留,请将其清理。

存储 (仅私有网络)​

端口协议用途
9042CQLAster TSDB
7000 / 7001TCPAster TSDB Gossip / SSL
5432TCPPostgreSQL
6379TCPValkey (Redis 兼容)
6380TCP+TLSValkey TLS 监听
9000HTTPRustFS API
9001HTTPRustFS Console

分析 / 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 (Aster CEP)
7800 / 7801HTTP / HTTPS时序引擎 (TSE)
3000HTTPPlantPulse Dashboard
5500 / 5501HTTP / HTTPS数据网关

工作流 (仅私有网络)​

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

其他数据湖端口​

端口用途
7003诊断控制台 (仅私有网络)
60000 / 60001OPC Agent 数据采集 (仅私有网络)
6199 / 6299 / 6399 / 6499 / 7099JMX agent — 仅允许管制节点 IP
9500 · 9501 · 9600 · 9601 是由 «应用容器» 开放 — 而非数据湖

这四个端口属于应用层 — 9500 · 9501 是 plantpulse-batch-web 的两个 Tomcat 连接器, 9600 · 9601 属于 plantpulse-warehouse-web。两者均为 HTTP 和 HTTPS 连接器, 且 9501 · 9601 并非用于重定向,而是各自拥有 SSLHostConfig 的完整连接器。

在批处理/仓库与数据湖处于同一容器的时期,相关定义留在数据湖端,当时它们占用主机端口但后端无连接导致连接被重置 (2026-09-02 发现)。该定义已清理。

并且在 2026-09-07,应用容器开始自行开放这些端口 (用户决定)。也就是说,「应用容器不发布任何端口」已不再成立。因此,从数据湖列表中移除这些端口 更为重要 — 如果两者抢占同一端口,后启动的容器将因 «仅显示端口名称» 的错误而启动失败。

容器内部专用 (不对主机公开)​

以下端口仅在容器内部通信。通过主机访问 curl 将无响应。

端口目标代替确认方法
8090 · 4800 / 4801AAS(BaSyx) V3 API · V2 Registry/AAS如需外部访问,请单独评估反向代理
7199 · 7279Aster TSDB · HiveMQ JMX通过 bin/shell.sh 进入数据湖后确认
plantpulse-server-web 的应用端口该容器内部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|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 · 4949 · 4950) 进行非破坏性巡检。

上述 ss 的单行中 缺失了 9500 · 9501 · 9600 · 9601。 由于批处理/仓库使用这些端口,若需确认这些端口是否空闲,请将其加入正则表达式。

防火墙设置示例​

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

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

自动设置确认​

# 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
健康检查监控节点4950
MQTT设备1883, 1884
OPC-UA设备11004, 11005
Kafka TLS外部客户端9094
私有网络VPC CIDR1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, …

相关文档​