69 lines
No EOL
1.8 KiB
Text
69 lines
No EOL
1.8 KiB
Text
# Build stage
|
|
FROM php:8.3-fpm-alpine AS builder
|
|
|
|
# Install system dependencies
|
|
RUN apk add --no-cache \
|
|
libpng-dev \
|
|
oniguruma-dev \
|
|
libxml2-dev \
|
|
zip \
|
|
unzip
|
|
|
|
# Install PHP extensions
|
|
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd opcache
|
|
|
|
# Install Composer
|
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
# Copy composer files
|
|
COPY composer.json composer.lock ./
|
|
|
|
# Install dependencies (no dev)
|
|
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
|
|
|
|
# Copy application
|
|
COPY . .
|
|
|
|
# Generate optimized autoloader
|
|
RUN composer dump-autoload --optimize --classmap-authoritative
|
|
|
|
# Production stage
|
|
FROM php:8.3-fpm-alpine
|
|
|
|
# Install runtime dependencies
|
|
RUN apk add --no-cache \
|
|
libpng-dev \
|
|
oniguruma-dev \
|
|
libxml2-dev \
|
|
nginx \
|
|
supervisor
|
|
|
|
# Install PHP extensions
|
|
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd opcache
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
# Copy application from builder
|
|
COPY --from=builder /var/www/html .
|
|
|
|
# Copy nginx config
|
|
COPY docker/nginx/backend.conf /etc/nginx/http.d/default.conf
|
|
|
|
# Copy supervisord config
|
|
COPY docker/backend/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
|
|
# Configure PHP-FPM
|
|
RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.memory_consumption=128" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.max_accelerated_files=10000" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/opcache.ini
|
|
|
|
# Set permissions
|
|
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
|
|
|
|
# Expose port 80
|
|
EXPOSE 80
|
|
|
|
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] |