installerbuilder/doc/架构.md

233 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Installer Builder 架构设计
## 1. 系统概述
Installer Builder 是一个跨平台的安装包构建工具,旨在简化为不同操作系统和架构创建安装包的过程。该系统支持 Windows 和 Linux 平台能够生成多种类型的安装包MSI、DEB、RPM 和压缩包),并支持多架构构建、安装前后脚本执行以及安装包升级。
### 1.1 设计目标
- **跨平台**:支持 Windows 和 Linux 操作系统
- **多格式**:支持 MSI、DEB、RPM 和压缩包格式
- **多架构**:支持为不同 CPU 架构构建安装包
- **可配置**:通过配置文件定义安装包内容和行为
- **可扩展**:通过插件系统支持自定义功能
- **双模式**:同时支持命令行和图形界面
## 2. 系统架构
### 2.1 整体架构
Installer Builder 采用分层架构设计,主要包括以下层次:
```mermaid
graph TD
A[用户界面层] --> B[核心引擎层]
B --> C[平台适配层]
C --> D[包构建层]
E[插件系统] --> D
B --> F[脚本执行层]
```
### 2.2 核心组件
#### 2.2.1 用户界面层
提供与用户交互的接口包括命令行界面CLI和图形用户界面GUI
- **CLI**:用于自动化构建流程,适合集成到 CI/CD 管道中
- **GUI**:基于 Wails 框架,为开发人员提供直观的操作界面
#### 2.2.2 核心引擎层
系统的中央协调组件,负责管理整个构建流程。
- **配置管理器**:解析和验证配置文件
- **构建协调器**:协调各组件完成构建任务
- **资源管理器**:管理构建过程中的临时资源
- **任务调度器**:处理并行构建任务
#### 2.2.3 平台适配层
处理不同操作系统和架构的特定逻辑。
- **平台检测器**:检测当前运行平台
- **平台适配器**:为不同平台提供特定实现
- **架构管理器**:处理多架构构建需求
#### 2.2.4 包构建层
负责生成不同类型的安装包。
- **MSI 构建器**:构建 Windows MSI 安装包
- **DEB 构建器**:构建 Linux DEB 安装包
- **RPM 构建器**:构建 Linux RPM 安装包
- **压缩包构建器**:创建跨平台压缩包
#### 2.2.5 脚本执行层
处理安装前后脚本的执行。
- **脚本执行器**:执行 Node.js 脚本
- **环境变量管理器**:管理脚本执行环境
- **结果处理器**:处理脚本执行结果
#### 2.2.6 插件系统
提供扩展系统功能的机制。
- **插件管理器**:加载和管理插件
- **插件接口**:定义插件与系统交互的标准接口
## 3. 数据流
### 3.1 构建流程数据流
```mermaid
sequenceDiagram
participant User
participant UI as 用户界面
participant Config as 配置管理器
participant Builder as 构建协调器
participant Platform as 平台适配器
participant Packager as 包构建器
participant Script as 脚本执行器
User->>UI: 提供配置文件和构建参数
UI->>Config: 解析配置
Config->>Builder: 提供验证后的配置
Builder->>Platform: 请求平台适配
Platform->>Builder: 返回平台特定信息
Builder->>Script: 执行安装前脚本(如有)
Script->>Builder: 返回脚本执行结果
Builder->>Packager: 请求构建安装包
Packager->>Builder: 返回构建结果
Builder->>Script: 执行安装后脚本(如有)
Script->>Builder: 返回脚本执行结果
Builder->>UI: 返回构建结果
UI->>User: 显示结果
```
### 3.2 配置数据流
```mermaid
flowchart TD
A[配置文件] --> B[配置解析器]
B --> C{格式验证}
C -->|验证失败| D[错误处理]
C -->|验证成功| E[配置模型]
E --> F[构建协调器]
```
## 4. 技术栈选择
### 4.1 核心语言Go
选择 Go 作为核心开发语言的理由:
- **跨平台**:原生支持 Windows 和 Linux
- **编译型语言**:生成单一二进制文件,无需运行时依赖
- **并发支持**:优秀的并发模型,适合处理并行构建任务
- **性能**:高性能,适合处理文件操作和系统调用
- **标准库**:丰富的标准库,特别是用于文件操作和压缩
### 4.2 图形界面Wails
选择 Wails 作为 GUI 框架的理由:
- **Go + Web 技术**:结合 Go 后端和现代 Web 前端技术
- **原生感觉**:生成的应用具有原生应用的外观和感觉
- **跨平台**:支持 Windows 和 Linux
- **轻量级**:比 Electron 更轻量,资源占用更少
- **开发体验**:允许使用熟悉的 Web 技术进行 UI 开发
### 4.3 配置格式YAML/JSON
同时支持 YAML 和 JSON 配置格式的理由:
- **人类可读性**YAML 格式易于人类阅读和编写
- **广泛支持**JSON 格式被广泛支持,易于与其他工具集成
- **灵活性**:提供多种选择以满足不同用户的偏好
- **验证支持**:可以使用 JSON Schema 进行配置验证
### 4.4 脚本执行Node.js
选择 Node.js 作为脚本执行环境的理由:
- **跨平台**:在 Windows 和 Linux 上表现一致
- **生态系统**:丰富的包生态系统
- **异步 I/O**:适合执行 I/O 密集型任务
- **熟悉度**:开发人员普遍熟悉 JavaScript/Node.js
## 5. 扩展性设计
### 5.1 插件系统
Installer Builder 采用插件架构,允许通过插件扩展系统功能:
- **包类型插件**:添加对新安装包类型的支持
- **平台插件**:添加对新操作系统的支持
- **功能插件**:添加新功能,如签名、验证等
### 5.2 接口设计
系统使用清晰定义的接口,使组件之间松耦合:
- **包构建器接口**:统一不同包类型的构建过程
- **平台适配器接口**:统一不同平台的特定操作
- **脚本执行器接口**:允许支持不同的脚本语言
## 6. 部署架构
Installer Builder 作为独立应用程序部署,有两种使用模式:
### 6.1 开发者模式
- 开发人员在本地安装并使用 GUI 模式
- 用于测试和调试安装包配置
### 6.2 CI/CD 模式
- 在 CI/CD 管道中使用 CLI 模式
- 自动化构建和发布安装包
## 7. 安全考虑
### 7.1 脚本执行安全
- 在受控环境中执行脚本
- 限制脚本的系统访问权限
- 验证脚本来源
### 7.2 配置验证
- 严格验证配置文件内容
- 防止恶意配置导致的安全问题
### 7.3 依赖管理
- 定期更新依赖以修复安全漏洞
- 使用可信来源的依赖
## 8. 性能考虑
### 8.1 并行构建
- 支持并行构建多个架构和包类型
- 使用 Go 的并发特性优化性能
### 8.2 资源管理
- 有效管理内存和磁盘使用
- 清理临时文件和资源
## 9. 兼容性和可移植性
### 9.1 跨平台兼容性
- 确保在 Windows 和 Linux 上一致的行为
- 处理平台特定的文件路径和权限差异
### 9.2 向后兼容性
- 维护配置文件格式的向后兼容性
- 支持旧版本创建的安装包的升级路径