一台笔记本上跑一百个服务,就是一百个端口。最容易毁掉一个上午的事,是两个服务抢同一个端口。tdk-erp-system 这个示例把端口按可预测的区块分配,一个域一个区块,默认端口被占用的情况交给 TDK CLI 处理。
每个域的服务从自己的号段里取端口。README 里列了这些号段,我核对过的几个都遵循清晰的规律:
- 财务后端用4010 到 4024,它的看板用3010
- 人力后端从4100起,它的门户用3020
- 库存后端从4200起。
- 销售后端从4300起。
- 分析后端从4600起,它的控制台用3070
前端统一用 3000 号段,后端统一用 4000 号段。一个服务的端口写在它的 service.json 里,读这个文件就能看出它落在哪个位置。
区块化分配的好处很直接。服务出故障时,端口号就能告诉你它属于哪个域。新增服务时,该域区块里下一个空闲编号一目了然。一个端口混杂的看板,读起来比每个域各有号段的看板费劲得多。
默认端口被占用时,TDK 会检查它共享基础设施的默认端口,比如代理和 Postgres。如果某个端口已被占用,它就从备用号段里挑一个空闲端口,并把选择打印出来。举个例子,一次测试运行中 Postgres 的默认端口被占用,TDK 从15432 到 15532的备用号段里选了15432。
打印出来的选择值得留意。每次启动都要读它,因为一个期待默认端口的服务,可能需要改用这个新值。
要固定端口,在启动前设置对应的环境变量:
TDK_POSTGRES_PORT=5432 tdk up
其他覆盖项遵循同样的模式,包括代理用的 TDK_HTTP_PORT 和 TDK_HTTPS_PORT。当 TDK 之外的工具需要一个固定地址时,就设置它们。
检查端口也不麻烦。README 在每个服务的端口上链接了它的健康检查路由,用浏览器或 curl 就能查。想要机器可读的答案,用:
tdk status --json
它会报告就绪状态和 URL,这样你就不用记哪个端口属于哪个服务。
回到开头那个问题:端口按域分组,数字本身就说明了服务归属;默认端口被占用时 TDK 会换到空闲端口并打印选择;只有当 TDK 之外的东西需要固定地址时才去固定端口,地址核对交给 tdk status --json。
热门跟贴