Skip to content

架构概述

PxeLab 的系统组成、引导流程与关键设计取舍。

相关文档: 功能特性 | 引导架构与无盘启动 | 部署模式


服务架构

PxeLab 是一个单二进制程序,内部按服务划分,由服务管理器统一调度:

┌─────────────────────────────────────────────────────┐
│                    PxeLab Binary                     │
├──────────┬──────────┬──────────┬──────────┬─────────┤
│  HTTP    │  DHCP    │  TFTP    │  DNS     │  NFS    │
│  :8080   │  :67     │  :69     │  :53     │  :2049  │
│  TCP     │  UDP     │  UDP     │  UDP     │  TCP    │
├──────────┴──────────┴──────────┴──────────┴─────────┤
│              Service Manager (生命周期管理)           │
├─────────────────────────────────────────────────────┤
│  SQLite (pxelab.db)  │  Event Bus  │  Log Bus      │
├─────────────────────────────────────────────────────┤
│              Config (config.yaml)                    │
└─────────────────────────────────────────────────────┘
服务默认端口协议默认自启说明
HTTP8080TCPWeb UI + API + 引导文件服务
DHCP67UDP取决于配置IP 地址分配 + PXE 选项
ProxyDHCP4011UDP取决于配置仅 PXE 选项(叠加模式)
TFTP69UDPNBP 文件传输
DNS53UDP本地 DNS 解析
NFS2049TCPNFSv3 文件共享

各服务可独立启停、互不影响;配置变更支持热重载,多数场景无需重启进程。


两阶段网络引导

PXE ROM 的能力有限,PxeLab 用两阶段引导把它升级到功能完整的 iPXE:

Stage 1                           Stage 2
┌─────────────┐   TFTP/HTTP    ┌──────────┐   HTTP     ┌──────────────┐
│  PXE ROM    ├───────────────►│  iPXE    ├───────────►│  引导菜单    │
│  (BIOS/UEFI)│  undionly.kpxe │  (自定义  │  /boot/    │  (内核+initrd│
│             │  /ipxe.efi     │   编译)   │  ipxe/     │   /WIM/Chain │
└─────────────┘                │          │  script    │   /Local)    │
                               └──────────┘           └──────────────┘

Stage 1:客户端 PXE ROM 发送 DHCP 请求 → PxeLab 响应 IP、next-server 与 NBP 文件名 → 客户端经 TFTP 下载 NBP(如 ipxe.efi)并执行。

Stage 2:iPXE 启动后自动执行内置脚本(dhcpchain http://server:8080/boot/ipxe/script)→ 从 PxeLab 获取引导菜单 → 用户选择引导项(安装系统、本地启动等)。

逐环节细节(PXELinux/GRUB2 兼容、架构映射、sanboot 无盘)见引导架构与无盘启动


关键设计取舍

取舍做法收益
单二进制Go 静态编译,前端与引导文件全部内嵌零依赖、部署即一个文件;升级只需替换文件,无路径/权限问题
服务管理器所有服务统一实现生命周期接口独立启停、优雅关闭、配置热重载
事件总线服务间通过发布/订阅解耦(DHCP 租约、引导事件、WOL 等)松耦合、易扩展、日志审计可追踪
存储接口分离数据层基于接口,SQLite 与内存两种实现测试用内存存储快速隔离;生产用 SQLite 轻量可靠
依赖注入入口处显式构造所有服务依赖依赖关系清晰、无全局单例、便于测试
现代前端React + CSS 变量主题 + 路由级代码分割暗/亮主题全组件适配、首屏加载快

技术栈

层级技术
后端Go 1.25+(chi 路由、SQLite/GORM)
前端React 19 + TypeScript + Tailwind CSS 4 + Vite
打包发布GoReleaser(多平台二进制)

PxeLab - 一体化 PXE 网络引导服务器