FamilyBook 部署链路:补 upload_stage.php 白名单 + 暂存目录权限准备(第 20 批收尾)

第 20 批(c3d00ad)的功能代码已在仓库里;这次是把**部署链路**补齐 ——
本轮部署实测连续踩到两个「代码没错、环境/流程没跟上」的坑:

① **打包白名单漏了 upload_stage.php**
   它是站点根下的独立入口(与 media.php 同类,不在 app/ 也不在 templates/),
   打包白名单是手写的,漏了它 → 部署脚本静态断言直接红「缺 upload_stage.php」,
   线上表现为"拖文件没反应"(比整页坏更难查)。
   → `familybook_push.sh` 的 tar 列表与"必需文件"清单都加上它。

② **`uploads/` 的 ACL mask 把 www 的写权限压掉了**
   · 站点根 `uploads/` 属主是 **family**,而 **PHP-FPM 跑在 www** 下(`ps` 实测);
   · `getfacl` 显示 `user:www:rwx  #effective:r-x`,`mask::r-x` ——
     www **建不了新子目录**;
   · 而 `StagedUpload::stage()` 第一步就是 `mkdir uploads/_staging/<token>`
     → 建不出来 = 拖动上传**静默失败**(前端只看到"上传失败")。
   → 部署脚本「6. 权限整理」段新增:放开 uploads 的 mask + 预建 `_staging/`
      + 给它 u:www:rwx 与默认 ACL。
   ⚠️ 同一处还踩了个"改了等于没改"的细节:**加完 setfacl 又 chmod 755** ——
      `chmod` 会重算 ACL 的 mask(755 → r-x),刚放开的 www 写权限立刻被压回去。
      已去掉 chmod,权限点全交给 setfacl。

验证:线上以 **www 身份**(临时探针页,用完即删并复验 404)实测
`uploads/_staging` 可 mkdir + 可写;部署脚本静态断言段本地空跑 305 条全过;
线上部署 19/19 自检全过。
This commit is contained in:
2026-10-06 03:51:47 +08:00
parent c3d00ad66a
commit ea99968035

Diff Content Not Available