diff --git a/Dockerfile b/Dockerfile index 31014531d1..7648fba49c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # the different stages of this Dockerfile are meant to be built into separate images # https://docs.docker.com/compose/compose-file/#target -ARG PHP_VERSION=7.3 +ARG PHP_VERSION=7.4 ARG NODE_VERSION=10 ARG NGINX_VERSION=1.16 @@ -9,57 +9,55 @@ FROM php:${PHP_VERSION}-fpm-alpine AS sylius_php # persistent / runtime deps RUN apk add --no-cache \ - acl \ - file \ - gettext \ - git \ - mariadb-client \ - ; + acl \ + file \ + gettext \ + git \ + mariadb-client \ + ; ARG APCU_VERSION=5.1.17 RUN set -eux; \ - apk add --no-cache --virtual .build-deps \ - $PHPIZE_DEPS \ - coreutils \ - freetype-dev \ - icu-dev \ - libjpeg-turbo-dev \ - libpng-dev \ - libtool \ - libwebp-dev \ - libzip-dev \ - mariadb-dev \ - zlib-dev \ - ; \ - \ - docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include --with-webp-dir=/usr/include --with-freetype-dir=/usr/include/; \ - docker-php-ext-configure zip --with-libzip; \ - docker-php-ext-install -j$(nproc) \ - exif \ - gd \ - intl \ - pdo_mysql \ - zip \ - ; \ - pecl install \ - apcu-${APCU_VERSION} \ - ; \ - 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 .sylius-phpexts-rundeps $runDeps; \ - \ - apk del .build-deps - + apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS \ + coreutils \ + freetype-dev \ + icu-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + libtool \ + libwebp-dev \ + libzip-dev \ + mariadb-dev \ + zlib-dev \ + ; \ + \ + docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-webp=/usr/include --with-freetype=/usr/include/; \ + docker-php-ext-install -j$(nproc) \ + exif \ + gd \ + intl \ + pdo_mysql \ + zip \ + ; \ + pecl install \ + apcu-${APCU_VERSION} \ + ; \ + 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 .sylius-phpexts-rundeps $runDeps; \ + \ + apk del .build-deps COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY docker/php/php.ini /usr/local/etc/php/php.ini COPY docker/php/php-cli.ini /usr/local/etc/php/php-cli.ini @@ -67,7 +65,7 @@ COPY docker/php/php-cli.ini /usr/local/etc/php/php-cli.ini # https://getcomposer.org/doc/03-cli.md#composer-allow-superuser ENV COMPOSER_ALLOW_SUPERUSER=1 RUN set -eux; \ - composer clear-cache + composer clear-cache ENV PATH="${PATH}:/root/.composer/vendor/bin" WORKDIR /srv/sylius @@ -76,10 +74,10 @@ WORKDIR /srv/sylius ARG APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code -COPY composer.json composer.lock symfony.lock ./ +COPY composer.* symfony.lock ./ RUN set -eux; \ - composer install --prefer-dist --no-autoloader --no-scripts --no-progress --no-suggest; \ - composer clear-cache + composer install --prefer-dist --no-autoloader --no-scripts --no-progress; \ + composer clear-cache # copy only specifically what we need COPY .env .env.prod .env.test .env.test_cached ./ @@ -91,12 +89,13 @@ COPY templates templates/ COPY translations translations/ RUN set -eux; \ - mkdir -p var/cache var/log; \ - composer dump-autoload --classmap-authoritative; \ - APP_SECRET='' composer run-script post-install-cmd; \ - chmod +x bin/console; sync; \ - bin/console sylius:install:assets; \ - bin/console sylius:theme:assets:install public + mkdir -p var/cache var/log; \ + composer dump-autoload --classmap-authoritative; \ + APP_SECRET='' composer run-script post-install-cmd; \ + chmod +x bin/console; sync; \ + bin/console sylius:install:assets; \ + bin/console sylius:theme:assets:install public + VOLUME /srv/sylius/var VOLUME /srv/sylius/public/media @@ -107,24 +106,24 @@ RUN chmod +x /usr/local/bin/docker-entrypoint ENTRYPOINT ["docker-entrypoint"] CMD ["php-fpm"] -FROM node:${NODE_VERSION}-alpine AS sylius_nodejs +FROM node:${NODE_VERSION}-alpine AS sylius_node WORKDIR /srv/sylius RUN set -eux; \ - apk add --no-cache --virtual .build-deps \ - g++ \ - gcc \ - git \ - make \ - python \ - ; + apk add --no-cache --virtual .build-deps \ + g++ \ + gcc \ + git \ + make \ + python \ + ; # prevent the reinstallation of vendors at every changes in the source code COPY package.json yarn.lock ./ RUN set -eux; \ - yarn install; \ - yarn cache clean + yarn install; \ + yarn cache clean COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/UiBundle/Resources/private vendor/sylius/sylius/src/Sylius/Bundle/UiBundle/Resources/private/ COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/private vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/private/ @@ -135,9 +134,9 @@ COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/ShopBu COPY gulpfile.babel.js .babelrc ./ RUN set -eux; \ - GULP_ENV=prod yarn build + GULP_ENV=prod yarn build -COPY docker/nodejs/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +COPY docker/node/docker-entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint ENTRYPOINT ["docker-entrypoint"] @@ -150,4 +149,4 @@ COPY docker/nginx/conf.d/default.conf /etc/nginx/conf.d/ WORKDIR /srv/sylius COPY --from=sylius_php /srv/sylius/public public/ -COPY --from=sylius_nodejs /srv/sylius/public public/ +COPY --from=sylius_node /srv/sylius/public public/ diff --git a/docker-compose.yml b/docker-compose.yml index 0fae74d2ad..980c582384 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,11 +5,12 @@ services: build: context: . target: sylius_php - cache_from: - - quay.io/sylius/php:latest - - quay.io/sylius/nodejs:latest - - quay.io/sylius/nginx:latest - image: quay.io/sylius/php:latest + # Quay does not work, should be replaced in future with f.e. ghcr.io + # cache_from: + # - quay.io/sylius/php:latest + # - quay.io/sylius/nodejs:latest + # - quay.io/sylius/nginx:latest + image: php:latest depends_on: - mysql environment: @@ -42,15 +43,16 @@ services: ports: - "3306:3306" - nodejs: + node: build: context: . - target: sylius_nodejs - cache_from: - - quay.io/sylius/php:latest - - quay.io/sylius/nodejs:latest - - quay.io/sylius/nginx:latest - image: quay.io/sylius/nodejs:latest + target: sylius_node + # Quay does not work, should be replaced in future with f.e. ghcr.io + # cache_from: + # - quay.io/sylius/php:latest + # - quay.io/sylius/nodejs:latest + # - quay.io/sylius/nginx:latest + image: node:latest depends_on: - php environment: @@ -67,14 +69,15 @@ services: build: context: . target: sylius_nginx - cache_from: - - quay.io/sylius/php:latest - - quay.io/sylius/nodejs:latest - - quay.io/sylius/nginx:latest - image: quay.io/sylius/nginx:latest + image: nginx:latest + # Quay does not work, should be replaced in future with f.e. ghcr.io + # cache_from: + # - quay.io/sylius/php:latest + # - quay.io/sylius/nodejs:latest + # - quay.io/sylius/nginx:latest depends_on: - php - - nodejs # to ensure correct build order + - node # to ensure correct build order volumes: - ./public:/srv/sylius/public:ro # if you develop on Linux, you may use a bind-mounted host directory instead diff --git a/docker/nginx/conf.d/default.conf b/docker/nginx/conf.d/default.conf index c25c3f5883..4f772ad732 100644 --- a/docker/nginx/conf.d/default.conf +++ b/docker/nginx/conf.d/default.conf @@ -1,5 +1,6 @@ server { root /srv/sylius/public; + listen *:80; location / { # try to serve file directly, fallback to index.php @@ -7,8 +8,10 @@ server { } location ~ ^/index\.php(/|$) { - # Comment the next line and uncomment the next to enable dynamic resolution (incompatible with Kubernetes) - fastcgi_pass php:9000; + resolver 127.0.0.11 valid=10s ipv6=off; + set $backendfpm "php:9000"; + fastcgi_pass $backendfpm; + # Comment the next line and uncomment the next to enable dynamic resolution (incompatible with Kubernetes); #resolver 127.0.0.11; #set $upstream_host php; #fastcgi_pass $upstream_host:9000; diff --git a/docker/nodejs/docker-entrypoint.sh b/docker/node/docker-entrypoint.sh similarity index 100% rename from docker/nodejs/docker-entrypoint.sh rename to docker/node/docker-entrypoint.sh