Dockerfile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # syntax=docker/dockerfile:1.4
  2. 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"
  3. FROM dunglas/frankenphp:1.9-php8.4-alpine AS frankenphp
  4. ARG PHP_EXTENSIONS
  5. ARG APP_USER=laravel
  6. ARG APP_UID=1000
  7. ARG APP_GID=1000
  8. COPY .docker/php/wait-for-it.sh /usr/local/bin/wait-for-it
  9. COPY .docker/octane/utilities.sh /tmp/utilities.sh
  10. RUN apk add --no-cache bash unzip git curl wget nodejs npm && \
  11. install-php-extensions ${PHP_EXTENSIONS} && \
  12. rm -rf /var/cache/apk/* /usr/src/* /usr/local/lib/php/doc/* && \
  13. chmod 555 /usr/local/bin/wait-for-it
  14. # Group & User
  15. RUN addgroup -g $APP_GID $APP_USER || true && \
  16. adduser --disabled-password --uid $APP_UID --ingroup $APP_USER $APP_USER || true && \
  17. mkdir -p /app /home/$APP_USER && chown -R $APP_USER /app /home/$APP_USER && \
  18. cat /tmp/utilities.sh >> /home/${APP_USER}/.bashrc && \
  19. rm -rf /tmp/*
  20. # Composer
  21. COPY --chown=${APP_USER} --from=composer:latest /usr/bin/composer /usr/bin/composer
  22. COPY --chown=${APP_USER} .docker/php/composer /home/laravel/.composer
  23. WORKDIR /app
  24. ARG GITHUB_PROJECT_NAME
  25. LABEL org.opencontainers.image.source=https://github.com/${GITHUB_PROJECT_NAME}
  26. FROM frankenphp AS cli
  27. COPY .docker/php/config/production.ini /usr/local/etc/php/conf.d/
  28. # Supercronic
  29. RUN apkArch="$(apk --print-arch)" \
  30. && case "$apkArch" in \
  31. armhf) _cronic_fname='supercronic-linux-arm' ;; \
  32. aarch64) _cronic_fname='supercronic-linux-arm64' ;; \
  33. arm64) _cronic_fname='supercronic-linux-arm64' ;; \
  34. x86_64) _cronic_fname='supercronic-linux-amd64' ;; \
  35. amd64) _cronic_fname='supercronic-linux-amd64' ;; \
  36. x86) _cronic_fname='supercronic-linux-386' ;; \
  37. *) echo >&2 "error: unsupported architecture: $apkArch"; exit 1 ;; \
  38. esac \
  39. && curl -L -o /usr/bin/supercronic "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \
  40. && chmod +x /usr/bin/supercronic \
  41. && mkdir /etc/supercronic \
  42. && echo '*/1 * * * * php /app/artisan schedule:run' > /etc/supercronic/laravel
  43. # Composer
  44. COPY --chown=${APP_USER} ./composer.* .
  45. RUN composer config --no-plugins allow-plugins.spiral/composer-publish-plugin false \
  46. && composer install --no-cache --no-ansi --no-autoloader --no-scripts --no-dev --prefer-dist
  47. # Npm
  48. COPY --chown=${APP_USER} ./package* .
  49. RUN mkdir -p /app/public/build && npm install
  50. # Other
  51. USER ${APP_USER}
  52. COPY --chown=${APP_UID} ./ .
  53. RUN set -x \
  54. && composer dump-autoload -n --optimize \
  55. && php artisan storage:link \
  56. && php artisan package:discover
  57. FROM cli AS php
  58. HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1
  59. FROM frankenphp AS development
  60. COPY .docker/php/config/development.ini /usr/local/etc/php/conf.d/development.ini
  61. RUN apk add --no-cache --virtual .build-deps autoconf build-base linux-headers && \
  62. pecl install xdebug && \
  63. docker-php-ext-enable xdebug && \
  64. pecl clear-cache && apk del .build-deps
  65. USER $APP_USER
  66. FROM dunglas/frankenphp:1.9-php8.4-trixie AS devcontainer
  67. ARG PHP_EXTENSIONS
  68. RUN echo "deb http://mirror.docker.ru/debian trixie main contrib non-free non-free-firmware" > /etc/apt/sources.list \
  69. && echo "deb http://mirror.docker.ru/debian trixie-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list \
  70. && echo "deb http://mirror.docker.ru/debian-security trixie-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list \
  71. && apt-get update && apt-get -y upgrade && \
  72. apt install -y --no-install-recommends $PHPIZE_DEPS sudo ca-certificates build-essential unzip curl wget zip bash && \
  73. install-php-extensions ${PHP_EXTENSIONS} && \
  74. apt-get clean && rm -rf /var/lib/apt/lists/*