mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 14:46:36 +08:00
53 lines
3.2 KiB
Markdown
53 lines
3.2 KiB
Markdown
# OpenFlare 下游树
|
||
|
||
本目录占据上游 `backend/downstream/` 的位置,存放 OpenFlare 的全部业务,
|
||
按功能职责拆为 **4 个插件 + 1 个共享层**。上游目录
|
||
(`backend/{core,pkg,plugins}`)通过 `git fetch wavelet && git merge wavelet/main`
|
||
吸收(第一次接线已 merge `wavelet/feat/cordis-alignment`,待该分支合入上游 main
|
||
后改走 `wavelet/main`)。本目录、`frontend/` 与 `backend/cmd` 由本仓库持有。
|
||
合并前请 `git config include.path ../.gitconfig`(或 worktree 安全写法
|
||
`git config include.path "$(git rev-parse --show-toplevel)/.gitconfig"`),
|
||
以启用 `.gitattributes` 的 `merge=ours`。
|
||
|
||
```
|
||
backend/openflare/
|
||
├── plugins/
|
||
│ ├── server/ # 控制面插件:站点/区域/Cloudflare/Pages/WAF/节点/回源/健康/配置版本
|
||
│ │ ├── openflare/ admin/ oauth/ user/ upload/ cap/ config/ health/ # 业务域
|
||
│ │ ├── repository/ model/ infra/ shared/ pkg/ # 支撑层
|
||
│ │ └── router/ platform/ listener/ integration/ testhelper/ # 装配与接线
|
||
│ ├── agent/ # 边缘 nginx/WAF 代理守护进程插件
|
||
│ ├── relay/ # frps 中继守护进程插件
|
||
│ └── flared/ # frpc 隧道客户端守护进程插件
|
||
└── share/ # 插件间共享资源(见 share/README.md)
|
||
```
|
||
|
||
装配根在 `backend/cmd`(与上游同构):`main.go` + `cmd/*.go` 为 server 的
|
||
api/worker/schedule/all profile 入口,`cmd/{agent,relay,flared}/main.go` 为三个
|
||
守护进程入口。
|
||
|
||
## 依赖规则
|
||
|
||
1. `plugins/<A>` 与 `plugins/<B>` 之间禁止互相 import;需要协作时走 `core/contracts`
|
||
或 `ctx.Events()`。
|
||
2. 插件只允许 import 本插件内部包、`Wavelet/core`、`Wavelet/core/contracts`、
|
||
`Wavelet/pkg` 与 `Wavelet/openflare/share`。
|
||
3. `share/` 禁止 import 任何插件实现与下游业务包。
|
||
4. 表单一所有者:`of_*` 全部由 `server` 插件建表与读写;`w_*` 由上游平台插件拥有,
|
||
下游只能经契约或事件访问。
|
||
|
||
## 收敛路线
|
||
|
||
- 已完成:`agent`/`relay`/`flared` 各有 `plugin.go` 实现 `core.Plugin` + `core.Driver`
|
||
(`DriverTypeAgent`/`DriverTypeRelay`/`DriverTypeFlared`),入口 `backend/cmd/{agent,relay,flared}/main.go`
|
||
已改为 `core.NewApp(core.WithProfile(...))` + `app.Run()` 装配,`-config` 旗标、
|
||
默认路径、退出码与启动日志保持原样;JSON 配置由各插件 `Apply` 自行加载。
|
||
- 已完成:`server/plugin.go` 实现 `core.Plugin`,`Apply` 以 `ctx.Router().Group(api_prefix)`
|
||
声明根级与 `/v1` 全部路由;`router.Serve` 已删除,装配根改为
|
||
`core.App` + `driver_http.New(WithEngine(router.BuildEngine()))`,监听与优雅退出归内核。
|
||
路由保真由 `plugin_parity_test.go` 对拍 `baseline/routes-engine.txt`(256 条方法+路径)保证。
|
||
- 待办:`platform/bootstrap` 的任务、设置与迁移注册迁入 `Apply`;各业务域按插件标准
|
||
分层规范收敛到 `handler/ service/ repository/ model/ errs/ migrations/`(模式 2);
|
||
引擎级中间件、NoRoute 前端兜底与白名单生效三项能力回流上游后,去掉
|
||
`BuildEngine` 交给 `WithEngine` 这一例外。
|