#syntax=docker/dockerfile:1.4 # Adapted from https://github.com/dunglas/symfony-docker # Prod image FROM php:8.1-fpm-alpine AS app_php ENV APP_ENV=prod WORKDIR /srv/app # persistent / runtime deps RUN apk add --no-cache \ linux-headers \ acl \ fcgi \ file \ gettext \ git \ ; RUN set -eux; \ apk add --no-cache --virtual .build-deps \ $PHPIZE_DEPS \ icu-data-full \ icu-dev \ libzip-dev \ zlib-dev \ ; \ \ docker-php-ext-configure zip; \ docker-php-ext-install -j$(nproc) \ intl \ zip \ ; \ pecl install \ apcu \ ; \ pecl clear-cache; \ docker-php-ext-enable \ apcu \ opcache \ ; \ \ runDeps="$( \ scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ | tr ',' '\n' \ | sort -u \ | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ )"; \ apk add --no-cache --virtual .app-phpexts-rundeps $runDeps; \ \ apk del .build-deps ###> recipes ### ###> doctrine/doctrine-bundle ### RUN apk add --no-cache --virtual .pgsql-deps postgresql-dev; \ docker-php-ext-install -j$(nproc) pdo_pgsql; \ apk add --no-cache --virtual .pgsql-rundeps so:libpq.so.5; \ apk del .pgsql-deps ###< doctrine/doctrine-bundle ### ###< recipes ### RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" COPY --link docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/ COPY --link docker/php/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/ COPY --link docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf RUN mkdir -p /var/run/php COPY --link docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck RUN chmod +x /usr/local/bin/docker-healthcheck HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"] COPY --link docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint ENTRYPOINT ["docker-entrypoint"] CMD ["php-fpm"] # https://getcomposer.org/doc/03-cli.md#composer-allow-superuser ENV COMPOSER_ALLOW_SUPERUSER=1 ENV PATH="${PATH}:/root/.composer/vendor/bin" COPY --from=composer/composer:2-bin --link /composer /usr/bin/composer # prevent the reinstallation of vendors at every changes in the source code COPY composer.* symfony.* ./ RUN set -eux; \ composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress; \ composer clear-cache # copy sources COPY --link . . RUN rm -Rf docker/ RUN set -eux; \ mkdir -p var/cache var/log; \ composer dump-autoload --classmap-authoritative --no-dev; \ composer dump-env prod; \ composer run-script --no-dev post-install-cmd; \ chmod +x bin/console; sync # Dev image FROM app_php AS app_php_dev ENV APP_ENV=dev XDEBUG_MODE=off VOLUME /srv/app/var/ RUN rm $PHP_INI_DIR/conf.d/app.prod.ini; \ mv "$PHP_INI_DIR/php.ini" "$PHP_INI_DIR/php.ini-production"; \ mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" COPY --link docker/php/conf.d/app.dev.ini $PHP_INI_DIR/conf.d/ RUN set -eux; \ apk add --no-cache --virtual .build-deps $PHPIZE_DEPS; \ pecl install xdebug; \ docker-php-ext-enable xdebug; \ apk del .build-deps RUN rm -f .env.local.php # Build Caddy with the Mercure and Vulcain modules FROM caddy:2-builder-alpine AS app_caddy_builder RUN xcaddy build \ --with github.com/dunglas/mercure \ --with github.com/dunglas/mercure/caddy \ --with github.com/dunglas/vulcain \ --with github.com/dunglas/vulcain/caddy # Caddy image FROM caddy:2-alpine AS app_caddy WORKDIR /srv/app COPY --from=app_caddy_builder --link /usr/bin/caddy /usr/bin/caddy COPY --from=app_php --link /srv/app/public public/ COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile