提单:dev2 · 2026-08-15 · 影响:批 B 微信支付联调卡住,不影响其他业务
批 B 代码已上 test(MR #392 · 流水线 run#140 ✅),容器已按新 compose 重建、挂载已生效,
但 /opt/tongban-settlement/deploy/wxpay/ 这个宿主目录里没有那两个 PEM,服务读不到证书。
$ curl https://test.tongban.love/api/wxpay/self-check
{"ok":false,"stage":"request",
"detail":"微信支付证书读取失败:[Errno 2] No such file or directory: '/app/wxpay/apiclient_key.pem'"}
端点能返回 = nginx 转发对了、结算服务在跑新代码,链路没问题,只差文件。
# 1. 先看你之前把 PEM 放哪了
sudo find /opt -name 'apiclient_key.pem' -o -name 'pub_key.pem' 2>/dev/null
# 2. 挪到 compose 真正挂载的那个目录
sudo mkdir -p /opt/tongban-settlement/deploy/wxpay
sudo mv <上一步找到的路径>/apiclient_key.pem /opt/tongban-settlement/deploy/wxpay/
sudo mv <上一步找到的路径>/pub_key.pem /opt/tongban-settlement/deploy/wxpay/
sudo chmod 700 /opt/tongban-settlement/deploy/wxpay
sudo chmod 600 /opt/tongban-settlement/deploy/wxpay/*.pem
# 3. 自证容器里看得见(不用重启容器 —— 目录是 bind mount,放进去就可见)
sudo docker exec settlement-api ls -l /app/wxpay
# 期望看到 apiclient_key.pem 和 pub_key.pem 两个文件
settlement/deploy/auto-update.sh:20-21 → SRC_DIR=/opt/tongban-settlement,/opt/tongban-settlement/deploy/docker-compose.prod.ymlsettlement/deploy/docker-compose.prod.yml:44 → - ./wxpay:/app/wxpay:ro./ 相对compose 文件所在目录解析 ⇒ 宿主侧就是/opt/tongban-settlement/deploy/wxpay/第 3 步能列出两个文件就告诉 dev2,我再 curl 一次自检端点验密钥配对是否正确
(返 ok:true = 商户号/证书/序列号/公钥全对)。该端点不花钱、不产生订单。
注意自检结果有 60 秒缓存,我会等过缓存再打。
git pull 不会覆盖或删除它们