Files
onboard/Dockerfile

143 lines
4.4 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Этап 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"]