mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-08-30 12:45:32 +08:00
在 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 扩展(框架作者需重建推送基础镜像)。
53 lines
1.8 KiB
Docker
53 lines
1.8 KiB
Docker
ARG BASE_IMAGE=ulthon/ulthon_admin-base:latest
|
||
FROM ${BASE_IMAGE}
|
||
|
||
# XHProf 扩展(若基础镜像已含则跳过)
|
||
RUN install-php-extensions xhprof
|
||
|
||
# 设置工作目录
|
||
WORKDIR /var/www/html
|
||
|
||
# 预先拷贝 composer 文件并安装依赖,利用 Docker 缓存
|
||
COPY composer.json composer.lock /var/www/html/
|
||
RUN composer install --no-dev --no-interaction --no-scripts --no-autoloader
|
||
|
||
# 将当前目录下的文件拷贝到工作目录
|
||
COPY . /var/www/html
|
||
|
||
# B-route: build context 为仓库根,模式配置在 source/stack/<mode>/source/docker/
|
||
RUN rm -rf /var/www/html/source/docker && ln -sf /var/www/html/source/stack/docker-serve/source/docker /var/www/html/source/docker
|
||
|
||
# 生成自动加载文件
|
||
RUN composer dump-autoload --optimize --no-dev --classmap-authoritative
|
||
|
||
# XHProf: 安装 php-profiler 到独立目录
|
||
RUN mkdir -p /opt/xhprof \
|
||
&& cd /opt/xhprof \
|
||
&& composer require perftools/php-profiler --no-dev
|
||
|
||
# XHProf: 复制采集器 bootstrap(全局配置,不受 bind mount 影响)
|
||
COPY source/docker/xhprof-bootstrap.php /opt/xhprof/xhprof-bootstrap.php
|
||
|
||
# XHProf: 配置 auto_prepend_file(zzz 前缀确保最后加载)
|
||
RUN echo 'auto_prepend_file = /opt/xhprof/xhprof-bootstrap.php' > /usr/local/etc/php/conf.d/zzz-xhprof.ini
|
||
|
||
VOLUME /var/www/html/runtime
|
||
VOLUME /var/www/html/public/storage
|
||
VOLUME /var/www/html/public/build
|
||
VOLUME /var/www/html/storage
|
||
|
||
# 挂载主目录,也可以选择直接挂载主目录,可以把上面的几个指定的目录删掉
|
||
# VOLUME ["/var/www/html"]
|
||
|
||
# 暴露 Nginx 端口
|
||
EXPOSE 8000
|
||
|
||
# B-route bind mount 模式:ENTRYPOINT 必须用完整路径(build 期 symlink 被 bind mount 覆盖)
|
||
RUN chmod +x /var/www/html/source/stack/docker-serve/source/docker/run.sh
|
||
|
||
# 启动 Nginx PHP 然后阻塞
|
||
ENTRYPOINT ["/bin/bash", "/var/www/html/source/stack/docker-serve/source/docker/run.sh"]
|
||
|
||
CMD ["server"]
|
||
|