Files
cloud-chip.cn/.workbuddy/memory/2026-08-08.md
T
2026-08-08 22:47:07 +08:00

32 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-08-08
## 调试:Gitea webhook "无响应"
- 现象:Gitea 推送 webhook 测试无响应;手动部署(mes2 链路)正常。
- 架构关键事实:push-to-deploy 的 webhook 接收器是**独立服务**,部署在子域 `webhook.cloud-chip.cn`IP 47.107.30.116),**不属于**本 Laravel 项目(cloud-chip.cn 主站);本工程的 `deploy.sh` 只是被叫醒后 `git pull` 的执行体。
- 实测结论(2026-08-08):DNS/TLS/TCP443 全通,但 `/``/hook` 任意路径均 0 字节超时 → Nginx 活着、upstreamwebhook 应用)挂掉/卡死,导致"无响应"。根因在服务端应用层,与网络/证书/本工程无关。
- 修复方向(未动手,用户选"只诊断"):在 47.107.30.116 上查 webhook 服务进程/Nginx error.log/上游端口,重启服务;接收器应改为后台执行 deploy.sh 并立即回 200,避免同步阻塞。
- 安全提醒:Gitea webhook URL 里的 access_key 已暴露在聊天中,建议轮换。
## 修复:`config/database.php` 弃用告警(PHP 8.5
- 现象:PHP 8.5 报 `Deprecated: Constant PDO::MYSQL_ATTR_SSL_CA is deprecated, use Pdo\Mysql::ATTR_SSL_CA instead`config/database.php:36mysql 连接的 `options`)。
- 修复:改为 `(\class_exists(\Pdo\Mysql::class) ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA)`。symfony/polyfill-php84 在 8.4 以下提供 `Pdo\Mysql`,故本地 8.3 与线上 8.5 均兼容。
- 验证:`php -l` 通过;本地 8.3 `class_exists` 为 true`Pdo\Mysql::ATTR_SSL_CA` = 1009(与旧常量同值)。app 代码中仅此一处使用 `PDO::MYSQL_*`
- 部署提醒:上传后若 config 已缓存,需 `php artisan config:clear`(或重新 `config:cache`)方生效。
## webhook 接收器架构(关键,已查清)
- `webhook.cloud-chip.cn` 是宝塔站点,文档根 /www/wwwroot/webhook.cloud-chip.cn,启用「反向代理」。
- 反代规则文件:/www/server/panel/vhost/nginx/proxy/webhook.cloud-chip.cn/2ff80e9159b517704ce43f0f74e6e247_webhook.cloud-chip.cn.conf,内容 `proxy_pass https://47.107.30.116:8698;`
- 8698 = BT-Panel(宝塔面板主进程),不是 webhook 接收器 → 流量被送进面板,导致 Gitea 测试「无响应」。
- 真正的接收器是**宝塔 WebHook 插件**URL 格式 access_key+param 可印证),默认端口 8443;当前未运行(ss 无 8443、无 hook 进程)。
- 修复方向:安装/启动宝塔 WebHook 插件 → 反代目标改为 http://127.0.0.1:<插件端口> → nginx -s reload → 插件内自测 200 后再去 Gitea 测试。
- 注意:真正的站点 vhost 在 /www/server/panel/vhost/nginx/(不是空的 /www/server/nginx/conf/vhost/)。
## deploy.sh 增强 + 权限建议(cloud-chip.cn 生产)
- deploy.sh 已加 `php artisan config:clear` + `config:cache`git pull 之后),避免改 config/* 后 Laravel 仍读旧缓存。config:cache 失败仅告警不中断。已由用户手动推送。
- 权限问题:生产服务器项目文件目前全归 root。要点:
- 先确认 PHP-FPM 运行用户(宝塔默认 `www`):`grep -r "^user" /www/server/php/*/etc/php-fpm.conf`
- 若 PHP-FPM 为 www:需 `chown -R www:www /www/wwwroot/cloud-chip.cn`,否则 storage/bootstrap/cache 写不进(日志/缓存/上传 Permission denied)。目录 755、文件 644,可写目录 775.env 限 640。
- 若 PHP-FPM 以 root 跑:当前 root 归属"能用"但 Web 进程以 root 运行不安全,仍建议改 www 并改归属。
- 与本次修复关系:弃用修复不依赖权限(config 文件 root 644 可被 Web 读取);关键是 deploy.sh 的 config:clear 让修复生效。权限是独立健壮性项,建议顺手做。
- deploy.sh 中 config:cache 若以 root 运行会生成 root 所有的 config.php;因已先 config:clear 删除缓存,Laravel 直接读 config 文件,www 可读即可,无需纠结归属。