# Этап 1: Сборка PHP зависимостей FROM webdevops/php:8.3-alpine AS php-build 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 \ unzip \ # Для сборки некоторых зависимостей Composer libzip-dev \ oniguruma-dev \ && docker-run-bootstrap # Установка Composer COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer WORKDIR /var/www/html # Копируем только файлы зависимостей (для лучшего кэширования слоев) COPY composer.json composer.lock ./ # Установка PHP зависимостей (NO DEV для production) RUN composer install \ --no-interaction \ --no-progress \ --no-scripts \ --prefer-dist \ --optimize-autoloader \ --apcu-autoloader \ --no-dev # Копируем остальной код COPY . . # Выполняем скрипты post-install #RUN composer run-script post-install-cmd # Оптимизируем автозагрузчик RUN composer dump-autoload --optimize # Устанавливаем права RUN chown -R application:application /var/www/html && \ chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache # Этап 2: Сборка фронтенда FROM node:20-alpine AS node-build WORKDIR /var/www/html # Копируем зависимости Node.js COPY package.json package-lock.json* ./ # Установка зависимостей Node.js RUN npm ci \ --no-audit \ --progress=false # Копируем файлы для сборки фронтенда COPY vite.config.js ./ COPY resources/ ./resources/ # Сборка ассетов RUN npm run build # Этап 3: Финальный production образ FROM webdevops/php-nginx:8.3-alpine # 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 \ # Для планировщика 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/html # Копируем приложение из этапов сборки COPY --chown=application:application --from=php-build /var/www/html . COPY --chown=application:application --from=node-build /var/www/html/public/build ./public/build # Настраиваем права RUN chown -R application:application /var/www/html && \ chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache # Создаем символические ссылки RUN php artisan storage:link # Кэшируем конфигурации Laravel для production RUN php artisan config:cache && \ php artisan route:cache && \ php artisan view:cache # Проверяем расширения в финальном образе RUN php -m | grep -E "(redis|gd|pdo_mysql|pdo_pgsql|zip|intl|opcache)" && \ echo "✅ Все необходимые расширения установлены" # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/health || exit 1 EXPOSE 80 CMD ["supervisord", "-c", "/etc/supervisor.d/supervisord.conf"]