# foms_app — FOMS 纯伞(应用壳) 本仓库是 FOMS 的**纯伞**:只做组装与启动,不含任何业务逻辑。 业务全部在独立模块仓库,伞通过 `build.sh` 拉取、安装、软链、生成页面。 ## 仓库职责边界 | 仓库 | 角色 | 内容 | |---|---|---| | **foms_app(本仓)** | 纯伞 | 入口 `app/foms.py`、`build.sh`、`conf/`、`start/stop.sh`、首页 `wwwroot/index.ui`、`init/data.yaml` | | foms | 业务模块(核心) | 主备切换编排(六步状态机+防脑裂)、集群/节点/心跳/远程命令、Agent | | dbbackup | 业务模块 | 数据库备份 + 日志同步(binlog 复制) | | filesync | 业务模块 | 运行文件同步(rsync) | | hostwatch | 业务模块 | 日志监控 + 日志分析 + 主机指标 | ## 构建 ```bash ./build.sh ``` build.sh 做的事(全部是组装,无业务): 1. 建 venv 2. clone + 安装基础包(apppublic/sqlor/ahserver/bricks-for-python/xls2ddl) 3. 构建 bricks 前端,软链到 ./bricks 4. clone + 安装鉴权模块(appbase/rbac) 5. clone + 安装**全部业务模块**(foms/dbbackup/filesync/hostwatch)+ 各生成 DDL 6. xls2ui 从各模块 `json/` 生成 CRUD 页面到各模块 `wwwroot/` 7. 把各模块 `wwwroot/` 软链到主 `wwwroot/<模块名>`(URL 前缀隔离:`/foms/`、`/dbbackup/`…) 8. 建运行时目录 ## 运行 ```bash cp .env.example .env # 填 MYSQL_ROOT_PASSWORD / FOMS_AGENT_TOKEN / FOMS_PORT ./start.sh # 监听 FOMS_PORT(默认 9080) ./stop.sh ``` ## 数据库 所有模块共享一个库 `foms`(`get_module_dbname()` 固定返回 'foms')。 建库:依次执行各模块 `models/mysql.ddl.sql`(build 后生成)。 ## 加载顺序(app/foms.py) ``` set_globalvariable → load_pybricks → load_appbase → load_rbac → load_foms(核心,注册切换编排器+健康判定器) → load_dbbackup → load_filesync → load_hostwatch ```