# Этап 1: PHP зависимости FROM php:8.3-fpm-bookworm AS phpbuild # Установка системных зависимостей 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 # Установка Composer COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer WORKDIR /var/www # Копирование файлов для установки зависимостей COPY composer.json composer.lock ./ # Установка PHP зависимостей RUN composer install \ --no-progress \ --no-scripts \ --prefer-dist \ --optimize-autoloader \ --apcu-autoloader # Копируем исходный код COPY . . # Установка прав RUN chown -R www-data:www-data /var/www && \ chmod -R 775 /var/www/storage /var/www/bootstrap/cache # Этап 2: Сборка фронтенда (Inertia + Vue 3) FROM node:20-bookworm-slim AS jsbuild # Установка дополнительных зависимостей для сборки RUN apt-get update && apt-get install -y \ python3 \ make \ g++ \ && rm -rf /var/lib/apt/lists/* WORKDIR /var/www # Копируем зависимости Node.js COPY package.json package-lock.json* ./ # Установка зависимостей Node.js RUN npm ci \ --no-audit \ --progress=false # Копируем файлы для сборки фронтенда COPY vite.config.js ./ COPY resources/js ./resources/js/ COPY resources/css ./resources/css/ # Сборка ассетов Vite RUN npm run build # Этап 3: Финальный образ FROM php:8.3-fpm-bookworm # Установка runtime зависимостей RUN apt-get update && apt-get install -y \ libzip4 \ libxml2 \ libicu72 \ libonig5 \ libpng16-16 \ libjpeg62-turbo \ libfreetype6 \ libwebp7 \ libpq5 \ libxslt1.1 \ libexif12 \ libffi8 \ supervisor \ cron \ && rm -rf /var/lib/apt/lists/* # Копируем 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/ # Создаем пользователя RUN groupadd -g 1000 www && \ useradd -u 1000 -ms /bin/bash -g www www # Копируем конфигурации COPY docker/nginx.conf /etc/nginx/nginx.conf COPY docker/app.conf /etc/nginx/conf.d/default.conf #COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf WORKDIR /var/www # Копируем приложение COPY --chown=www:www --from=phpbuild /var/www . COPY --chown=www:www --from=jsbuild /var/www/public/build ./public/build COPY --chown=www:www --from=jsbuild /var/www/node_modules ./node_modules # Настройка прав и оптимизация Laravel RUN mkdir -p /var/log/supervisor && \ chown -R www:www /var/www /var/log/supervisor && \ chmod -R 775 /var/www/storage /var/www/bootstrap/cache # Создание ссылки на Storage RUN php artisan storage:link USER www EXPOSE 9000 CMD ["php-fpm"]