haproxy:基于TCP/HTTP的反向代理与负载均衡项目

HAProxy 3.4.0 RPM 打包工程

分支1Tags1
文件最后提交记录最后更新时间
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前
27 天前

HAProxy 3.4.0 RPM 打包工程 — 项目报告

生成日期:2026-06-10 | Git HEAD: 5726b08


1. 项目概况

1.1 基本信息

项目
项目名称 HAProxy RPM 打包工程
打包版本 HAProxy 3.4.0
打包平台 openEuler 22.03 / 24.03 / 2503(EulerMaker)
目标架构 x86_64, aarch64
许可证 GPL-2.0-or-later
官方源码 https://www.haproxy.org/download/3.4/src/haproxy-3.4.0.tar.gz
提交总数 23 次
贡献者 micoder(23 次)

1.2 项目目标

将 HAProxy 3.4.0 官方源码打包为 RPM 格式,严格遵循 EulerMaker 平台 RPM 打包规范,支持 openEuler 系列操作系统,实现开箱即用的 HAProxy 负载均衡服务。


2. 工程目录结构

I:\haproxy/
│
├── build.sh              # EulerMaker 一键构建脚本
├── haproxy.spec           # RPM 打包规则文件(核心)
├── haproxy.cfg            # HAProxy 生产级默认配置
├── haproxy.service        # systemd 服务单元文件
├── haproxy.init           # SysV init 兼容启动脚本(conf/ 中也有一份)
├── haproxy.logrotate      # 日志轮转配置
├── haproxy.sysconfig      # 系统环境变量配置
├── haproxy-3.4.0.tar.gz   # 官方源码包(根目录副本)
├── LICENSE                # GPL-2.0-or-later 许可证
├── README.md              # 项目说明
├── patches/               # 补丁目录
│   └── README.md
├── sources/               # EulerMaker 源文件目录
│   ├── haproxy-3.4.0.tar.gz
│   ├── haproxy.service
│   ├── haproxy.cfg
│   ├── haproxy.logrotate
│   ├── haproxy.sysconfig
│   └── haproxy.rsyslog    # rsyslog 日志转发配置
├── conf/                  # 兼容脚本目录
│   └── haproxy.init
└── .atomcode/             # AtomCode 自动化配置
    ├── mcp.json
    ├── settings.json
    ├── commands/
    │   └── build-rpm.md
    └── skills/
        ├── rpm-packager/
        ├── haproxy-config-validator/
        ├── rpm-spec-reviewer/
        └── security-reviewer/

3. 各文件详细说明

3.1 build.sh — 构建脚本

路径: I:\haproxy\build.sh

一键构建脚本,严格遵循 EulerMaker 规范。执行流程:

check_prereqs → clean_build → create_build_dirs → copy_sources
  → install_deps → build_rpm → copy_artifacts → clean_build

特性:

  • set -euo pipefail 严格模式
  • 前置检查(确认 tarball 和 spec 存在)
  • dnf/yum 双包管理器兼容
  • 自动安装编译依赖(gcc, make, lua-devel, pcre2-devel, openssl-devel, libatomic, systemd-devel)
  • 构建产物自动输出到 output/ 目录
  • 支持 x86_64 / aarch64 双架构

3.2 haproxy.spec — RPM 打包规则

路径: I:\haproxy\haproxy.spec

内容 状态
Name haproxy
Version 3.4.0
License GPL-2.0-or-later
BuildArch x86_64 aarch64
BuildRequires gcc, make, lua-devel, pcre2-devel, openssl-devel, libatomic, systemd-devel
Source0 haproxy-3.4.0.tar.gz
Source1-Source5 service, cfg, logrotate, sysconfig, rsyslog
%prep %setup -q -n haproxy-3.4.0
%build USE_OPENSSL/P CRE2/LUA/THREAD/PROMEX/SLZ/TPROXY
%install 二进制 + 工具集 + 配置 + 文档
%pre haproxy 用户/组创建(幂等)
%post/%preun/%postun systemd 集成
%files 主包 + help 子包,%config(noreplace)
_hardened_build 1(安全加固)

编译选项:

TARGET=linux-glibc
CPU=generic
USE_OPENSSL=1  USE_PCRE2=1  USE_SLZ=1  USE_LUA=1
USE_LINUX_TPROXY=1  USE_PROMEX=1  USE_THREAD=1

安装的文件:

  • 二进制: /usr/sbin/haproxy, /usr/bin/halog, /usr/bin/iprange, /usr/bin/ip6range
  • 配置: /etc/haproxy/haproxy.cfg, /etc/logrotate.d/haproxy, /etc/sysconfig/haproxy, /etc/rsyslog.d/haproxy.conf
  • 服务: /usr/lib/systemd/system/haproxy.service
  • 文档: man 手册 + 帮助文档

3.3 haproxy.cfg — HAProxy 配置

路径: I:\haproxy\haproxy.cfg

生产级默认配置,三个配置段:

global 段

log         /dev/log local0 info
log         /dev/log local1 warning
maxconn     8192
user        haproxy
group       haproxy
nbthread    auto
cpu-map     auto:1/1- 0-
daemon
stats socket /run/haproxy/admin.sock mode 660 level admin
ssl-default-bind-ciphers    ECDHE-... (安全 cipher 套件)
ssl-default-bind-options    ssl-min-ver TLSv1.2 (禁用 SSLv3/TLSv1.0/TLSv1.1)

defaults 段

mode                    http
option                  httplog / dontlognull / redispatch
timeout http-request    10s
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
maxconn                 4096

listen stats 段

  • 监控页面: http://<IP>:8888/haproxy-stats
  • 认证: admin:admin(生产环境请修改密码)
  • 特性: hide-version, admin if LOCALHOST

3.4 haproxy.service — systemd 服务

路径: I:\haproxy\haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=network.target

[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg $OPTIONS
ExecReload=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -sf $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
KillMode=mixed
User=haproxy
Group=haproxy
RuntimeDirectory=haproxy
RuntimeDirectoryMode=0755
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

3.5 其他配置文件

haproxy.init — SysV 兼容启动脚本

  • 支持 start/stop/restart/reload/status
  • 兼容最小化系统(daemon 函数检测)
  • LOCKFILE 机制防止重复启动
  • 存放位置: conf/haproxy.init

haproxy.logrotate — 日志轮转

/var/log/haproxy/*.log {
    daily
    rotate 7
    compress
    delaycompress
    create 0640 haproxy haproxy
    postrotate
        /usr/bin/systemctl reload haproxy > /dev/null 2>&1 || true
    endscript
}

haproxy.sysconfig — 环境变量

# HAProxy 启动额外参数:
OPTIONS=""

haproxy.rsyslog — 日志转发(新增)

$template haproxy_raw,"%timegenerated:::date-rfc3164% ..."
local0.info     /var/log/haproxy/haproxy.log;haproxy_raw
local1.warning  /var/log/haproxy/haproxy.log;haproxy_raw
local0.none     /var/log/messages
local1.none     /var/log/messages

4. Git 提交历史

5726b08 修复:haproxy.cfg 日志与 nbproc 问题 + 新增 rsyslog 配置
71a327b EulerMaker 合规重构:HAProxy 3.4.0 RPM 打包工程
b406da6 update config
08766de update files
747b812 update files
7614c20 所有错误全部修复
feff83c update spec
ae71975 update files
ae8b79b update files
8f013f6 update files
15c933d 构建 0 错误 0 警告 | 启动 100% 成功 | 独立日志
66d9625 修复日志目录 /var/log/haproxy + logrotate
56a2b5c add files
b6bc2ee 修复 USE_SYSTEMD 警告 + 纯 systemd + 目录预创建
8b709cd 清理 init 残留,保留纯 systemd
b75fc72 修复 halog/iprange 存放目录
e9c596d update files
14290e6 update files
21a8a5f update spec
e49b56a update $version 变量
8c08e12 update files
6480304 合并 haproxy-v3.3 + haproxy-v3.4 资源
9b0e5e6 add files
228b676 no message
da1af0c update files
07652d0 add files
65bace5 Initial commit

关键里程碑

提交 说明
65bace5 初始提交
15c933d 首次构建成功(0 错误 0 警告)
71a327b EulerMaker 规范重构(目录结构 + build.sh 重写 + systemd-devel)
5726b08 修复 log/nbproc 致命问题 + rsyslog 配置

5. 构建与部署

5.1 本地构建

# 前置条件:openEuler 环境
sudo dnf install -y gcc make lua-devel pcre2-devel openssl-devel \
    libatomic systemd-devel rpm-build

# 一键构建
chmod +x build.sh
./build.sh

# 产物位置
ls output/
# haproxy-3.4.0-1.x86_64.rpm
# haproxy-help-3.4.0-1.noarch.rpm
# haproxy-3.4.0-1.src.rpm

5.2 安装与启动

# 安装
sudo rpm -ivh output/haproxy-3.4.0-1.x86_64.rpm

# 启动服务
sudo systemctl enable haproxy
sudo systemctl start haproxy

# 验证
haproxy -v
systemctl status haproxy

# 验证配置
haproxy -c -f /etc/haproxy/haproxy.cfg

# 热重载
systemctl reload haproxy

5.3 日志链路

HAProxy → /dev/log (local0/local1)
              ↓
          rsyslog (haproxy.rsyslog 配置)
              ↓
    /var/log/haproxy/haproxy.log
              ↓
     logrotate (每日轮转,保留 7 天)

6. 技术架构

6.1 服务模型

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   用户请求    │────▶│   HAProxy    │────▶│   后端服务    │
└──────────────┘     │  (LB/Proxy)  │     └──────────────┘
                     └──────┬───────┘
                            │
                    ┌───────▼───────┐
                    │  Stats 页面   │
                    │ :8888/stats   │
                    └───────────────┘

6.2 RPM 包构成

主包 haproxy:

  • 二进制: haproxy, halog, iprange, ip6range
  • 配置: haproxy.cfg, haproxy.service, logrotate, sysconfig, rsyslog.conf
  • 数据: 错误页面示例

子包 haproxy-help:

  • man 手册
  • 文档: README, CHANGELOG, doc/, examples/

6.3 安全加固

措施 实现
编译加固 _hardened_build 1
非 root 运行 User=haproxy, user haproxy
Stats 认证 stats auth admin:admin
版本隐藏 stats hide-version
本地管理 stats admin if LOCALHOST
SSL 安全 仅 TLSv1.2+, 安全 cipher 套件
日志隔离 独立日志文件,rsyslog 分离

7. 已知限制与未来改进

当前限制

限制 说明
无 Docker 支持 当前为 RPM 包,如有容器化需求需额外配置
SysV init 未打包 init 脚本仅保留在 conf/ 目录,未包含在 RPM 中(纯 systemd)
SSL 演示证书 未提供演示 SSL 证书,需用户自行生成

建议改进

改进项 优先级 说明
集成 systemd 安全沙箱 添加 ProtectSystem=full, PrivateTmp=true
自动化测试 添加构建后的冒烟测试脚本
LUA 脚本支持 添加 HAProxy LUA 脚本示例
Prometheus 集成 利用 USE_PROMEX=1 配置 Prometheus endpoint

8. AtomCode 自动化配置

项目已集成 AtomCode 开发辅助工具链:

类型 名称 用途
Skill rpm-packager RPM 打包工作流(/rpm-verify, /rpm-bump, /rpm-checklist
Skill haproxy-config-validator HAProxy 配置语法检查
Subagent rpm-spec-reviewer spec 文件合规审查
Subagent security-reviewer 安全配置审查
Command /build-rpm 一键 RPM 构建
MCP context7 实时文档查询
Hook PostToolUse 编辑 cfg 后自动验证
Hook PreToolUse 编辑 spec 前提醒规范

9. 合规性检查清单

EulerMaker 平台必过项

检查项 状态 备注
工程根目录有 build.sh set -euo pipefail
工程根目录有 haproxy.spec 包含完整 %files/%pre/%post
工程根目录有 LICENSE GPL-2.0-or-later
sources/ 目录存在 含 tarball + 配置文件
conf/ 目录存在 含 init 脚本(兼容用)
patches/ 目录存在 含 README 说明
无绝对路径硬编码 使用 %{_xxx}
目录权限合规(755/644)
%config(noreplace) 已使用
架构支持 x86_64 + aarch64
安全编译已开启 _hardened_build 1

10. 附录

附录 A: 快速命令速查

操作 命令
构建 RPM ./build.sh
安装 RPM sudo rpm -ivh haproxy-3.4.0-1.x86_64.rpm
启动服务 sudo systemctl start haproxy
查看状态 systemctl status haproxy
验证配置 haproxy -c -f /etc/haproxy/haproxy.cfg
热重载 systemctl reload haproxy
查看版本 haproxy -v
查看日志 tail -f /var/log/haproxy/haproxy.log

附录 B: RPM 包文件清单

/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
/etc/rsyslog.d/haproxy.conf
/usr/lib/systemd/system/haproxy.service
/usr/sbin/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/bin/ip6range
/var/lib/haproxy/
/var/log/haproxy/
/usr/share/haproxy/          (错误页面示例)
/usr/share/man/man1/haproxy.1

附录 C: AtomCode 使用指南

# 在 AtomCode 中执行

/rpm-verify              # 验证 haproxy.spec
/haproxy-config-validator # 验证 haproxy.cfg
/build-rpm               # 一键构建

# 或直接提问:
"帮我升级到 3.5.0 版本"
"检查 spec 文件是否有问题"
"给我生成一份项目报告"

报告由 AtomCode (deepseek-v4-flash) 自动生成

项目介绍

HAProxy 3.4.0 RPM 打包工程

定制我的领域