trip-planner/docker/backend/Dockerfile.prod

69 lines
1.8 KiB
Text
Raw Normal View History

2025-09-26 01:13:44 +02:00
# 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"]