| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- # syntax=docker/dockerfile:1.4
- ARG PHP_EXTENSIONS="exif pcntl bcmath gd ctype curl dom fileinfo filter hash mbstring openssl pcre session tokenizer xml sockets pdo pdo_mysql pdo_pgsql redis"
- FROM dunglas/frankenphp:1.9-php8.4-alpine AS frankenphp
- ARG PHP_EXTENSIONS
- ARG APP_USER=laravel
- ARG APP_UID=1000
- ARG APP_GID=1000
- COPY .docker/php/wait-for-it.sh /usr/local/bin/wait-for-it
- COPY .docker/octane/utilities.sh /tmp/utilities.sh
- RUN apk add --no-cache bash unzip git curl wget nodejs npm && \
- install-php-extensions ${PHP_EXTENSIONS} && \
- rm -rf /var/cache/apk/* /usr/src/* /usr/local/lib/php/doc/* && \
- chmod 555 /usr/local/bin/wait-for-it
- # Group & User
- RUN addgroup -g $APP_GID $APP_USER || true && \
- adduser --disabled-password --uid $APP_UID --ingroup $APP_USER $APP_USER || true && \
- mkdir -p /app /home/$APP_USER && chown -R $APP_USER /app /home/$APP_USER && \
- cat /tmp/utilities.sh >> /home/${APP_USER}/.bashrc && \
- rm -rf /tmp/*
- # Composer
- COPY --chown=${APP_USER} --from=composer:latest /usr/bin/composer /usr/bin/composer
- COPY --chown=${APP_USER} .docker/php/composer /home/laravel/.composer
- WORKDIR /app
- ARG GITHUB_PROJECT_NAME
- LABEL org.opencontainers.image.source=https://github.com/${GITHUB_PROJECT_NAME}
- FROM frankenphp AS cli
- COPY .docker/php/config/production.ini /usr/local/etc/php/conf.d/
- # Supercronic
- RUN apkArch="$(apk --print-arch)" \
- && case "$apkArch" in \
- armhf) _cronic_fname='supercronic-linux-arm' ;; \
- aarch64) _cronic_fname='supercronic-linux-arm64' ;; \
- arm64) _cronic_fname='supercronic-linux-arm64' ;; \
- x86_64) _cronic_fname='supercronic-linux-amd64' ;; \
- amd64) _cronic_fname='supercronic-linux-amd64' ;; \
- x86) _cronic_fname='supercronic-linux-386' ;; \
- *) echo >&2 "error: unsupported architecture: $apkArch"; exit 1 ;; \
- esac \
- && curl -L -o /usr/bin/supercronic "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \
- && chmod +x /usr/bin/supercronic \
- && mkdir /etc/supercronic \
- && echo '*/1 * * * * php /app/artisan schedule:run' > /etc/supercronic/laravel
- # Composer
- COPY --chown=${APP_USER} ./composer.* .
- RUN composer config --no-plugins allow-plugins.spiral/composer-publish-plugin false \
- && composer install --no-cache --no-ansi --no-autoloader --no-scripts --no-dev --prefer-dist
- # Npm
- COPY --chown=${APP_USER} ./package* .
- RUN mkdir -p /app/public/build && npm install
- # Other
- USER ${APP_USER}
- COPY --chown=${APP_UID} ./ .
- RUN set -x \
- && composer dump-autoload -n --optimize \
- && php artisan storage:link \
- && php artisan package:discover
- FROM cli AS php
- HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1
- FROM frankenphp AS development
- COPY .docker/php/config/development.ini /usr/local/etc/php/conf.d/development.ini
- RUN apk add --no-cache --virtual .build-deps autoconf build-base linux-headers && \
- pecl install xdebug && \
- docker-php-ext-enable xdebug && \
- pecl clear-cache && apk del .build-deps
- USER $APP_USER
- FROM dunglas/frankenphp:1.9-php8.4-trixie AS devcontainer
- ARG PHP_EXTENSIONS
- RUN echo "deb http://mirror.docker.ru/debian trixie main contrib non-free non-free-firmware" > /etc/apt/sources.list \
- && echo "deb http://mirror.docker.ru/debian trixie-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list \
- && echo "deb http://mirror.docker.ru/debian-security trixie-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list \
- && apt-get update && apt-get -y upgrade && \
- apt install -y --no-install-recommends $PHPIZE_DEPS sudo ca-certificates build-essential unzip curl wget zip bash && \
- install-php-extensions ${PHP_EXTENSIONS} && \
- apt-get clean && rm -rf /var/lib/apt/lists/*
|