跳到主要内容
版本:0.1.x

基本介绍

lina-coreLinaPro的后端主框架,也是所有通用平台能力的稳定底座。它基于Go语言构建,负责提供RESTful API契约、认证鉴权、权限治理、运行时配置、接口文档、定时调度、国际化、多租户上下文、插件生命周期和集群协调。

主框架的设计原则是:主框架提供通用能力,业务领域通过插件扩展。因此,lina-core不会直接内置具体业务模块,而是通过稳定的扩展接缝让源码插件和WASM动态插件接入。

目录结构

apps/lina-core/
├── api/ # API DTO与路由契约
├── internal/
│ ├── cmd/ # 服务启动、路由绑定、插件扫描
│ ├── controller/ # HTTP控制器
│ └── service/ # 业务服务层
│ ├── apidoc/ # OpenAPI文档聚合
│ ├── auth/ # 认证服务
│ ├── bizctx/ # 请求身份与租户上下文
│ ├── cluster/ # 集群运行状态
│ ├── coordination/ # Redis协调抽象
│ ├── cron/ # 定时调度入口
│ ├── i18n/ # 国际化运行时
│ ├── jobmgmt/ # 持久化任务管理
│ └── plugin/ # 插件治理与运行时
├── manifest/
│ ├── config/ # 配置模板与框架元数据
│ ├── i18n/ # 主框架运行时语言包
│ └── sql/ # 主框架DDL与初始化数据
└── pkg/
├── pluginhost/ # 源码插件扩展接缝
├── pluginbridge/ # WASM动态插件桥接协议
├── pluginservice/ # 发布给源码插件的主框架服务契约
└── sourceupgrade/ # 源码插件运行时升级门面

API契约层

主框架API层使用g.Meta结构体标签声明路径、方法、权限、摘要和参数。接口定义、权限标识和文档元数据共用同一个源头,避免文档和实现分离。

type UserListReq struct {
g.Meta `path:"/users" method:"get" tags:"User" summary:"List users" permission:"user:list"`
Page int `json:"page" v:"min:1"`
PageSize int `json:"pageSize" v:"min:1,max:100"`
}

这种方式带来三个好处:

能力说明
契约集中路径、方法、请求、响应和权限声明集中在api/目录
权限可审计permission标识直接绑定接口,便于角色和按钮权限治理
文档可生成主框架启动后自动聚合为OpenAPI文档

治理服务

认证与会话

主框架使用JWT作为请求认证机制,登录成功后颁发Token,有效期由jwt.expire控制。会话服务记录在线状态、登录时间、设备信息和失效时间,并支持强制下线。

关键配置:

jwt:
secret: "lina-jwt-secret-key-change-in-production"
expire: 24h

session:
timeout: 24h
cleanupInterval: 5m

生产环境必须替换jwt.secret,并避免在日志中输出敏感信息。

RBAC权限

LinaPro采用声明式RBAC权限体系。角色通过菜单、页面和按钮权限获得访问范围,接口请求由认证中间件和权限中间件统一校验。

权限拓扑缓存在主框架运行时中,变更后通过缓存修订机制快速生效;在集群模式下,权限版本会通过协调服务同步到各节点。

操作审计

主框架中间件对写操作进行审计,记录请求路径、操作者、参数摘要和执行结果。密码等敏感字段应由中间件或服务层屏蔽,避免写入日志。

运行时配置

主框架默认配置位于:

apps/lina-core/manifest/config/config.yaml

主要配置分组如下:

分组说明
serverHTTP监听地址、路由表输出、/api.json路径
logger日志路径、级别、结构化日志和TraceID
database默认数据库连接串,生产推荐PostgreSQL 14+
jwt签名密钥和Token有效期
session在线会话超时和清理间隔
scheduler定时调度默认时区
i18n默认语言、多语言开关和语言列表
cluster单机/集群模式、Redis协调器和选主租约
upload文件上传目录和单文件大小上限
plugin强制卸载策略、动态插件产物目录和自动启用插件

数据库默认使用PostgreSQL

database:
default:
link: "pgsql:postgres:postgres@tcp(127.0.0.1:5432)/linapro?sslmode=disable"

SQLite仅适合单节点本地演示或冒烟验证,不建议用于生产,也不支持集群部署。

完整配置分组、生产环境检查项和插件自动启用说明见配置管理

接口文档聚合

主框架启动后自动聚合主框架和已启用插件的接口,生成OpenAPI文档:

http://localhost:8080/api.json

管理工作台在「开发中心 → 接口文档」中内嵌浏览和调试界面。接口文档会显示请求参数、响应结构、权限标识和多语言描述,便于前后端联调。

接口文档翻译位于manifest/i18n/<locale>/apidoc/。插件启用后,插件自己的接口文档翻译也会被纳入聚合。

接口契约声明、permission权限标签、源码插件和动态插件文档投影方式见接口文档

定时调度

主框架提供持久化定时调度子系统,任务配置和执行日志保存在数据库中。任务支持两种执行类型:

类型说明适用场景
Go处理器调用主框架或插件注册的处理器数据清理、统计、同步任务
Shell命令执行系统命令文件处理、系统维护脚本

源码插件可以通过pluginhost注册自有任务处理器,随后在管理工作台中选择调用目标。任务还支持分组、手动触发、暂停恢复、超时控制和执行日志。

集群模式下,任务通过执行范围控制调度行为:

执行范围说明
master_only仅主节点执行,适合全局唯一任务
all_node每个节点都执行,适合节点本地任务

内置任务、执行日志、并发策略和插件任务注册方式见定时任务

国际化运行时

主框架默认提供zh-CNen-US两套运行时语言资源。语言包位于:

apps/lina-core/manifest/i18n/<locale>/

资源按语义域拆分,例如menu.jsonerror.jsonplugin.jsonjob.jsonapidoc/。插件在自己的manifest/i18n/中维护语言包,启用后由主框架自动合并。

国际化配置示例:

i18n:
default: zh-CN
enabled: true
locales:
- locale: en-US
nativeName: English
- locale: zh-CN
nativeName: 简体中文

修改语言包后,开发环境可以重启服务;生产环境应通过运行时缓存失效接口按语言或插件范围精确刷新,避免全量清空导致短暂翻译抖动。

语言包目录、运行时资源加载模式、插件语言包和接口文档翻译规则见I18N国际化

多租户基础能力

主框架原生内置多租户基础接缝,但完整租户控制面由官方multi-tenant源码插件提供。未启用该插件时,系统默认运行在tenant_id = 0的平台租户上下文中,保持单租户开箱体验。

层级职责
主框架bizctx请求上下文、身份快照、tenant_id过滤接缝、插件多租户元数据
multi-tenant插件租户主体、成员关系、租户解析、租户代管和租户插件治理
租户感知插件在清单中声明多租户能力,并在自有表中使用tenant_id隔离数据

当前隔离模型为Pool共享表模型,使用tenant_id区分数据。schema-per-tenantdatabase-per-tenant、配额、计费和品牌定制保留为后续演进方向。

租户上下文、租户过滤服务、multi-tenant插件和租户级插件治理见多租户能力

插件运行时

主框架通过插件运行时加载和治理两类插件:

  • 源码插件:随主框架编译,使用pluginhost注册路由、钩子、定时任务和生命周期回调。
  • WASM动态插件:作为运行时产物上传,使用pluginbridge在沙箱中处理请求,并通过hostServices访问受治理的主框架能力。

插件运行时负责发现清单、检查依赖、执行安装和升级SQL、同步菜单权限、投影路由和钩子、刷新缓存,并在异常状态下控制业务入口。

集群协调

单机模式下,主框架只依赖PostgreSQL和进程内协调即可运行。集群模式启用后,必须配置分布式协调器(内置支持Redis,用户可自行适配修改):

cluster:
enabled: true
coordination: redis
redis:
address: "127.0.0.1:6379"

Redis用于选主、分布式锁、缓存修订和跨节点事件;PostgreSQL继续负责业务和治理数据持久化。更多部署细节见原生分布式架构

健康探针

主框架提供/health端点,供负载均衡、容器编排和监控系统检查服务状态。默认检查数据库连通性,超时由health.timeout控制:

health:
timeout: 5s

健康探针返回标准HTTP状态码,正常为200,异常为503