Monorepo 结构

openproxy/
├── apps/
│   ├── api/      # Rust + Axum 代理
│   ├── server/   # Bun + Elysia 后端
│   └── web/      # React + Vite 前端
├── packages/
│   ├── schema/            # 共享 Zod/TypeBox Schema
│   ├── payment-provider/  # 支付网关抽象
│   ├── phone-auth/        # 手机 OTP 抽象
│   └── ui/                # 共享 React 组件
└── website/      # 文档站(Stropress)

一键启动所有服务

# 根目录执行
bun run dev

执行 turbo run dev,并行拉起所有支持 dev 脚本的工作区。

子应用独立启动

Rust Proxy(apps/api

cd apps/api
cargo run

需要 apps/api/.env 中配置 DATABASE_URLRSA_PRIVATE_KEYPORT

业务后端(apps/server

cd apps/server
bun run dev

Web — 租户仪表盘

cd apps/web
bun run dev:tenant

Web — 管理后台

cd apps/web
bun run dev:admin

推荐启动顺序

  1. 先启动 apps/server,确认 http://localhost:3888/api/health 可访问
  2. 再启动 apps/api,用 curl http://localhost:5060/health 验证代理层健康
  3. 最后启动 apps/web,进行 UI 联调

运行测试

Rust Proxy

cd apps/api
cargo test

所有单元测试和集成测试均在进程内运行,内嵌 HTTP 测试服务器,无需外部依赖。

Server / packages

bun test

数据库迁移

cd apps/server
bun run migrate      # 应用待执行的迁移

SQL 迁移文件位于 apps/server/drizzle/。表结构变更需通过 Drizzle 生成新的迁移文件。

关键环境文件

文件用途
apps/server/.env鉴权密钥、数据库地址、RSA 密钥对、邮件/OAuth 配置
apps/api/.env数据库地址、RSA 私钥、端口
apps/web/envs/前端按目标(tenant/admin)分别配置的环境变量文件

关键端口

服务默认端口
apps/server3888
apps/api5060
apps/web5173(Vite,以终端实际输出为准)