Rust · Axum · sqlx · 单文件部署

修行 长在
现代基础设施里

Nirvana 是一个面向佛教修行者的社区平台后端 —— 寺庙发现、日修追踪、许愿池、上香、四圣谛、AI 经文问答, 全套 RESTful API. 用 Rust 从 Python 完整重写, 性能 ↑ 内存 ↓ 部署一根 binary 搞定.

145
业务端点
300+
单测 + L3 集成测
25
国家覆盖
~30 MB
单 binary 体积

核心功能

围绕"修行"这件事, 提供从发现到追踪到回馈的完整闭环.

🏯

寺庙寻访

25 个国家 + 1700+ 寺庙数据库. 按国家 / 关键词 / 经纬度搜索, 收藏 + 打卡 + 详情页 + 艺术品 + 活动信息.

📿

宗派与经文

9 大佛教宗派完整介绍 (禅 / 净土 / 华严 / 天台 / 三论 / 唯识 / 律宗 / 密宗 / 一般). 经文目录 + 全文阅读 + 阅读位置记录.

🌅

日修追踪

日修计划 + 完成打卡 + 修行指南 + 全年活动热力图. 修行连续度 (streak) 跨多种活动统计.

🪷

许愿池

许愿 + 续香 + 祝福 + 圆满记录. 个人 / 公开 / 寺庙归属三种 scope, 配套功德币经济系统.

💰

功德币 · 上香 · 支付

行为奖励规则引擎 (10 种事件加分) · 充值 · 抽签 / 抽卡. Stripe 集成上香订单 + Apple Pay + webhook HMAC 验签.

四圣谛框架

苦 (Suffering) / 集 (Cause) / 灭 (Cessation) / 道 (Path) 完整工具. 三毒分析 / 八正道 / 涅槃时刻 / 修行计划.

🤖

AI 经文问答

基于 LiteLLM 代理 (Claude / GPT / 国内大模型) 的经文段落级提问. 在阅读位置直接发问, 答案带原文锚定.

🔮

每日法语 / 抽签

每天免费一签, 付费可重抽. 签文从真实经文段落随机抽取, 收藏 + 历史 + 解读.

⚙️

管理后台

服务端渲染 (Askama + Tailwind) 的轻量后台. 寺庙 / 宗派 / 经典 / 退款审批 / 内容编辑 / 推送广播.

技术栈 · 工程理念

从 Python 到 Rust 的完整重写, 不为炫技, 为可维护性 + 性能 + 部署简洁度.

运行时 · Runtime

  • tokio 异步运行时
  • axum 0.7 Web 框架 (tower 生态)
  • sqlx 0.8 MySQL · 编译期 SQL 校验
  • redis 0.27 ConnectionManager 多路复用
  • tracing JSON 日志聚合友好

外部集成 · Integrations

  • • Stripe REST API + webhook HMAC 验签
  • • LiteLLM 代理 (OpenAI 兼容协议)
  • • 阿里云 OSS PUT 签名 (HMAC-SHA1)
  • • JWT HS256 token (双向兼容 nirvana-core)
  • • bcrypt admin 密码哈希

部署 · Deploy

  • cargo zigbuild 交叉编译 x86_64 + aarch64
  • build.rs 编译期烤 .env.prod 进 binary
  • • 静态链接 (rustls 不依赖 OpenSSL)
  • • 单 binary ~30 MB, 零运行时依赖
  • • Debian .deb 包 + systemd unit 自动管理

可观测 · Observability

  • • Prometheus /metrics per-route 直方图
  • • 健康探针 /health/live + /ready
  • • 单行 access log + request-id 追踪
  • • panic hook → tracing::error! 不漏
  • • Swagger UI 自动暴露 OpenAPI 3.1

测试 · Quality

  • • L1 单元测试 127+ 通过
  • • L2 sqlx 服务层测试 (24 样本 + 扩展中)
  • • L3 oneshot router 集成测 172+ 通过
  • • CI: fmt-check / clippy -D warnings / test
  • • 字节级 API 兼容验证 (跟 Python 双跑)

迁移策略 · Migration

  • • Strangler-fig 模式渐进切流
  • • 跟 Python 共享同一 MySQL + Redis
  • • 字节级 API 兼容 (App 切换无感)
  • • nginx path-based 灰度
  • • 已切 30%+ 端点, 剩余持续推进

API 即用

所有端点遵循 {code, message, data} 信封. 完整 spec 见 Swagger UI.

# 公开端点 — 拿国家列表
$ curl -sX POST https://api.nirvanaseek.com/faith/seek/country/list \
       -H "Content-Type: application/json" \
       -d '{"last_id":0, "page_size":5}'

{
  "code": 200,
  "data": {
    "countries": [
      { "id": 1, "name": "中国", "name_en": "China", "buddhist_population": 244130000 },
      ...
    ],
    "has_more": true,
    "last_id": 5
  }
}