From d93301ff8b4b679ce950a0008b07b59871513e5f Mon Sep 17 00:00:00 2001 From: brusnitsyn Date: Fri, 27 Feb 2026 15:36:55 +0900 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 254 ++++++++++++++++++++--------------------------------- 1 file changed, 96 insertions(+), 158 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1ba79e8..7d76742 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,93 +1,63 @@ -# Этап 1: PHP зависимости -FROM dh-mirror.gitverse.ru/php:8.3-fpm AS phpbuild +# Этап 1: Сборка PHP зависимостей +FROM webdevops/php:8.3-alpine AS php-build -# Установка системных зависимостей -RUN apt-get update && apt-get install -y \ +ENV WEB_DOCUMENT_ROOT=/var/www/html/public +ENV PHP_DATE_TIMEZONE=UTC +ENV PHP_DISPLAY_ERRORS=0 +ENV PHP_MEMORY_LIMIT=512M +ENV PHP_MAX_EXECUTION_TIME=300 +ENV PHP_OPCACHE_ENABLE=1 +ENV PHP_OPCACHE_MEMORY_CONSUMPTION=256 + +# Проверяем установленные расширения (для отладки) +RUN php -m && \ + php -i | grep gd && \ + php -i | grep redis + +# Установка дополнительных системных зависимостей, если нужно +RUN apk update && apk add --no-cache \ git \ - curl \ - wget \ unzip \ + # Для сборки некоторых зависимостей Composer libzip-dev \ - libxml2-dev \ - libicu-dev \ - libonig-dev \ - libpng-dev \ - libjpeg-dev \ - libfreetype6-dev \ - libwebp-dev \ - libpq-dev \ - libxslt1-dev \ - libexif-dev \ - libffi-dev \ - pkg-config \ - libssl-dev \ - && rm -rf /var/lib/apt/lists/* - -# Установка PHP расширений -RUN docker-php-ext-configure gd \ - --with-freetype \ - --with-jpeg \ - --with-webp \ - && docker-php-ext-install -j$(nproc) \ - bcmath \ - intl \ - mbstring \ - zip \ - opcache \ - pdo \ - pdo_mysql \ - pdo_pgsql \ - gd \ - exif \ - sockets \ - xsl \ - ffi \ - pcntl - -# Установка Redis расширения -RUN pecl install redis && docker-php-ext-enable redis - -# Настройка opcache для production -RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.memory_consumption=256" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.interned_strings_buffer=32" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.max_accelerated_files=32531" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/opcache.ini + oniguruma-dev \ + && docker-run-bootstrap # Установка Composer -COPY --from=dh-mirror.gitverse.ru/composer:2.7 /usr/bin/composer /usr/bin/composer +COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer -WORKDIR /var/www +WORKDIR /var/www/html -# Копирование файлов для установки зависимостей +# Копируем только файлы зависимостей (для лучшего кэширования слоев) COPY composer.json composer.lock ./ -# Установка PHP зависимостей +# Установка PHP зависимостей (NO DEV для production) RUN composer install \ + --no-interaction \ --no-progress \ --no-scripts \ --prefer-dist \ --optimize-autoloader \ - --apcu-autoloader + --apcu-autoloader \ + --no-dev -# Копируем исходный код +# Копируем остальной код COPY . . -# Установка прав -RUN chown -R www-data:www-data /var/www && \ - chmod -R 775 /var/www/storage /var/www/bootstrap/cache +# Выполняем скрипты post-install +#RUN composer run-script post-install-cmd -# Этап 2: Сборка фронтенда (Inertia + Vue 3) -FROM dh-mirror.gitverse.ru/node:20 AS jsbuild +# Оптимизируем автозагрузчик +RUN composer dump-autoload --optimize -# Установка дополнительных зависимостей для сборки -RUN apt-get update && apt-get install -y \ - python3 \ - make \ - g++ \ - && rm -rf /var/lib/apt/lists/* +# Устанавливаем права +RUN chown -R application:application /var/www/html && \ + chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache -WORKDIR /var/www +# Этап 2: Сборка фронтенда +FROM node:20-alpine AS node-build + +WORKDIR /var/www/html # Копируем зависимости Node.js COPY package.json package-lock.json* ./ @@ -99,109 +69,77 @@ RUN npm ci \ # Копируем файлы для сборки фронтенда COPY vite.config.js ./ -COPY resources/js ./resources/js/ -COPY resources/css ./resources/css/ +COPY resources/ ./resources/ -# Сборка ассетов Vite +# Сборка ассетов RUN npm run build -# Этап 3: Финальный образ -FROM dh-mirror.gitverse.ru/php:8.3-fpm +# Этап 3: Финальный production образ +FROM webdevops/php-nginx:8.3-alpine -# Установка runtime зависимостей -RUN apt-get update && apt-get install -y \ - libxml2 \ - libonig5 \ - libpng16-16 \ - libjpeg62-turbo \ - libfreetype6 \ - libwebp7 \ - libpq5 \ - libxslt1.1 \ - libexif12 \ - libffi8 \ +# Production настройки +ENV WEB_DOCUMENT_ROOT=/var/www/html/public +ENV PHP_DATE_TIMEZONE=UTC +ENV PHP_DISPLAY_ERRORS=0 +ENV PHP_MEMORY_LIMIT=512M +ENV PHP_MAX_EXECUTION_TIME=300 +ENV PHP_POST_MAX_SIZE=100M +ENV PHP_UPLOAD_MAX_FILESIZE=100M +ENV PHP_OPCACHE_ENABLE=1 +ENV PHP_OPCACHE_MEMORY_CONSUMPTION=256 +ENV PHP_OPCACHE_MAX_ACCELERATED_FILES=32531 +ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 +ENV NGINX_WORKER_PROCESSES=auto +ENV NGINX_WORKER_CONNECTIONS=1024 + +# Включаем дополнительные сервисы +#RUN docker-service enable cron && \ +# docker-service enable supervisor + +# Устанавливаем дополнительные пакеты, если нужны +RUN apk update && apk add --no-cache \ supervisor \ - nginx \ - cron \ - && rm -rf /var/lib/apt/lists/* - -# Установка системных зависимостей -RUN apt-get update && apt-get install -y \ - git \ - curl \ - wget \ - unzip \ - libzip-dev \ - libxml2-dev \ - libicu-dev \ - libonig-dev \ - libpng-dev \ - libjpeg-dev \ - libfreetype6-dev \ - libwebp-dev \ - libpq-dev \ - libxslt1-dev \ - libexif-dev \ - libffi-dev \ - pkg-config \ - libssl-dev \ - && rm -rf /var/lib/apt/lists/* - -# Установка PHP расширений -RUN docker-php-ext-configure gd \ - --with-freetype \ - --with-jpeg \ - --with-webp \ - && docker-php-ext-install -j$(nproc) \ - bcmath \ - intl \ - mbstring \ - zip \ - opcache \ - pdo \ - pdo_mysql \ - pdo_pgsql \ - gd \ - exif \ - sockets \ - xsl \ - ffi \ - pcntl - -# Установка Redis расширения -RUN pecl install redis && docker-php-ext-enable redis - -# Настройка opcache для production -RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.memory_consumption=256" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.interned_strings_buffer=32" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.max_accelerated_files=32531" >> /usr/local/etc/php/conf.d/opcache.ini && \ - echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/opcache.ini - -# Копируем PHP расширения из первого этапа -#COPY --from=phpbuild /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ -#COPY --from=phpbuild /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -#COPY --from=phpbuild /usr/local/bin/ /usr/local/bin/ + # Для планировщика Laravel + dcron \ + # Дополнительные утилиты + nano \ + htop \ + && docker-run-bootstrap # Копируем конфигурации COPY docker/nginx.conf /etc/nginx/nginx.conf COPY docker/app.conf /etc/nginx/conf.d/default.conf COPY docker/supervisord.conf /etc/supervisor/supervisord.conf -WORKDIR /var/www +WORKDIR /var/www/html -# Копируем приложение -COPY --chown=www-data:www-data --from=phpbuild /var/www . -COPY --chown=www-data:www-data --from=jsbuild /var/www/public/build ./public/build -COPY --chown=www-data:www-data --from=jsbuild /var/www/node_modules ./node_modules +# Копируем приложение из этапов сборки +COPY --chown=application:application --from=php-build /var/www/html . +COPY --chown=application:application --from=node-build /var/www/html/public/build ./public/build -# Настройка прав и оптимизация Laravel -RUN mkdir -p /var/log/supervisor && \ - chown -R www-data:www-data /var/www /var/log/supervisor && \ - chmod -R 775 /var/www/storage /var/www/bootstrap/cache +# Настраиваем права +RUN chown -R application:application /var/www/html && \ + chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache -# Создание ссылки на Storage +# Создаем символические ссылки RUN php artisan storage:link +# Кэшируем конфигурации Laravel для production +#RUN php artisan config:cache && \ +# php artisan route:cache && \ +# php artisan view:cache + +# Удаляем все тестовые файлы PHP (для docker-squash) +# https://github.com/shinsenter/docker-squash +RUN rm -rf /usr/src/php \ + && rm -f /usr/src/php.tar.xz 2>/dev/null || true \ + && rm -rf /usr/local/lib/php/test \ + && rm -rf /usr/local/lib/php/doc + +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD curl -f http://localhost/health || exit 1 + EXPOSE 80 -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] + +CMD ["supervisord", "-c", "/etc/supervisor.d/supervisord.conf"]