# use build image, to simplify final image FROM php:8.5-trixie AS build # install APCu and composer RUN pecl install apcu && \ docker-php-ext-enable apcu COPY --from=composer /usr/bin/composer /usr/bin/composer RUN apt-get update && \ apt-get install -y unzip git # symfony required environment variables ENV APP_DEBUG=0 ENV APP_ENV=prod ENV APP_SHARE_DIR=/data/preauth # load application into build image RUN mkdir -p /data/preauth RUN mkdir -p /app/bin WORKDIR /app COPY ./bin/console /app/bin/console COPY ./config /app/config COPY ./public /app/public COPY ./src /app/src COPY ./templates /app/templates COPY ./composer.json /app/composer.json COPY ./composer.lock /app/composer.lock COPY ./symfony.lock /app/symfony.lock # install application dependencies RUN composer install --no-dev --optimize-autoloader RUN composer dump-env prod --empty # start creating final image FROM dunglas/frankenphp:php8.5-trixie # install APCu and curl (needed for healthcheck) RUN pecl install apcu && \ docker-php-ext-enable apcu RUN apt-get update && \ apt-get install -y --no-install-recommends curl && \ rm -rf /var/lib/apt/lists/* # symfony required environment variables ENV APP_DEBUG=0 ENV APP_ENV=prod ENV APP_SHARE_DIR=/data/preauth # load application into final image WORKDIR /app COPY --from=build /data/preauth /data/preauth COPY --from=build /app /app # configure container COPY ./Caddyfile /etc/frankenphp/Caddyfile RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini RUN echo 'expose_php = off' > $PHP_INI_DIR/conf.d/restrict.ini # console needs apc to manage cache RUN echo 'apc.enable_cli = on' > $PHP_INI_DIR/conf.d/console.ini # app uses var folder for cache storage VOLUME ["/config", "/data"] # runs http on standard port EXPOSE 80 # healthcheck HEALTHCHECK --interval=5m \ --retries=3 \ --start-interval=1s \ --start-period=10s \ --timeout=2s \ CMD curl http://localhost || exit 1