参与开发
本页介绍如何在本地参与 RS-IBED 的开发,包括后端、前端、OpenAPI 以及文档站。
该项目是一个 monorepo,主要目录如下:
.├── docs├── frontend├── migrations├── src├── Cargo.toml├── config.toml└── openapi.jsonsrc/:Rust 后端源码frontend/:SvelteKit 前端管理界面docs/:Astro Starlight 文档站migrations/:数据库迁移文件openapi.json:导出的 OpenAPI 描述
开发环境准备
Section titled “开发环境准备”建议先安装以下工具:
- Rust 与 Cargo
pnpm- SQLite 或 PostgreSQL(取决于你的数据库选择)
你还需要准备运行时环境变量:
export IMG_AUTH_TOKEN="dev-token"export IMG_JWT_SECRET="dev-secret"export IMG_DATABASE_URL="sqlite://data.db"cargo buildcargo testcargo run如果需要指定配置文件:
cargo run -- --config ./config.toml导出 OpenAPI
Section titled “导出 OpenAPI”无需启动服务即可导出 OpenAPI:
cargo run -- export-openapicargo run -- export-openapi frontend/openapi.json默认输出到仓库根目录的 openapi.json。
新增命令行工具
Section titled “新增命令行工具”仓库的 src/bin/ 下可以放独立二进制。例如:
src/bin/upload.rs:用于通过 CLI 调用上传接口
发布或构建后会生成单独的 upload 可执行文件,可直接运行:
./upload --help前端位于 frontend/,使用 SvelteKit。
在 frontend/ 目录执行:
pnpm installpnpm gen:apipnpm checkpnpm buildpnpm dev推荐联调顺序
Section titled “推荐联调顺序”- 从后端导出 OpenAPI:
cargo run -- export-openapi frontend/openapi.json- 在前端生成 SDK:
cd frontendpnpm gen:api- 启动后端:
cargo run- 启动前端:
cd frontendpnpm dev当前项目包含一套 CLI 到浏览器的登录流程:
cargo run启动后,服务端会输出一个 CLI 登录 URL- 该链接会指向
/login?token=... - 浏览器打开后,前端会请求
/api/auth/cli - 服务端随后写入
ibed_tokenCookie,建立浏览器登录态
受保护接口也支持直接使用 Bearer Token,例如上传接口会校验:
Authorization: Bearer <AUTH_TOKEN>文档位于 docs/,使用 Astro Starlight。
在 docs/ 目录执行:
pnpm installpnpm devpnpm buildpnpm preview多语言文档位置
Section titled “多语言文档位置”docs/src/content/docs/zh/:中文文档docs/src/content/docs/en/:英文文档
如果你新增中文页面,通常也应该同步补上对应英文页面,保持导航结构一致。
API 文档来源
Section titled “API 文档来源”文档站通过 starlight-openapi 读取仓库根目录的 openapi.json。
因此后端 API 发生变化后,推荐顺序是:
- 重新导出
openapi.json - 如有需要同步到
frontend/openapi.json - 再启动或构建文档站与前端
上传接口调试
Section titled “上传接口调试”你可以用以下方式调试上传:
curlcargo run --bin upload -- ...- 查看浏览器开发者工具里的网络请求
开发上传、缩放或访问相关功能时,通常需要关注这些文件:
src/handlers/upload.rssrc/handlers/view.rssrc/router.rssrc/config.rssrc/auth.rs
如果遇到接口调用失败,可以优先检查:
IMG_AUTH_TOKEN是否正确IMG_DATABASE_URL是否可连接config.toml中的url_pattern与图片访问路径是否一致image.allow_show_origin是否影响原图访问- OpenAPI 是否已经重新导出
提交改动前,建议至少执行:
cargo testcargo build如果修改了前端:
cd frontendpnpm checkpnpm build如果修改了文档:
cd docspnpm build