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: