Commit Graph

9 Commits

Author SHA1 Message Date
augushong
e0e2580646 feat(stack): 所有 Docker 模式集成 XHProf 性能分析
在 docker-dev/docker-dev-sync/docker-serve/full 四个模式中集成 XHProf
性能分析能力,默认不启用(--profile xhprof 按需开启),零侵入不改
业务代码和 run.sh。

核心组件:
- source/docker/xhprof-bootstrap.php: 采集器初始化(auto_prepend_file)
- source/docker/xhgui-config.php: XHGui 认证配置(Basic Auth)+ PDO 存储
- 各 Dockerfile: 安装 PECL xhprof 扩展 + php-profiler 到 /opt/xhprof/
- 各 docker-compose: 新增 xhgui 服务(profiles: xhprof),端口 8142

存储方案:PDO MySQL(复用现有 MySQL),避免 MongoDB PHP 驱动兼容性问题。
docker-dev/docker-dev-sync 开箱即用;docker-serve/full 需配置 XHGUI_PDO_DSN。

认证:HTTP Basic Auth,默认 admin/xhgui123,环境变量可覆盖。
采集控制:XHPROF_ENABLE 环境变量 + cookie _profiler 强制触发 + 1% 采样。
Dockerfile.base 同步新增 xhprof 扩展(框架作者需重建推送基础镜像)。
2026-08-09 09:07:10 +08:00
augushong
5797885f3d fix(stack): 修复 bind mount 遮蔽 build 期 symlink 导致容器启动失败
B-route 下 build context=仓库根 + bind mount /var/www/html 有两个问题:

1. ENTRYPOINT 引用 /var/www/html/source/docker/run.sh 在运行期找不到:
   build 期的 symlink 被 bind mount 完全覆盖,容器看到的是宿主机
   仓库根的 source/docker/(只有 nginx.conf/zz-phprun.ini/zz-phpfpm.conf,
   没有 run.sh)

2. 模式目录 source/docker/ 不自包含:
   只有 run.sh/zzz-dev.ini/zzz-xdebug.ini,缺基础配置

修复(docker-dev 模式):
- run.sh 改为用 SCRIPT_DIR 自动检测脚本所在目录
- Dockerfile ENTRYPOINT/chmod 改为完整路径
  /var/www/html/source/stack/docker-dev/source/docker/run.sh
- 基础配置(nginx.conf/zz-phprun.ini/zz-phpfpm.conf)复制到模式目录
  使其自包含

验证:docker compose build 通过,up 容器稳定运行,
nginx + PHP-FPM 启动成功,ThinkPHP CLI 正常(v8.1.4)
2026-07-22 23:29:50 +08:00
augushong
6bc661117c fix(stack): 修复 B-route 下所有 Dockerfile COPY 路径与 build context 不匹配
B-route 把 build context 改为仓库根后,Dockerfile 中的 COPY source/docker/...
和 chmod/ENTRYPOINT 引用 /var/www/html/source/docker/ 全部失效。

根因:
- 仓库根有全局 source/docker/(仅 nginx.conf/zz-phprun.ini/zz-phpfpm.conf 基础配置)
- 模式专属配置(run.sh、zzz-dev.ini、zzz-xdebug.ini 等)在 source/stack/<mode>/source/docker/
- COPY . 把全局 source/docker/ 复制进容器,但缺少模式专属文件
- 旧 COPY source/docker/zzz-dev.ini 在 context=仓库根时找不到文件

修复(所有 5 个模式统一):
- 每个 Dockerfile 在 COPY . 后加 rm -rf + ln -sf symlink,
  让 /var/www/html/source/docker 指向模式专属配置目录
- COPY ini 文件路径改为完整的 source/stack/<mode>/source/docker/...
- .dockerignore 去掉 source/stack/ 排除(配置文件仅几 KB,
  但 COPY 需要这些文件在 build context 中)
- .dockerignore 加 docker-dev/docker-dev-data 排除(旧数据残留)
2026-07-22 23:18:16 +08:00
augushong
0a04181d12 revert(stack): un-merge docker-dev-sync, restore as independent B-route directory
docker-dev 清理合并残留:去掉 rsync/mkdir/chmod、删 ulthon_admin_sync 服务、
删 .env(COMPOSE_PROFILES)、删 sync.sh、删 .dockerignore、去 SYNC_INTERVAL。
docker-dev-sync 恢复独立目录并 B-route 化(context: ../../..)。
两个模式各自独立、各自完整。
2026-07-22 22:42:58 +08:00
augushong
28576def0a feat(stack): 合并 docker-dev-sync 到 docker-dev 配置,统一 Dockerfile 2026-07-22 01:27:52 +08:00
augushong
218810a7db refactor: 迁移根目录 docker/ 到 source/docker/,更新所有路径引用
- 将 docker/{nginx.conf,run.sh,zz-phprun.ini,zz-phpfpm.conf} 移动到 source/docker/
- 更新所有 Dockerfile 中 /var/www/html/docker/ -> /var/www/html/source/docker/
- 更新 stack.json managed_files 路径前缀
- 重组 stack 模式目录结构 docker/ -> source/docker/
- 更新 source/README.md 目录描述
- 更新 AdminUpdateServiceBase.php 可选文件前缀
2026-05-12 23:13:47 +08:00
augushong
748307e826 chore(docker): 将默认服务端口从80更改为8000
更新所有Dockerfile、nginx配置、docker-compose文件和README中的端口引用,统一使用8000端口以避免与系统常用端口的冲突
2026-05-06 19:37:36 +08:00
augushong
efc335e78f feat(stack): 新增 docker-dev 开发模式并自动清理文件
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 1m13s
- 新增 docker-dev 部署模式,提供包含 nginx+php-fpm、MySQL、Redis、phpMyAdmin 和 Xdebug 的完整 Docker 开发环境
- 在 StackModeService 中重写 applyMode 方法,切换模式时自动删除目标模式中不存在的已管理文件
- 新增 .docker-dev.env 配置文件并纳入 managed_files 管理,切换模式时自动复制或删除
2026-04-30 22:38:22 +08:00
augushong
58a9002c3a feat(stack): 新增 docker-dev 开发模式
- 新增 source/stack/docker-dev/Dockerfile: 基于 full 模式 + Xdebug + 开发 PHP 配置
- 新增 source/stack/docker-dev/docker-compose.yaml: 4 服务编排 (app/mysql/redis/phpmyadmin)
- 新增 source/stack/docker-dev/.docker-dev.env: 开发环境配置模板 (HOSTNAME=mysql, HOSTPORT=3306)
- 更新 source/stack/stack.json: 注册 docker-dev 模式, managed_files 增加 .docker-dev.env
- 更新 .gitignore: 排除 /docker-dev/ 数据目录
2026-04-29 23:35:27 +08:00