端口配置信息
PlantPulse 以 Docker Compose 堆栈 形式运行,每个容器拥有自己的端口。单机服务器与集群均遵循相同的端口设计。
绑定到主机的端口由 compose/docker-compose.yml 的 ports: 决定。 install.sh 开放的防火墙列表范围更广。即便在防火墙中开放,并不意味着该端口一定会有响应。
本页面的第一个表格列出了 所有实际在主机上开放的端口。除此之外的端口仅在容器内部通信。
容器端口开放情况
| 容器 | 主机开放端口 |
|---|---|
plantpulse-proxy | 80 · 443 · 1883 · 1884 — 用户与设备连接的唯一入口 |
plantpulse-plugin-opcua | 11004 · 11005 |
plantpulse-ha | 10210 |
plantpulse-datalake | 所有基础设施类 (详见下表) |
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 | 无 — 仅在代理后运行 |
plantpulse-certs | 无 (不开放端口) |
端口拓扑
外部暴露建议 (用户 / 外部系统)
| 端口 | 容器 | 协议 | 用途 | 建议 |
|---|---|---|---|---|
| 80 | proxy | HTTP | 运行控制台 / REST API | 建议使用反向代理 |
| 443 | proxy | HTTPS | 运行控制台 / REST API (TLS) | ✓ |
| 4950 | datalake | HTTPS | 监控 UI + /api/health | 监控系统 |
| 1883 | proxy | TCP | MQTT 明文 — Edge 设备 / 传感器采集 | 建议使用私有网络 |
| 1884 | proxy | TCP+TLS | MQTT over TLS (代理透传,Broker 终结) | 建议使用 TLS |
| 11004 / 11005 | opcua-server | OPC-UA | 外部设备连接端点 | 建议使用 TLS |
| 10210 | ha | HTTP | HA 守护进程 /api/health · /api/cluster — 2-集群配置中的对端连接 | 仅限对端 IP |
| 9094 | datalake | TCP+TLS | Kafka 外部客户端 | 必须使用 TLS |
| 5500 / 5501 | datalake | HTTP / HTTPS | 外部系统数据查询 | API Key |
运行建议: 建议仅将 80/443 暴露给外部,其余端口仅在私有网络中使用。
批处理和仓库容器将这四个端口绑定到主机 (见上方第一个表格)。这是为了让操作员能直接访问该容器,而非为了向外部开放。 请在顶层防火墙中将其拦截,仅在主机内部进行确认。
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。
实时推送通过代理 (443) 发出,不会在主机上开放单独的 WebSocket 端口。
消息传递
| 端口 | 容器 | 协议 | 用途 |
|---|---|---|---|
| 1883 / 1884 | proxy | TCP / TLS | MQTT (HiveMQ). 由 代理发布 (publish) |
| 18883 / 18884 | datalake | TCP / TLS | 预留。目前没有监听这些端口的程序 |
| 9092 | datalake | TCP | Kafka PLAINTEXT (仅私有网络) |
| 9093 | datalake | TCP | Kafka KRaft 控制器 |
| 9094 | datalake | TCP+TLS | Kafka SASL_SSL |
Kafka 客户端在引导 (Bootstrap) 后,将根据 advertised.listeners 告知的地址 重新连接。如果在前方放置代理,必须同步更改该地址,否则在引导成功后会静默失败。因此 Kafka 端口由数据湖直接发布。
随着浏览器实时推送更改为 SSE,STOMP Broker 已从数据湖镜像中移除。61000 / 61004 不再提供服务。 若旧防火墙规则中仍保留,请将其清理。
存储 (仅私有网络)
| 端口 | 协议 | 用途 |
|---|---|---|
| 9042 | CQL | Aster TSDB |
| 7000 / 7001 | TCP | Aster TSDB Gossip / SSL |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Valkey (Redis 兼容) |
| 6380 | TCP+TLS | Valkey TLS 监听 |
| 9000 | HTTP | RustFS API |
| 9001 | HTTP | RustFS Console |
分析 / SQL (仅私有网络)
| 端口 | 协议 | 用途 |
|---|---|---|
| 7077 | TCP | Spark Master RPC |
| 4440 | HTTP | Spark Master UI — 非 8080 |
| 8081 | HTTP | Spark Worker UI |
| 10000 | Thrift | Kyuubi SQL Gateway |
| 10099 | HTTP | Kyuubi REST API |
| 19001 | HTTP | Gravitino 统一目录 |
| 9083 | Thrift | Hive Metastore |
| 3500 / 3600 | HTTP | Lab 分析环境 |
| 4000 / 4001 | HTTP / HTTPS | SQL 查询服务 |
处理 / 时序 (仅私有网络)
| 端口 | 协议 | 用途 |
|---|---|---|
| 7400 / 7401 | HTTP / HTTPS | CEP (Aster CEP) |
| 7800 / 7801 | HTTP / HTTPS | 时序引擎 (TSE) |
| 3000 | HTTP | PlantPulse Dashboard |
| 5500 / 5501 | HTTP / HTTPS | 数据网关 |
工作流 (仅私有网络)
| 端口 | 协议 | 用途 |
|---|---|---|
| 7233 | gRPC | Temporal Frontend |
| 8233 | HTTP | Temporal Web UI |
| 8380 | HTTP | Kestra (UI + API) |
| 8381 | HTTP | Kestra 管理 (management) 端口 |
其他数据湖端口
| 端口 | 用途 |
|---|---|
| 7003 | 诊断控制台 (仅私有网络) |
| 60000 / 60001 | OPC Agent 数据采集 (仅私有网络) |
| 6199 / 6299 / 6399 / 6499 / 7099 | JMX agent — 仅允许管制节点 IP |
这四个端口属于应用层 — 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 / 4801 | AAS(BaSyx) V3 API · V2 Registry/AAS | 如需外部访问,请单独评估反向代理 |
| 7199 · 7279 | Aster TSDB · HiveMQ JMX | 通过 bin/shell.sh 进入数据湖后确认 |
plantpulse-server-web 的应用端口 | 该容器内部 | bin/status.sh / bin/logs.sh <컨테이너> |
控制台与健康 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 CIDR | 1883, 5432, 6379, 7077, 9042, 9092, 10000, 10210, … |
相关文档
- 系统需求 — 硬件 / OS / 调优
- 单行安装 (建议) — 自动防火墙设置
- Docker 安装 — 容器配置与端口映射
- 模块索引 — 各模块端口详情
- 管理员: 端口与服务管理 — 运行巡检步骤