Files
lsky-pro-docker/mpm.conf.template
mole404 c5b74cca9e feat(apache): MPM 参数内置为镜像默认值(低配单用户),支持 APACHE_* 逐项覆盖
背景:镜像此前完全吃 Debian/php-apache 的出厂 MPM 值(prefork: StartServers 5 /
MinSpareServers 5 / MaxSpareServers 10 / MaxRequestWorkers 150 /
MaxConnectionsPerChild 0),低配单用户机上光是常驻 10 个空闲 PHP 子进程就已过重。

① 新增 mpm.conf.template(照 000-default.conf.template / ports.conf.template 的既有套路),
   Dockerfile COPY 进 /etc/apache2/ 并加构建期护栏(模板缺失 / 占位符被删 → 构建失败)。
② entrypoint.sh 在 exec 之前渲染到 /etc/apache2/conf-enabled/mpm.conf —— Debian 的
   apache2.conf 先 include mods-enabled 再 include conf-enabled,后者覆盖出厂 prefork 值。
   内置默认:StartServers 2 / MinSpareServers 1 / MaxSpareServers 3 /
   MaxRequestWorkers 5 / MaxConnectionsPerChild 5 / KeepAlive Off。
③ 六项各自独立覆盖(写哪个改哪个,没写的保持默认),并带校验与兜底:
   非整数 / 越下限 / 一致性不满足(MaxRequestWorkers ≥ MaxSpareServers ≥ MinSpareServers)
   → 该项退回默认值 + [lsky] 警告;KeepAlive 只认 On/Off(大小写不敏感,统一渲染成 On/Off);
   MaxConnectionsPerChild 允许 0(0 = 永不回收,合法值)。
   渲染或落盘失败只警告,绝不影响容器启动(set -eu 下全部走 if 守卫,另挡掉
   「目标路径被目录占住时 mv 静默假成功」那条实测发现的坑)。
④ APACHE_KEEPALIVE_TIMEOUT / APACHE_MAX_KEEPALIVE_REQUESTS 仅在 KeepAlive=On 且显式
   设置时才写入;未设则不写该行,跟随 Apache 发行版默认(5 秒 / 100 个请求)。
⑤ README 新增「Apache MPM」一节:默认值、变量表、脏值策略、默认态日志摘要与自查命令、
   高配参考值、以及「MaxRequestWorkers × 单进程内存 ≈ 可用内存」的估算提醒;
   docker-compose.yaml 的 environment 加注释示例(不改任何生效值)。
⑥ CI 新增真容器步骤「Verify Apache MPM defaults and overrides」:默认态与期望的 6 行
   逐行 diff;单项覆盖生效且其余仍默认;脏值退回默认且日志有警告;KeepAlive=On 时
   「不设 timeout → 两行都不出现」「设了 → 两行出现且值正确」;大小写归一化;
   并跑 apache2ctl -t 确认渲染结果不会让 Apache 报语法错。

本机验证(无 docker,镜像层由 CI 验):bash -n 通过;用抽取的入口脚本真代码跑 15 个场景
(全默认 / 单项覆盖 / 六项全脏 / KeepAlive 各形态 / 前导零 / 一致性破坏 / 目标被目录占住 /
模板缺失)全部 exit 0 且输出符合预期;Dockerfile 的 8 组 md5 自检与补丁字节校验未受影响
(未碰 patches/ 与 src/)。
2026-09-30 00:26:45 +08:00

7 lines
263 B
Plaintext

StartServers ${APACHE_START_SERVERS}
MinSpareServers ${APACHE_MIN_SPARE_SERVERS}
MaxSpareServers ${APACHE_MAX_SPARE_SERVERS}
MaxRequestWorkers ${APACHE_MAX_REQUEST_WORKERS}
MaxConnectionsPerChild ${APACHE_MAX_CONNECTIONS_PER_CHILD}
KeepAlive ${APACHE_KEEP_ALIVE}