Commit Graph

40 Commits

Author SHA1 Message Date
augushong
39d01d8175 fix(stack): dev-sync 镜像钉定 redis 扩展版本绕过 PECL 元数据故障 2026-08-15 14:21:23 +08:00
augushong
da388a8c4f feat(stack): XHProf 采集切换文件落盘并独立 xhgui 供应 2026-08-14 21:58:29 +08:00
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
7341268ceb fix(docker): run.sh 加 umask 000 + 预创建 runtime 子目录
bind mount 模式下 Dockerfile 的权限处理被宿主目录覆盖,
PHP 新建的子目录(runtime/cache/da/ 等)默认 755 导致 www-data 无法写入。
- 开头加 umask 000 让子进程创建的文件/目录全局可写
- mkdir 预创建 cache/log/temp/session/nginx 子目录
- docker-dev 和 docker-dev-sync 同步修复
2026-08-08 10:33:44 +08:00
augushong
ce191adfd8 feat(nginx-log): 4 个 stack 模板增加 log_format 与 access_log 配置(Docker 开箱即用) 2026-07-28 00:24:26 +08:00
augushong
4ebcea0669 chore(stack): 删除 docker-dev/docker-dev-sync 残留的 .docker-dev.env
B-route 下 .env 只在仓库根,bind mount 容器直接读根目录 .env,
模式目录不再需要独立的 env 文件
2026-07-23 22:17:18 +08:00
augushong
1620af9ff2 refactor(stack): 删除 stack.json,README 改为模板使用指南
- 删除 source/stack/stack.json(与 README 模式表重复,无实际用途)
- README 新增使用方式说明:可直接用,推荐复制后自定义
  (admin:update 只更新原始模板,不覆盖开发者副本)
- 同步清理 ulthon-deploy-environment.md 和
  ulthon-update-workflow SKILL.md 中对 stack.json 的引用
- ulthon-deploy-environment.md 补充记录义务规则:
  智能体应确认 project-dev-runtime-deploy.md 是否已记录运行方式,
  必须包含命令执行方式(容器内 vs 宿主机)
2026-07-23 22:01:38 +08:00
augushong
544604ebff fix(stack): 其余4个模式同步 bind mount 兼容修复
与 docker-dev(commit 5797885)保持一致的修复方案:
- run.sh 改为 SCRIPT_DIR 自动检测脚本所在目录
- Dockerfile ENTRYPOINT/chmod 改为完整路径
  /var/www/html/source/stack/<mode>/source/docker/run.sh
- 基础配置(nginx.conf/zz-phprun.ini/zz-phpfpm.conf)复制到各模式目录
- ln -s 改为 ln -sf(防止容器重启时 File exists)

docker-dev-sync 额外保留 sync.sh 调用逻辑(init + watch),
仅路径改为 \/sync.sh
2026-07-22 23:40:33 +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
0adc497818 docs(stack): restore docker-dev-sync as independent mode in docs 2026-07-22 22:47:46 +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
bed965a9b1 fix(stack): 修正构建上下文路径层级 ../../.. 并将 base-build 重命名为 author 2026-07-22 01:16:24 +08:00
augushong
62e72af93d feat(stack): B 路线构建上下文与卷配置方案(docker-serve/docker-dev/full) 2026-07-22 01:10:15 +08:00
augushong
560e0f6a5e docs(update-workflow): 以 B 路线检测替代 admin:stack:mode 2026-07-22 01:05:23 +08:00
augushong
bb602dccda chore(stack): 精简 stack.json 为纯元数据(schema v2) 2026-07-22 01:02:57 +08:00
augushong
50305dd29b ci(stack): 为 B 路线重写工作流并同步默认配置 2026-07-22 00:58:17 +08:00
augushong
9f5ffc34c4 docs(stack): 重写框架规则、stack README 与项目模板提示 2026-07-22 00:56:43 +08:00
augushong
c4fbd60bbc fix(timer): 修正定时器参数拼写 quit -> quiet(静默模式) 2026-06-02 20:09:37 +08:00
augushong
ddaa0ca5a9 feat(stack): 新增 docker-dev-sync 模式,优化 Windows 下 Docker 开发 I/O 性能
- 新增 source/stack/docker-dev-sync/ 模式目录
- 宿主代码映射到 /var/www/source(bind mount 中转)
- 容器内 rsync 定时同步到 /var/www/html(原生文件系统)
- vendor 由 Docker build 管理,不参与同步
- rsync 使用 --no-perms 避免保留 Windows 源文件权限
- 排除 docker-dev/、runtime/、.git/ 等无关目录
- SYNC_INTERVAL 环境变量可配置轮询间隔(默认 3 秒)
- 更新 stack.json 注册模式并声明 sync.sh 为托管文件
- 调整 CI 构建流程:先安装依赖再切换 stack 模式
2026-06-01 22:32:29 +08:00
augushong
f5d019b260 fix(ci): 调整流水线步骤顺序,composer install 移至 php think 命令之前
checkout 后没有 vendor 目录,导致 php think admin:stack:mode 报错。
将 composer install 抽为独立步骤并提前执行,确保 php think 命令可正常运行。
2026-05-27 22:59:24 +08:00
augushong
f49ca8d9cf fix(stack): 为 full 和 base-build 模式补充 source/docker/run.sh 2026-05-27 21:42:35 +08:00
augushong
5bb0e03e98 fix(stack): 修正流水线命令 action 为 use,加 -f 跳过确认交互 2026-05-27 20:58:50 +08:00
augushong
28337c9694 refactor(stack): default 模式改为 php think run,原 Docker 部署拆分为 docker-serve 模式
- source/stack/default/ 重命名为 docker-serve,保留 Dockerfile/docker-compose/CI/run.sh
- 新 default 模式仅提供 CI 文件(流水线中自动切换 docker-serve 再构建)
- 更新 stack.json 增加 docker-serve 模式声明
- 更新 README.md 同步模式说明
2026-05-27 20:49:13 +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
1c99e74c2e docs( docker-compose ): 注释掉docker-compose的name配置项
补充说明默认使用项目目录名作为项目名,仅在同名冲突时才需要手动配置name
2026-05-11 20:46:36 +08:00
augushong
a024a215fb chore(docker-dev): 修改日志通道为debug_mysql
更新docker开发环境的日志输出渠道配置,将日志从文件输出改为debug_mysql渠道
2026-05-11 20:44:44 +08:00
augushong
748307e826 chore(docker): 将默认服务端口从80更改为8000
更新所有Dockerfile、nginx配置、docker-compose文件和README中的端口引用,统一使用8000端口以避免与系统常用端口的冲突
2026-05-06 19:37:36 +08:00
augushong
383c8ddeca chore(docker): 为所有服务添加 host.docker.internal 主机映射
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 1m26s
使容器能够通过 host.docker.internal 访问宿主机服务,方便开发环境调试。
2026-05-03 21:01:19 +08:00
augushong
041eae9129 ci: 更新 CI 容器镜像版本
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 2m26s
将工作流中使用的 Docker 镜像更新至指定时间戳版本,以确保构建环境的一致性。
2026-05-03 20:28:43 +08:00
augushong
ab01fe6ca1 ci: 更新 Gitea Actions 使用的容器镜像
Some checks failed
build-and-deploy / 直传代码并部署到 Host15 (push) Failing after 2m21s
将构建和部署工作流中使用的容器镜像从 `ulthon/debian-php82-composer` 更新为 `ulthon/debian-php82-composer-node20-act`,以包含 Node.js 20 和 Act 工具,为工作流执行提供更完整的环境。
2026-05-03 10:03:37 +08:00
augushong
537f178fa5 ci: 更新部署配置以支持直接分发代码
Some checks failed
build-and-deploy / 直传代码并部署到 Host15 (push) Failing after 11s
- 将工作流容器镜像更换为包含 PHP 和 Composer 的专用镜像
- 在工作流中添加 Composer 依赖安装步骤,配置私有镜像源
- 修改所有 docker-compose.yaml 文件,将卷映射从多个子目录改为映射整个项目根目录,简化部署步骤
2026-05-01 20:45:04 +08:00
augushong
c423e2cb3d ci(deploy): 优化部署配置并增加健康检查
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 1m35s
- 将 Docker Compose 卷映射从挂载整个目录改为仅挂载必要的运行时目录,以提高部署安全性和性能
- 在 CI/CD 部署流程中添加容器状态检查和应用健康验证步骤,确保部署后应用正常运行
2026-05-01 19:13:38 +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
augushong
59c5222497 fix(Dockerfile): 修正容器入口点以使用bash执行脚本
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 50s
确保run.sh脚本在bash环境下执行,避免因缺少shebang或执行权限导致的潜在启动问题。统一所有Dockerfile中的ENTRYPOINT格式。
2026-04-25 00:06:34 +08:00
augushong
0b2b89c3ae docs(docker): 添加基础镜像 Dockerfile 使用说明文档
新增 README.md 文件,详细说明 Dockerfile.base 的作用、构建流程、与其他 Dockerfile 的关系以及维护注意事项。旨在为团队提供清晰的基础镜像构建和使用指南,提升 Docker 镜像构建的一致性和可维护性。
2026-04-24 23:42:47 +08:00
augushong
67bb1f0785 refactor(Dockerfile): 使用基础镜像重构 Dockerfile 以简化构建
- 移除重复的运行时环境配置和依赖安装步骤
- 通过 ARG 指令支持灵活的基础镜像配置
- 保持原有应用部署流程不变
2026-04-24 23:20:58 +08:00
augushong
b44fcfd86c feat(stack): 新增 stack 模式管理功能
- 新增 `php think admin:stack:mode` 命令,支持 list/use/current/rollback 操作
- 新增 StackModeService 服务,负责模式切换、备份与回滚逻辑
- 在 source/stack/ 目录下添加 default、full、base-build 三种模式的配置文件
- 更新 UlthonAdminService 以注册新的命令行工具
2026-04-24 23:20:13 +08:00