Rust web service
Rust web service 表示 Rust binary 承担长期运行的服务职责:提供 HTTP API、proxy、SSE、docs/data service、admin backend 或 ops daemon,并对外暴露稳定的网络、存储和部署边界。这里的关键词不是“Rust”,而是“服务进程”。 这个 Topic 不只是“语言是 Rust”。
- 服务
目录
Definition
Rust web service 表示 Rust binary 承担长期运行的服务职责:提供 HTTP API、proxy、SSE、docs/data service、admin backend 或 ops daemon,并对外暴露稳定的网络、存储和部署边界。这里的关键词不是“Rust”,而是“服务进程”。
这个 Topic 不只是“语言是 Rust”。它要求维护者把监听端口、bind 策略、auth、upstream proxy、SQLite/配置读写、静态资产服务、事件流、容器部署和故障恢复都当作产品 contract 来维护。它与 embedded admin UI 常一起出现,但前者解释的是服务端 runtime,后者只解释前端资产如何随服务交付(projects/proxy-broker.md、projects/codex-vibe-monitor.md、projects/tavily-hikari.md)。
服务的观测面也属于 runtime contract:metrics exporter、健康/新鲜度状态、dashboard/alert provisioning、可选 tracing、hotpath report 和按需 CPU 诊断必须有自己的权限、网络、限额与降级语义,但不能取代业务持久化或改变服务成功条件(projects/codex-vibe-monitor.md、skills/style-playbook/references/topics/monitoring-dashboard/TOPIC.md)。
When to use
当 Cargo.toml 依赖 Axum/Tower/Tokio/SQLx/Reqwest 等服务栈,且 README 或 Dockerfile 证明它是运行中的服务时使用。纯 embedded crate 或 CLI crate 不应使用。
如果用户请求会影响 HTTP route、SSE、proxy behavior、SQLite persistence、static asset serving、Docker runtime、port binding、service auth、reverse proxy 集成或 graceful shutdown,就应使用本 Topic。若 Rust crate 只提供 embedded driver、firmware、CLI helper 或 build-time tool,应使用更具体的 embedded/CLI Topic(projects/gc9d01-rs.md)。
当服务同时带前端控制台或 docs/data API 时,也应使用本 Topic;前端 Topic 只能解释 UI surface,不能替代对 Rust 进程生命周期、监听地址、持久层和部署安全边界的记录(projects/style-playbook-skills.md)。
Habits / defaults
- Rust service + embedded React UI 需要双重 build gate;
projects/proxy-broker.md和projects/codex-vibe-monitor.md都把 web assets 打入服务。 - 服务默认 bind/port/auth 是项目记忆;
projects/proxy-broker.md保留 loopback + Forward Auth,projects/xp.md保留 Xray/gRPC/cluster。 - SQLite/SQLx 常作为低运维持久层,但 schema/migration 要单独记录。
- Dockerfile 中固定 runtime base 可以避免 glibc 或 system dependency 漂移。
- 服务默认监听地址和端口是安全边界,不是 UI 细节。loopback、reverse proxy、Forward Auth、admin token、CORS/SSE 等行为需要在项目快照中保留(
projects/proxy-broker.md)。 - 当 Rust 服务承载嵌入式前端时,release 验证要覆盖 Cargo tests、web build、asset embedding、Docker image 和版本显示;缺一项都可能导致运行时页面不可用(
projects/codex-vibe-monitor.md)。 - 默认把 runtime config、DB path、log/metrics、health endpoint 和 shutdown/restart 行为写进项目记忆;这些信息直接决定本地预览、部署迁移和故障排查方式(
projects/xp.md)。 - 把 metrics、trace、profile 和业务事实分开描述:metrics 用于有界聚合历史,trace 用于受限单请求关联,profile 用于按需 CPU 归因,业务库保存调用/任务/审计事实;观测停机只能让诊断降级,不能阻塞请求、ACK、任务或事务(
projects/codex-vibe-monitor.md)。 - 对 exporter 和诊断接口分别记录 bind、auth、network、token source、响应/查询上限和故障语义;Prometheus/Tempo 不应被当作普通公网 API,scrape/read/Viewer/OTLP 身份也不应复用(
projects/codex-vibe-monitor.md)。 - 服务验证不能只跑 Cargo tests 或只探活 HTTP route;带观测面的服务还要验证 target freshness、样本质量、Histogram 查询类型、dashboard provisioning 和外部 backend 故障隔离,具体工具由项目合同决定(
projects/codex-vibe-monitor.md)。 - 先判断服务的主职责是 control plane、proxy、dashboard backend、daemon 还是 data service。
projects/proxy-broker.md的风险在 bind/auth,projects/tavily-hikari.md的风险在 upstream anonymization 和 key pool,projects/xp.md的风险在 cluster state 与 reconcile;它们不能共用一段空泛的“Rust 服务默认值”。 - 对代理类服务,upstream 约束本身就是主题边界。只写“有 reqwest/axum”不够,必须记录请求能否转发、哪些 header 必须剥离、哪些历史路径只读兼容、哪些上游行为不能重新引入(
projects/tavily-hikari.md、projects/codex-vibe-monitor.md)。 - 对带 UI 的 Rust 服务,前端只是暴露面,不是服务定义本身。回答此 Topic 时默认先讲 bind/auth/data/runtime,再讲 React/shadcn/Storybook;否则容易把核心风险讲反。
Reference implementations
projects/proxy-broker.md:代理池/session listener/operator console。projects/codex-vibe-monitor.md:代理服务、SQLite、嵌入式 UI 与 Prometheus/Grafana/可选 Tempo 观测面的组合,适合检查“服务 runtime”与“观测 runtime”是否仍然分层。projects/octo-rill.md:GitHub feed ingestion + SQLite + React workspace。projects/xp.md:OpenRaft desired-state + Xray reconcile。projects/style-playbook-skills.md:本地知识库站点与生成任务 DB。projects/tavily-hikari.md:MCP proxy/key pool/audit log 形态,适合检查代理服务与 SQLite 持久层的边界。
这些样本覆盖了代理、控制台、分布式协调、知识库数据服务与审计服务等不同职责。维护时应先按实际服务责任选择参考实现,再把端口、认证、持久层和嵌入式前端的验证范围组合起来,不能把任一项目的默认值机械复制到另一种运行形态。
Failure modes
- 把 Rust service 当 CLI,会漏掉端口、auth、SSE、static assets 和 DB path。
- 只跑 Cargo tests 不跑 web build,会破坏 embedded UI。
- 默认 bind 从 loopback 改成 public 是安全风险。
- 把 SQLite path、data dir 或 env var 留在 README 之外,会让部署迁移时丢状态;项目快照应把 DB、volume 和 runtime env 写进 Evidence-backed sections(
projects/tavily-hikari.md)。 - 只验证 Docker build 不访问服务端点,会漏掉 route、static asset、SSE 和 auth 行为;对 owner-facing 预览必须用当前端口租约和浏览器验证链路(
projects/style-playbook-skills.md)。 - 把服务抽象成“后端 API”也很容易漏事。很多仓库的真正 contract 在 proxy、reconcile、audit log、队列或 state migration 上,而不是 REST 路由列表;只审 route handler 会遗漏最贵的故障点(
projects/xp.md、projects/codex-vibe-monitor.md)。 - 把前端问题和服务问题混在一起会让修复顺序错误。正确做法通常是先确认服务 bind/auth/storage/runtime 是否成立,再决定是否继续查嵌入式 UI、Storybook 或 React 组件层。
- 把
/metrics、hotpath report 或 trace query 当作普通无鉴权 route,会把诊断数据和内部拓扑暴露出去;应采用私网抓取、固定白名单、独立 token 和明确的 degraded/unknown 状态(projects/codex-vibe-monitor.md)。 - 只验证业务 route 成功,不验证 metrics freshness、dashboard query 和观测 backend 停机,会让服务在“业务可用但不可诊断”时缺少明确状态;把运行时和观测 runtime 分别验收,再检查两者的故障隔离。
- 把 tracing、hotpath 或 profiler 的项目数字写成 Rust service 通用默认值,会掩盖部署容量和安全差异;项目快照应保留事实,Topic 只保留边界和审查问题(
skills/style-playbook/references/topics/monitoring-dashboard/TOPIC.md)。
Evidence index
projects/proxy-broker.mdprojects/octo-rill.mdprojects/xp.mdprojects/style-playbook-skills.mdprojects/codex-vibe-monitor.mdops/observability/compose.ymlsrc/observability/scripts/cvm-observe
相关内容
Codex Vibe Monitor
项目实践Codex Vibe Monitor 是面向自部署的 OpenAI 兼容代理观测工作台:它接入 /v1/* HTTP / WebSocket 流量,将调用留证、实时 SSE、历史统计、请求排障、上游账号池、forward proxy、价格目录和 SQLite 持久化收在同一套运营界面中。
Dockrev
项目实践Dockrev 是 self-hosted Docker/Compose update manager。README.md 把根文档定位为快速入口,完整部署、使用、运维、排障和 API 文档在 docs-site/,这说明它是运维工具而不是普通 CRUD 管理台。
GC9D01 Rust Driver
项目实践GC9D01 Rust Driver 是 no_std Rust LCD display controller driver,面向 GC9D01 面板并提供 embedded-graphics 支持。README.md 和 Cargo.toml 都把 crate 名确认为 gc9d01,仓库 slug gc9d01-rs 只是 GitHub 命名。
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 + 文档站,而不是一次性脚本。
pod-upgrade-trigger
项目实践Small Rust HTTP service that validates GitHub package events, enforces rate limits, refreshes Podman images, and restarts systemd units; ships a Web UI (embedded bundle) and CLI subcommands for ops tasks.
pod-upgrade-trigger-bak
项目实践Backup/variant of pod-upgrade-trigger with the same overall shape: Rust HTTP service + embedded web UI + ops-focused CLI and state directory. Evidence: Cargo.toml, README.md, web/.
Proxy Broker
项目实践Proxy Broker 是 standalone Rust service,用于加载 mihomo subscriptions,按 IP 构建带 probe/geo metadata 的代理池,按选择的 IP 开关本地 proxy listener sessions,并从同一 binary 提供 Bun-built operator web console。README.
Style Playbook Skills
项目实践Style Playbook Skills 是 Ivan style playbook 的 source-of-truth 仓库:它保存人工维护的 project snapshots、Topic packages、六个 global group Skills,以及用于浏览、筛选和触发生成任务的本地 library site。
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 说明这个项目同时服务英文/中文维护入口。
ups120-daemon
项目实践Rust daemon/service around the UPS120 device, with a plan doc and install helper; appears to include DB migration tooling. Evidence: README.md, Cargo.toml, PLAN.md, alembic/.
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。