Service ports
Service ports 表示端口号、bind 地址、dev/prod 暴露方式和多组件端口分工本身就是仓库的稳定 contract。它不是“服务都会有端口”这种空泛事实,而是说端口设计会直接影响本地预览、反向代理、权限边界、自动化脚本和故障排查。 这个 Topic 关注的是端口作为系统边界的那一面。
- 服务
- 运维
目录
Definition
Service ports 表示端口号、bind 地址、dev/prod 暴露方式和多组件端口分工本身就是仓库的稳定 contract。它不是“服务都会有端口”这种空泛事实,而是说端口设计会直接影响本地预览、反向代理、权限边界、自动化脚本和故障排查。
这个 Topic 关注的是端口作为系统边界的那一面。它通常会和 Rust web service、Dockerized dev、React app 一起出现,但不替代这些 Topic:相邻 Topic 解释服务或 UI 是什么,Service ports 解释它们怎样在本地、容器和反向代理环境中被暴露出来(projects/proxy-broker.md、projects/xp.md)。
When to use
当 README、project snapshot、env 文档、CLI flags、compose 配置或本地脚本明确写出默认端口、可覆盖端口、loopback/public bind、端口组分工或反向代理前提时使用。命中条件不是“监听了网络”,而是端口本身已成为维护者必须记住和审查的事实。
如果一个改动会改变默认端口、bind 地址、base path、反向代理暴露方式、dev/prod 端口分离、多组件端口矩阵或本地预览租约策略,就应该命中 Service ports。若仓库只有一个未文档化的临时监听端口、且不影响交付和运维约定,则不必提升为 Topic。
Habits / defaults
- 默认端口应显式且稳定,特别是多组件系统。高位固定端口 + 文档化覆盖入口,比“随机找空闲端口”更适合长期维护和脚本化验证(
projects/xp.md、projects/blog-26.md)。 - 端口和 bind 必须有单一 override surface,例如 env 或 CLI flags,避免 magic number 分散在前端脚本、后端代码和 compose 文件里(
projects/proxy-broker.md、projects/tavily-hikari.md)。 - 多组件系统要把 API、UI、docs、gateway、supervisor/dev tooling 拆开表达。像
projects/blog-26.md、projects/proxy-broker.md这种端口矩阵,本质上是在表达系统边界,而不是单纯开发便利。 - 默认暴露通常应偏向 internal/loopback,公开访问交给反向代理、Forward Auth 或显式 base path;端口设计本身就是安全边界,不是最后再补的部署细节(
projects/proxy-broker.md)。 - owner-facing localhost handoff 不是“把默认端口告诉别人”这么简单;Topic 回答里应默认考虑端口租约、后台会话持有和与现有本机服务冲突的处理方式。
- 端口一旦被写进 docs、scripts 或 release artifact,就要把它当 contract 管,而不是认为“以后随便改一改再说”。
Reference implementations
projects/proxy-broker.md:适合说明 loopback 默认值、多个严格本地端口和反向代理/Forward Auth 怎样共同形成安全边界。projects/xp.md:适合说明 Web、Storybook 和服务端口如何成组出现,并被文档和脚本共同依赖。projects/tavily-hikari.md:适合说明容器部署里PROXY_PORT、PROXY_BIND和 volume/data path 怎样一起构成运行 contract。projects/blog-26.md:适合说明多 runtime/gateway 项目里的端口矩阵不是附带信息,而是系统地图的一部分。
Failure modes
- 只记录端口号、不记录 bind/base path/override 入口,会让文档表面正确但运行仍然不可复现。
- 把
Service ports当成整个仓库的总括标签,忽略Rust web service、Dockerized dev、React app等相邻 Topic,会让后续 Agent 无法判断真正应该验证的是 runtime、协议、UI 还是交付链路。 - 直接把默认端口 handoff 给 owner,却不处理本机冲突、后台持有和租约,会让“能打开”变成一次性巧合,而不是稳定预览路径。
- 把 loopback 改成 public 或把多个端口偷偷并到一个入口,若不回写 Topic,通常会制造安全和运维语义漂移。
Evidence index
projects/dockrev.mdprojects/mineru-remote-mcp.mdprojects/tavily-hikari.mdprojects/xp.mdprojects/octo-rill.mdprojects/proxy-broker.mdskills/style-playbook/references/data/topics/service-ports.json
相关内容
Ivan's Blog 2026
项目实践Ivan's Blog 2026 是 Ivan 博客平台的公开开源镜像,由 Astro public site、Vite/React admin SPA 和 Bun gateway/API 组成。README.md、astro.config.mjs、apps/admin/、src/server/ 和 package.
Dockrev
项目实践Dockrev 是 self-hosted Docker/Compose update manager。README.md 把根文档定位为快速入口,完整部署、使用、运维、排障和 API 文档在 docs-site/,这说明它是运维工具而不是普通 CRUD 管理台。
MCU Agentd
项目实践MCU Agentd 是可配置 MCU 管理工具,包含每项目 daemon/CLI mcu-agentd 和用户级辅助 daemon mcu-managerd。README.md 明确它通过 mcu-agentd.toml 定义多个 MCU target,并基于 espflash 与 probe-rs 执行操作,当前 v1 只支持 ELF artifact 和固定策略。
mineru-remote-mcp
项目实践Remote (HTTP) MCP server that fronts MinerU’s document-to-Markdown pipeline, with a companion web console. Evidence: README.md, Cargo.toml, web/.
OctoRill
项目实践OctoRill 把与 Ivan 相关的 GitHub 动态整理成适合持续阅读的工作区:发布更新、获星/关注动态、日报和 Inbox,发布内容还支持中文翻译和要点整理。README.md 同时指向 public docs-site、quick start、config、product 和 internal docs,说明它是产品化 Rust 服务 + React UI + 文档站,而不是一次性脚本。
Proxy Broker
项目实践Proxy Broker 是 standalone Rust service,用于加载 mihomo subscriptions,按 IP 构建带 probe/geo metadata 的代理池,按选择的 IP 开关本地 proxy listener sessions,并从同一 binary 提供 Bun-built operator web console。README.
Tavily Hikari
项目实践Tavily Hikari 是 Rust + Axum proxy,用于 Tavily MCP endpoint:它复用多 API key、匿名化上游请求、把完整 audit logs 写入 SQLite,并附带 React + Vite web console 做实时可视化。README.md 与 README.zh-CN.md 说明这个项目同时服务英文/中文维护入口。
XP Cluster Manager
项目实践XP Cluster Manager 是 self-hosted multi-host Xray cluster manager。README.md 明确每台 host 运行 xp 和 xray 两个进程,xp 用 OpenRaft 保存 cluster-wide desired state,并通过 Xray gRPC API reconcile 本地 runtime。