按业务组合,不从零搭建
认证、角色、用户、媒体与标签已有官方模块。通过 Profile 声明启用项,让不同项目共享同一套基础能力。
认识官方模块THE MODULAR RUST FOUNDATION
一个可组合的 Rust 服务内核。将认证、权限、数据与 API 装配成你的应用,让每一块业务都有清晰的位置。
从第一个服务开始GraphQL + HTTP静态链接,按需组合
BUILT TO COMPOSE
共享的是基础设施,掌握在你手里的是应用本身。
01 / ARCHITECTURE
从模块声明到请求处理,
把一条完整的服务链路拆成清晰的职责。
模块通过 inventory 静态链接;启用项由 Profile 决定。
02 / OFFICIAL MODULES
六个官方模块,与内核统一版本发布。
展开了解职责、依赖和使用边界。
aynur_core_auth基础身份aynur_core_rbac授权管理aynur_core_user账户管理基于认证模块的公开身份 API 提供用户管理,包含 GraphQL 和 HTTP 接口,并在服务层执行权限校验。
aynur.core_useraynur.core_authaynur_ali_oss外部集成aynur_media文件与图像本地与 OSS 媒体元数据、上传接口、图片变体及强类型媒体读取端口。使用本地存储时需配置绝对路径 MEDIA_DATA_ROOT。
aynur.mediaaynur.core_auth、aynur.ali_ossaynur_tag内容组织# 启用身份、权限与用户模块
name = "example"
[[modules]]
name = "aynur.core_auth"
[[modules]]
name = "aynur.core_rbac"
[[modules]]
name = "aynur.core_user"modules.toml 描述模块元信息,profiles/*.toml 决定启用哪些模块;构建期据此生成 GraphQL Schema。
03 / QUICKSTART
准备 Rust 1.85+、Git 和 OpenSSL。
使用内置 SQLite 示例,走完第一条请求链路。
git clone --branch v0.4.0 --depth 1 \
https://gitee.com/aynurcn/aynur_core.git
cd aynur_core指定 Profile 和数据库,生成本地 JWT 密钥。首次启动允许自动建表。
自动建表仅用于本地开发。APP_PROFILE=profiles/example.toml \
DATABASE_URL=sqlite:./data/example.db \
DATABASE_AUTO_MIGRATE=true \
JWT_SECRET="$(openssl rand -hex 32)" \
REGISTER_DEFAULT_ROLES=member \
cargo run -p aynur_core_example在另一个终端检查健康状态,并向 GraphQL 发送查询。服务默认监听 4000 端口。
# 检查服务状态
curl --fail-with-body http://127.0.0.1:4000/health
# 查询 GraphQL 根类型
curl --fail-with-body http://127.0.0.1:4000/graphql \
-H 'Content-Type: application/json' \
--data '{"query":"{ __typename }"}'04 / INTEGRATION GUIDE
保留业务的自主权,也遵守装配的明确契约。
开发时可使用本地 path 依赖;部署时,将全部核心 crate 和官方模块固定到同一个 Git tag。
# 放入项目的 [dependencies]
aynur_core_module_api = { git = "https://gitee.com/aynurcn/aynur_core.git", tag = "v0.4.0" }
aynur_core_sdk = { git = "https://gitee.com/aynurcn/aynur_core.git", tag = "v0.4.0" }
aynur_core_gateway = { git = "https://gitee.com/aynurcn/aynur_core.git", tag = "v0.4.0" }完整的运行入口、构建依赖与数据库 feature 接线,以 consumer 示例为准。生成到 Cargo OUT_DIR 的代码无需提交。
aynur_core_module_api 和 aynur_core_sdk,声明模块的 ModuleDescriptor。inventory 注册一份 ModuleRegistration 和一份对应的 ModuleIntegration,连接模型、HTTP 路由与生命周期。modules.toml 中填写模块 ID、crate 和 GraphQL 根类型,在 Profile 中启用模块。build.rs 中生成 Schema 和模块链接代码,由网关装配入口引入。依赖使用点分模块 ID,例如 aynur.core_auth。跨模块读取通过强类型端口连接,GraphQL resolver 仅提取请求数据,校验与业务逻辑放在服务层。
生成代码公开 schema_builder、finish_schema 和 build_schema。需要注入项目专用的强类型数据时,使用 builder 扩展点。
#[derive(Clone)]
struct ProjectSchemaData;
fn build_project_schema(
context: &aynur_core_sdk::AppContext,
) -> anyhow::Result<ActiveSchema> {
Ok(finish_schema(
schema_builder(context).data(ProjectSchemaData),
))
}该片段放在已引入生成代码的装配入口中,再传入 GatewayBootstrap::new。生成的 Schema 内嵌构建期 Profile 名称;运行时 Profile 名称不一致会拒绝启动,需要重新构建。
默认使用 SQLite。切换到 PostgreSQL,需要同时启用编译特性和设置 PostgreSQL 连接 URL。仓库的 PostgreSQL 编译检查:
cargo check --workspace \
--no-default-features --features postgresql仅修改 DATABASE_URL 不会启用数据库驱动。部署环境使用 aynur_core_migrator 与经过审查的迁移,不开启网关自动建表。
网关和迁移器均以 project_root 为基准,加载其中的 .env,并解析相对 Profile 路径和 SQLite 数据库路径。
APP_PROFILEDATABASE_URLJWT_SECRETTRUSTED_PROXY_IPSGRAPHQL_MAX_DEPTHGRAPHQL_MAX_COMPLEXITY05 / RELATED TOOLS
内核负责装配业务,周边工具负责运行、发布和接收通知。按项目需要选择组合。
LESS BOILERPLATE. MORE BUSINESS.
从官方示例出发,把基础能力接好,把时间留给真正不同的部分。