From 2876ca73e0da9c9c0b0aa1dd7beebff7061afd4c Mon Sep 17 00:00:00 2001 From: Ferror Date: Mon, 31 Oct 2022 18:01:23 +0100 Subject: [PATCH 1/5] [docker] - Create migration container --- .editorconfig | 6 ++++++ Dockerfile | 11 +++++++++-- docker-compose.prod.yml | 25 +++++++++++++++++++++---- docker-compose.yml | 17 ++++++++++++++++- docker/migrations/docker-entrypoint.sh | 25 +++++++++++++++++++++++++ docker/php/docker-entrypoint.sh | 12 +++++------- 6 files changed, 82 insertions(+), 14 deletions(-) create mode 100755 docker/migrations/docker-entrypoint.sh diff --git a/.editorconfig b/.editorconfig index b5f72a57e2..8c5a7e8bad 100644 --- a/.editorconfig +++ b/.editorconfig @@ -49,6 +49,12 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = false +[docker-compose.{yaml,yml}] +indent_size = 2 + +[docker-compose.*.{yaml,yml}] +indent_size = 2 + [.babelrc] indent_style = space indent_size = 2 diff --git a/Dockerfile b/Dockerfile index 97631c4ca8..94553906a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ ENV PATH="${PATH}:/root/.composer/vendor/bin" WORKDIR /srv/sylius # build for production -ARG APP_ENV=prod +ENV APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code COPY composer.* symfony.lock ./ @@ -129,7 +129,7 @@ COPY docker/php/dev/opcache.ini $PHP_INI_DIR/conf.d/opcache.ini WORKDIR /srv/sylius -ARG APP_ENV=dev +ENV APP_ENV=dev RUN set -eux; \ composer install --prefer-dist --no-autoloader --no-interaction --no-scripts --no-progress; \ @@ -146,3 +146,10 @@ COPY docker/cron/crontab /etc/crontabs/root ENTRYPOINT ["crond"] CMD ["-f"] + +FROM sylius_php_prod AS sylius_migrations + +COPY docker/migrations/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + +ENTRYPOINT ["docker-entrypoint"] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 5239bb29e4..7c943493a6 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -5,7 +5,7 @@ services: context: . target: sylius_php_prod depends_on: - - mysql + - migrations environment: APP_DEBUG: 0 APP_ENV: prod @@ -28,7 +28,7 @@ services: context: . target: sylius_cron depends_on: - - mysql + - migrations environment: APP_ENV: prod APP_DEBUG: 0 @@ -37,7 +37,7 @@ services: PHP_DATE_TIMEZONE: ${PHP_DATE_TIMEZONE:-UTC} networks: - sylius - + worker: container_name: worker command: ["php", "bin/console", "messenger:consume", "main", "catalog_promotion_removal", "--limit=5", "--memory-limit=256M", "--time-limit=600"] @@ -46,7 +46,7 @@ services: context: . target: sylius_php_prod depends_on: - - mysql + - migrations environment: APP_ENV: prod APP_DEBUG: 0 @@ -57,6 +57,23 @@ services: networks: - sylius + migrations: + container_name: migrations + build: + context: . + target: sylius_migrations + depends_on: + - mysql + environment: + APP_ENV: prod + APP_DEBUG: 0 + APP_SECRET: EDITME + DATABASE_URL: mysql://sylius:${MYSQL_PASSWORD}@mysql/sylius_prod + LOAD_FIXTURES: 1 + PHP_DATE_TIMEZONE: ${PHP_DATE_TIMEZONE:-UTC} + networks: + - sylius + mysql: container_name: mysql # in production, we may want to use a managed database service diff --git a/docker-compose.yml b/docker-compose.yml index 54221d5f23..051b636b34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: context: . target: sylius_php_dev depends_on: - - mysql + - migrations environment: - APP_ENV=dev - APP_DEBUG=1 @@ -22,6 +22,21 @@ services: # - ./public/media:/srv/sylius/public/media:rw - public-media:/srv/sylius/public/media:rw + migrations: + container_name: migrations + build: + context: . + target: sylius_migrations + depends_on: + - mysql + environment: + - APP_ENV=prod + - APP_DEBUG=0 + - APP_SECRET=EDITME + - DATABASE_URL=mysql://sylius:${MYSQL_PASSWORD:-nopassword}@mysql/sylius + - LOAD_FIXTURES=1 + - PHP_DATE_TIMEZONE=${PHP_DATE_TIMEZONE:-UTC} + mysql: container_name: mysql image: mysql:5.7 # Sylius is fully working on mysql 8.0 version diff --git a/docker/migrations/docker-entrypoint.sh b/docker/migrations/docker-entrypoint.sh new file mode 100755 index 0000000000..6f3311c340 --- /dev/null +++ b/docker/migrations/docker-entrypoint.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -e + +attempt_left=20 + +until php bin/console doctrine:query:sql "select 1" >/dev/null 2>&1; +do + attempt_left=$((attempt_left-1)) + + if [ "${attempt_left}" -eq "0" ]; then + + (>&2 echo "MySQL did not answer. Aborting migrations.") + exit 1 + else + (>&2 echo "Waiting for MySQL to be ready...") + fi + + sleep 1 +done + +php bin/console doctrine:migrations:migrate --no-interaction + +if [ "$LOAD_FIXTURES" = "1" ]; then + php bin/console sylius:fixtures:load --no-interaction +fi diff --git a/docker/php/docker-entrypoint.sh b/docker/php/docker-entrypoint.sh index 79e5ed8764..54b400a019 100755 --- a/docker/php/docker-entrypoint.sh +++ b/docker/php/docker-entrypoint.sh @@ -17,13 +17,11 @@ if [ "$1" = 'php-fpm' ] || [ "$1" = 'bin/console' ]; then bin/console sylius:theme:assets:install public --no-interaction fi - until bin/console doctrine:query:sql "select 1" >/dev/null 2>&1; do - (>&2 echo "Waiting for MySQL to be ready...") - sleep 1 - done - - bin/console doctrine:migrations:migrate --no-interaction - bin/console sylius:fixtures:load --no-interaction + while ping -c1 migrations >/dev/null 2>&1; + do + (>&2 echo "Waiting for Migrations container to finish") + sleep 1; + done; fi exec docker-php-entrypoint "$@" From 3c06df7a5c9eee0f1b26de31edd2388a9e759733 Mon Sep 17 00:00:00 2001 From: Ferror Date: Mon, 31 Oct 2022 18:58:18 +0100 Subject: [PATCH 2/5] change APP_ENV to dev --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 051b636b34..f3d34c818a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,7 +30,7 @@ services: depends_on: - mysql environment: - - APP_ENV=prod + - APP_ENV=dev - APP_DEBUG=0 - APP_SECRET=EDITME - DATABASE_URL=mysql://sylius:${MYSQL_PASSWORD:-nopassword}@mysql/sylius From 8f5d508ce605556e71ec0a733fa0e970c3a69f29 Mon Sep 17 00:00:00 2001 From: Ferror Date: Tue, 1 Nov 2022 15:50:07 +0100 Subject: [PATCH 3/5] create dedicated build for dev migrations --- Dockerfile | 11 ++++++++++- docker-compose.prod.yml | 2 +- docker-compose.yml | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 94553906a0..475cf72aa7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -147,9 +147,18 @@ COPY docker/cron/crontab /etc/crontabs/root ENTRYPOINT ["crond"] CMD ["-f"] -FROM sylius_php_prod AS sylius_migrations +FROM sylius_php_prod AS sylius_migrations_prod COPY docker/migrations/docker-entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint ENTRYPOINT ["docker-entrypoint"] + +FROM sylius_php_dev AS sylius_migrations_dev + +COPY docker/migrations/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + +RUN composer dump-autoload --classmap-authoritative + +ENTRYPOINT ["docker-entrypoint"] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 7c943493a6..6efdd0cbf7 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -61,7 +61,7 @@ services: container_name: migrations build: context: . - target: sylius_migrations + target: sylius_migrations_prod depends_on: - mysql environment: diff --git a/docker-compose.yml b/docker-compose.yml index f3d34c818a..72e58f5745 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,12 +26,12 @@ services: container_name: migrations build: context: . - target: sylius_migrations + target: sylius_migrations_dev depends_on: - mysql environment: - APP_ENV=dev - - APP_DEBUG=0 + - APP_DEBUG=1 - APP_SECRET=EDITME - DATABASE_URL=mysql://sylius:${MYSQL_PASSWORD:-nopassword}@mysql/sylius - LOAD_FIXTURES=1 From 745c218032038d7b00753976f7441e2f3998d5aa Mon Sep 17 00:00:00 2001 From: Zbigniew Malcherczyk Date: Sun, 6 Nov 2022 13:54:53 +0100 Subject: [PATCH 4/5] Update docker-compose.prod.yml Co-authored-by: Kevin Kaniaburka --- docker-compose.prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 6efdd0cbf7..59bd4e3aef 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -69,7 +69,7 @@ services: APP_DEBUG: 0 APP_SECRET: EDITME DATABASE_URL: mysql://sylius:${MYSQL_PASSWORD}@mysql/sylius_prod - LOAD_FIXTURES: 1 + LOAD_FIXTURES: 0 PHP_DATE_TIMEZONE: ${PHP_DATE_TIMEZONE:-UTC} networks: - sylius From 46f36f5093be2505d3a77b1ee55a5a52234e9db0 Mon Sep 17 00:00:00 2001 From: Ferror Date: Wed, 9 Nov 2022 16:43:24 +0100 Subject: [PATCH 5/5] optional LOAD_FIXTURES --- .github/workflows/docker.yml | 2 +- docker-compose.prod.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index c13e2f0ab2..af5913633f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -50,7 +50,7 @@ jobs: if: matrix.platform == 'linux/amd64' - name: Setup Sylius Store - run: docker compose -f ${{ matrix.docker_compose }} up -d + run: LOAD_FIXTURES=1 docker compose -f ${{ matrix.docker_compose }} up -d if: matrix.platform == 'linux/amd64' - name: Health Check Store diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 59bd4e3aef..4019a274e1 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -69,7 +69,7 @@ services: APP_DEBUG: 0 APP_SECRET: EDITME DATABASE_URL: mysql://sylius:${MYSQL_PASSWORD}@mysql/sylius_prod - LOAD_FIXTURES: 0 + LOAD_FIXTURES: ${LOAD_FIXTURES:-0} PHP_DATE_TIMEZONE: ${PHP_DATE_TIMEZONE:-UTC} networks: - sylius