81 lines
2.6 KiB
Docker
Executable File
81 lines
2.6 KiB
Docker
Executable File
# Build stage
|
|
FROM php:5.6-fpm-alpine as composer
|
|
|
|
# Install system dependencies and PHP extensions required for Composer
|
|
RUN apk add --no-cache \
|
|
git \
|
|
curl \
|
|
zip \
|
|
unzip \
|
|
libmcrypt \
|
|
libmcrypt-dev \
|
|
zlib-dev \
|
|
libzip-dev \
|
|
autoconf \
|
|
make \
|
|
gcc \
|
|
g++ \
|
|
&& docker-php-ext-install mcrypt mbstring zip \
|
|
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
|
|
&& composer self-update --1
|
|
|
|
ENV COMPOSER_ALLOW_SUPERUSER=1
|
|
WORKDIR /app
|
|
COPY composer.* ./
|
|
|
|
# Install dependencies with Composer (optimize later after full copy)
|
|
RUN composer config platform.php 5.6.40 \
|
|
&& composer install --prefer-dist --no-dev --no-scripts --no-autoloader
|
|
|
|
# Copy the rest of the application and optimize autoload
|
|
COPY . .
|
|
RUN composer dump-autoload --optimize --no-dev --classmap-authoritative
|
|
|
|
# Production stage
|
|
FROM php:5.6-fpm-alpine
|
|
|
|
# Install runtime dependencies & build PHP extensions
|
|
RUN apk add --no-cache \
|
|
nginx \
|
|
curl \
|
|
libpng \
|
|
libjpeg-turbo \
|
|
freetype \
|
|
libzip \
|
|
libmcrypt \
|
|
zlib \
|
|
&& apk add --no-cache --virtual .build-deps \
|
|
autoconf make gcc g++ \
|
|
libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev libmcrypt-dev zlib-dev \
|
|
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
|
|
&& docker-php-ext-install -j"$(nproc)" gd pdo pdo_mysql zip mcrypt mbstring opcache \
|
|
&& docker-php-ext-enable mcrypt \
|
|
&& apk del .build-deps \
|
|
&& php -m | grep -i mcrypt
|
|
|
|
# Configure PHP for production
|
|
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
|
|
&& 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.interned_strings_buffer=8" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.max_accelerated_files=4000" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.revalidate_freq=60" >> /usr/local/etc/php/conf.d/opcache.ini \
|
|
&& echo "opcache.fast_shutdown=1" >> /usr/local/etc/php/conf.d/opcache.ini
|
|
|
|
WORKDIR /var/www
|
|
|
|
# Copy vendor & app code from build stage
|
|
COPY --from=composer /app/vendor ./vendor
|
|
COPY . .
|
|
|
|
# Set appropriate permissions and create required directories
|
|
RUN chown -R www-data:www-data storage bootstrap \
|
|
&& mkdir -p /run/php \
|
|
&& chown www-data:www-data /run/php \
|
|
&& php artisan key:generate || true
|
|
|
|
# Healthcheck (FPM listens on 9000; adjust as needed if behind nginx)
|
|
HEALTHCHECK --interval=30s --timeout=5s CMD php -m > /dev/null || exit 1
|
|
|
|
EXPOSE 9000
|
|
CMD ["php-fpm"] |