mole404
|
2da63c7e9a
|
chore(mem): MaxConnectionsPerChild 默认值改回 5(低流量下取最严内存纪律)
老师决定:他这台图床流量约 3 请求/分钟,MCP=5 意味着每 ~3 分钟才退休一个 worker,
换班开销可忽略;换班越勤,单个 worker 允许积累的内存天花板越低。故取回他原来的 5。
(中途试过 30,现按实测与他的偏好改回;env 覆盖机制 APACHE_MAX_CONNECTIONS_PER_CHILD
与 0=永不回收 的语义完全保留。)
同步改回:entrypoint.sh 默认值与旁注、build-image.yaml 6 处期望值(断言 + 自证清单 + 覆盖用例)、
Dockerfile 概览注释、docker-compose.yaml 注释。README 参数表本来就是 5,无需改。
验证:一次性容器集成跑 5 用例(默认→5、env=10→10、env=0→0、脏值 abc→回退 5 且不启动失败、
PHP_MEMORY_LIMIT 仍生效)+ apache2ctl -t = Syntax OK + memory_limit 仍 64M;
全仓 grep 无遗留的 30 期望值;Dockerfile 9 条 md5 自证 9/9。
|
2026-10-01 18:06:03 +08:00 |
|
mole404
|
5554c28c02
|
feat(mem): 测试版 —— PHP/opcache 收紧 + MaxConnectionsPerChild 放宽 + CI 断言
本提交只在 test/memory-tuning 分支上,master 保持 = 线上稳定版不动。
- 先量后改:镜像里实际生效的 memory_limit 是 512M(上游 memory-limit.ini),
不是 PHP 编译期默认的 128M。本轮改为默认 64M,并做成运行期可覆盖:
entrypoint 新增 PHP_MEMORY_LIMIT(默认 64M),只接受 <数字>[KMG],脏值只忽略该项
并警告、绝不启动失败,幂等;改 env 即可回 128M/256M,不用重建镜像。
- opcache 实测:配置 128M/10000;真实预热集合只用了 827 个脚本 / 25.0MB;
全树编译上限 9949 个脚本 / 255.9MB(走不到)→ memory_consumption 收成 64(约实测 2.6 倍,
省下 64MB 共享内存),max_accelerated_files 保持 10000,validate_timestamps=1 显式写死。
- MaxConnectionsPerChild 默认 5 → 30(减少无谓的 worker 换班),
APACHE_MAX_CONNECTIONS_PER_CHILD 覆盖机制与 0=永不回收 的语义原样保留。
- CI:Verify published image 新增两条断言(memory_limit == 64M、mpm.conf 有
MaxConnectionsPerChild 30),沿用先落文件再比较(不碰 pipefail + grep -q 那个坑);
MPM 自证步骤里的期望值 5 → 30。
- 分支安全:push 触发增加 test/*(保留 master);Promote to latest 本就有
github.ref == refs/heads/master 的条件(本轮补强注释),分支构建只产不可变 sha- 镜像;
retag.yaml 只由 workflow_dispatch 触发且硬拒 latest 目标,无需额外守卫。
|
2026-10-01 12:57:09 +08:00 |
|
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 |
|
mole404
|
74bde44224
|
fix(boot): 空卷播种改用 tar;compose 与工具脚本的几处加固
- entrypoint 首启播种:cp -a /var/www/lsky/* → tar(cp 的通配符不带顶层点文件,
以后新增顶层点文件会静默漏掉;tar 与同步分支行为一致,仍排除 .env)
- 版本标记改为最后写(它同时是 CI 的「播种完成」信号,必须等文件都落盘)
- Dockerfile 的 entrypoint 静态断言同步更新
- docker-compose.yaml:去掉硬编码 root 密码的 mysql:5.7 示例,改为注释掉的正规模板
(密码取环境变量、镜像不用已 EOL 的 5.7),默认说明 SQLite
- tools/vendor-upstream.sh:擦除 src/ 前加安全闸(src/ 有未提交改动就中止,
这是唯一不可逆操作,避免把 src/ 下的自有改动静默抹掉)
- README:回滚 tag 警示(别用 :911275c… 这类历史 tag)、CI 试构建与迁移守卫说明
|
2026-09-28 23:06:37 +08:00 |
|
mole404
|
565aa3fefc
|
feat: iOS 长按菜单修复 + 源码钉死在 911275c + GHCR 发布
问题:iOS WebKit 永远不派发 contextmenu(WebKit bug 213953),长按图片只弹系统
callout,导致"我的图片"页的自定义菜单在 iPhone/iPad 上完全不可用
(resources/js/context-js.js 的菜单只挂在 contextmenu 上)。
改动:
- overlay/context-js.js:纯增量补丁。新增仅 iOS 生效的长按分支(touchstart+500ms,
移动 >10px / 多指 / 短按都取消),复用原本的开菜单逻辑(beforeOpen/afterOpen 照旧);
注入 -webkit-touch-callout:none 压掉原生菜单(只作用于本库绑定的元素范围);
抬手吞掉 iOS 补发的 click,避免长按后误开图片预览;长按与 contextmenu 之间 700ms 去重。
判定只在 iPad/iPhone/iPod(含 iPadOS 伪装的 MacIntel+maxTouchPoints>1)为真,
Android / Windows / 真 Mac(含 M 系列,maxTouchPoints=0)一行新代码都不执行。
- overlay/images.blade.php:只给脚本加 ?v=ios-longpress,绕开 Safari 的启发式缓存
- Dockerfile:源码钉死 911275c(= 2024-04-29 那版线上镜像使用的 master HEAD);
基础镜像显式 bookworm;install-php-extensions 钉版本;构建期两处 md5 自证
- .github/workflows/build-image.yaml:替换上游的定时构建,改推 GHCR + 构建后真机自证
(核 md5、记录 PHP/扩展/Debian、真起容器 curl 安装页)
- test/:node + jsdom 行为测试(23 项,覆盖 iOS/iPad/Mac/Android/Windows 五类场景)
- README:补丁原理、跨平台隔离说明、升级/回滚步骤(含"换镜像不会更新已有卷代码"这个坑)
致谢与许可保留上游全部署名与 LICENSE(AGPL-3.0)。
|
2026-09-28 16:41:41 +08:00 |
|
HalcyonAzure
|
4bcd561feb
|
feat: Integrate build process into Dockerfile and enable multi-platform builds in GitHub Actions
|
2023-10-27 12:57:27 +08:00 |
|
HalcyonAzure
|
790880a9d2
|
update readme
|
2023-04-21 13:47:07 +08:00 |
|
HalcyonAzure
|
fa3cf6eabe
|
fix. replace readme
|
2023-04-21 13:30:48 +08:00 |
|
HalcyonAzure
|
3a62103ae3
|
feat. port specify
|
2023-04-21 11:41:46 +08:00 |
|
HalcyonAzure
|
2247ddf85a
|
修改部分注释
|
2022-07-21 00:44:56 +08:00 |
|
HalcyonAzure
|
acbd09b5e1
|
fix
|
2022-03-16 13:16:48 +08:00 |
|
HalcyonAzure
|
831814dfb9
|
add docker compose
|
2022-03-16 12:07:11 +08:00 |
|