本文档带你从克隆仓库到本地完整运行整套服务。
前置条件
1. 克隆并安装依赖
git clone https://github.com/xuerzong/openproxy.git
cd openproxy
bun install
2. 生成 RSA 密钥对
供应商 API Key 以 RSA 加密形式存入数据库,需提前生成密钥对:
bun scripts/generateRSAKey.ts
保存输出结果,下一步会用到。
3. 配置环境变量
apps/server
cp apps/server/.env.example apps/server/.env
如果你是走 Docker 部署流程,推荐改用 cd docker && ./prepare.sh 自动生成 docker/.env,而不是手动填写 Docker 环境变量。
编辑 apps/server/.env,至少填写:
DATABASE_URL=postgres://user:password@localhost:5432/openproxy
BETTER_AUTH_SECRET=<随机 32 字节 base64 字符串>
BETTER_AUTH_URL=http://localhost:5173/api
# APP_DOMAIN 是顶级域名(如 example.com,默认 aiproxy.shop),控制:
# - 为 *.APP_DOMAIN 生成 better-auth 受信任来源
# - 将 better-auth 会话 Cookie 的 Domain 设为 .APP_DOMAIN,让 *.APP_DOMAIN 子域
# 共享同一份登录态(仅在生产环境启用)
APP_DOMAIN=
# CLIENT_ORIGIN 是租户前端的对外 origin(协议 + 主机,无尾部斜杠,
# 例如 https://app.example.com),用于拼接支付回调/跳转地址与邮件验证
# 链接。默认生产为 https://app.${APP_DOMAIN},开发为 http://localhost:5173。
CLIENT_ORIGIN=
IS_OSS=true
ADMIN_EMAILS=owner@example.com
CRON_SECRET=
RSA_PRIVATE_KEY=<第 2 步生成的私钥>
RSA_PUBLIC_KEY=<第 2 步生成的公钥>
# 邮件(任选其一)
RESEND_API_KEY= # Resend
SMTP_HOST=
SMTP_USER=
SMTP_PASS=
SMTP_FROM=
# 可选阿里云短信 / 验证码
ALIBABA_CLOUD_ACCESS_KEY_ID=
ALIBABA_CLOUD_ACCESS_KEY_SECRET=
`ADMIN_EMAILS` 用逗号分隔管理员邮箱。自部署时,首次用这些邮箱注册的用户会自动被提升为 `admin`,这是推荐的管理员初始化方式。
ALI_CAPTCHA_API_KEY=
# 可选 ZPayZ 支付
ZPAYZ_CID=
ZPAYZ_PID=
ZPAYZ_PAY_KEY=
ZPAYZ_GATEWAY=https://zpayz.cn/submit.php
# 可选 Redis
REDIS_URL=
# OAuth(可选)
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
apps/api
新建 apps/api/.env:
DATABASE_URL=postgres://user:password@localhost:5432/openproxy
RSA_PRIVATE_KEY=<与 server 相同的私钥>
PORT=5060
4. 执行数据库迁移
cd apps/server
bun run migrate
该命令将 apps/server/drizzle/ 中的 SQL 应用到 PostgreSQL 实例。
5. 启动所有服务
# 根目录一键启动(Turborepo 并行拉起所有服务)
bun run dev
也可以单独启动各服务:
cd apps/api && cargo run # Rust 代理,端口 :5060
cd apps/server && bun run dev # Bun 后端,端口 :3888
cd apps/web && bun run dev:tenant # 租户页,端口 :5173
cd apps/web && bun run dev:admin # 管理页,端口 :5173
6. 验证服务正常
# 代理健康检查
curl http://localhost:5060/health
# 后端健康检查
curl http://localhost:3888/api/health
之后在浏览器打开 http://localhost:5173 即可访问 Web 界面。
默认端口
| 服务 | 地址 |
| --- | --- |
| Rust 代理 | http://localhost:5060 |
| Bun 后端 | http://localhost:3888 |
| 租户前端 | http://localhost:5173 |
| 管理后台 | http://localhost:5173 |
常见问题
数据库连接失败
确认 DATABASE_URL 正确,PostgreSQL 已启动,且该账号拥有 CREATE 权限(迁移阶段需要)。
鉴权回调异常
本地开发时,BETTER_AUTH_URL 通常应保持为与前端同源的 http://localhost:5173/api。受信任 origin 会根据内置的 localhost 规则和 APP_DOMAIN 自动生成,大多数场景不需要额外配置认证 origin 环境变量。
API Key 解密失败 / RSA 报错
确保 apps/api/.env 中的 RSA_PRIVATE_KEY 与 apps/server/.env 中的同一套密钥对,且值完整、无换行截断或多余空格。务必使用同一次 bun scripts/generateRSAKey.ts 的输出。
端口被占用
检查 :5060 或 :3888 是否已有进程占用,在对应 .env 文件中用 PORT=xxxx 覆盖。