# composer install FROM composer:latest AS composer COPY ./ /app/ RUN composer --no-ansi install --no-dev --ignore-platform-reqs RUN composer --no-ansi dump-autoload --optimize # Intermediate containers for less layers FROM alpine as translation RUN apk add gettext COPY resources/lang/ /data RUN find /data -type f -name '*.po' -exec sh -c 'file="{}"; msgfmt "${file%.*}.po" -o "${file%.*}.mo"' \; FROM alpine as data COPY .babelrc .browserslistrc composer.json LICENSE package.json README.md webpack.config.js yarn.lock /app/ COPY bin/ /app/bin COPY config/ /app/config COPY db/ /app/db COPY includes/ /app/includes COPY public/ /app/public COPY resources/views /app/resources/views COPY src/ /app/src COPY storage/ /app/storage COPY --from=translation /data/ /app/resources/lang COPY --from=composer /app/vendor/ /app/vendor COPY --from=composer /app/composer.lock /app/ RUN find /app/storage/ -type f -not -name VERSION -exec rm {} \; # Fetch supercronic FROM alpine as supercronic ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-amd64 \ SUPERCRONIC=supercronic-linux-amd64 \ SUPERCRONIC_SHA1SUM=048b95b48b708983effb2e5c935a1ef8483d9e3e RUN apk add --no-cache curl \ && curl -fsSLO "$SUPERCRONIC_URL" \ && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ && chmod +x "$SUPERCRONIC" \ && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" # Build a container for running tasks FROM php:8-cli-alpine as cron RUN apk add --no-cache icu-dev && \ docker-php-ext-install intl pdo_mysql COPY --from=data /app/ /app COPY --from=supercronic /usr/local/bin/supercronic-linux-amd64 /usr/local/bin/supercronic COPY docker/crontab /etc/crontab ENTRYPOINT ["/usr/local/bin/supercronic"] CMD ["/etc/crontab"] # Build the PHP container FROM php:8-fpm-alpine WORKDIR /var/www RUN apk add --no-cache icu-dev && \ docker-php-ext-install intl pdo_mysql COPY --from=data /app/ /var/www RUN chown -R www-data:www-data /var/www/storage/ && \ rm -r /var/www/html ARG VERSION RUN if [[ ! -f /var/www/storage/app/VERSION ]] && [[ ! -z "${VERSION}" ]]; then \ echo -n "${VERSION}" > /var/www/storage/app/VERSION; fi ENV TRUSTED_PROXIES 10.0.0.0/8,::ffff:10.0.0.0/8,\ 127.0.0.0/8,::ffff:127.0.0.0/8,\ 172.16.0.0/12,::ffff:172.16.0.0/12,\ 192.168.0.0/16,::ffff:192.168.0.0/16,\ ::1/128,fc00::/7,fec0::/10