FROM php:8.2-fpm-bookworm RUN rm -rf /etc/apt/sources.list.d/* \ && echo "deb http://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list \ && echo "deb http://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list \ && echo "deb http://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list RUN apt-get update # Install nginx and rsync (for sync mechanism) RUN apt-get install -y nginx rsync ADD --chmod=0755 https://nexus.hl7.top:1243/repository/github-raw-proxy/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ # Configure proxy RUN sed -i 's|aomedia.googlesource.com|nexus.hl7.top:1243/repository/raw-aomedia.googlesource.com|g' /usr/local/bin/install-php-extensions RUN sed -i 's|chromium.googlesource.com|nexus.hl7.top:1243/repository/raw-chromium.googlesource.com|g' /usr/local/bin/install-php-extensions RUN sed -i 's|https://github.com|https://nexus.hl7.top:1243/repository/github-raw-proxy|g' /usr/local/bin/install-php-extensions RUN install-php-extensions pdo_mysql RUN install-php-extensions gd RUN install-php-extensions fileinfo RUN install-php-extensions opcache RUN install-php-extensions redis-6.2.0 RUN install-php-extensions event RUN install-php-extensions imagick RUN install-php-extensions zip RUN install-php-extensions pcntl RUN install-php-extensions xdebug RUN install-php-extensions xhprof # Clean default Nginx config RUN rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default # Install other dependencies # RUN apt-get install -y ffmpeg # RUN apt-get install -y libreoffice # RUN apt-get install -y redis-server # RUN apt-get install -y git # Set working directory WORKDIR /var/www/html # Install Composer COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer RUN chmod +x /usr/local/bin/composer RUN composer config -g repos.packagist composer https://nexus.hl7.top:1243/repository/composer-proxy/ # Set working directory WORKDIR /var/www/html # Pre-copy composer files and install dependencies (with dev packages) COPY composer.json composer.lock /var/www/html/ RUN composer install --no-interaction --no-scripts # Copy all files to working directory COPY . /var/www/html # B-route: build context 为仓库根,模式配置在 source/stack//source/docker/ RUN rm -rf /var/www/html/source/docker && ln -sf /var/www/html/source/stack/docker-dev-sync/source/docker /var/www/html/source/docker # Generate autoloader (without --no-dev optimizations) RUN composer dump-autoload # XHProf: 安装 php-profiler 到独立目录(避免 rsync 同步覆盖) RUN mkdir -p /opt/xhprof \ && cd /opt/xhprof \ && composer require perftools/php-profiler # XHProf: 复制采集器 bootstrap(全局配置,不受 rsync 同步影响) 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 # Internal install composer and dependencies, comment out if not needed # RUN install-php-extensions @composer # Dev mode PHP config (overrides zz-phprun.ini) COPY source/stack/docker-dev-sync/source/docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini COPY source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini # Create source mount point (host code staging area) RUN mkdir -p /var/www/source VOLUME /var/www/html/runtime VOLUME /var/www/html/public/storage VOLUME /var/www/html/public/build VOLUME /var/www/html/storage # Expose Nginx port EXPOSE 8000 # B-route bind mount 模式:ENTRYPOINT 必须用完整路径(build 期 symlink 被 bind mount 覆盖) RUN chmod +x /var/www/html/source/stack/docker-dev-sync/source/docker/sync.sh RUN chmod +x /var/www/html/source/stack/docker-dev-sync/source/docker/run.sh # Start Nginx and PHP-FPM ENTRYPOINT ["/bin/bash", "/var/www/html/source/stack/docker-dev-sync/source/docker/run.sh"] CMD ["server"]