本文档带你从克隆仓库到本地完整运行整套服务。

前置条件

  • Bun >= 1.3.5
  • Rust — 最新 stable 版
  • PostgreSQL 15+(本地或远程均可)
  • Docker & Docker Compose(可选,用于一键启动)

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_KEYapps/server/.env 中的同一套密钥对,且值完整、无换行截断或多余空格。务必使用同一次 bun scripts/generateRSAKey.ts 的输出。

端口被占用

检查 :5060:3888 是否已有进程占用,在对应 .env 文件中用 PORT=xxxx 覆盖。