From d7551530b6fd72a1a89a56657269291b475cd02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sun, 19 Apr 2020 15:16:36 +0200 Subject: [PATCH 1/2] :recycle: Simplify Docker Compose files and deployment --- {{cookiecutter.project_slug}}/.env | 6 +- .../docker-compose.deploy.build.yml | 15 -- .../docker-compose.deploy.command.yml | 11 -- .../docker-compose.deploy.images.yml | 8 - .../docker-compose.deploy.labels.yml | 57 ------- .../docker-compose.deploy.networks.yml | 18 -- ...ocker-compose.deploy.volumes-placement.yml | 17 -- .../docker-compose.dev.build.yml | 19 --- .../docker-compose.dev.command.yml | 14 -- .../docker-compose.dev.env.yml | 11 -- .../docker-compose.dev.labels.yml | 19 --- .../docker-compose.dev.networks.yml | 7 - .../docker-compose.dev.ports.yml | 15 -- .../docker-compose.dev.volumes.yml | 8 - .../docker-compose.override.yml | 75 +++++++++ .../docker-compose.shared.admin.yml | 21 --- .../docker-compose.shared.base-images.yml | 10 -- .../docker-compose.shared.depends.yml | 9 - .../docker-compose.shared.env.yml | 23 --- .../docker-compose.yml | 159 ++++++++++++++++++ .../scripts/build-push.sh | 2 +- .../scripts/build.sh | 7 +- .../scripts/deploy.sh | 12 +- .../scripts/test-local.sh | 24 +-- {{cookiecutter.project_slug}}/scripts/test.sh | 9 +- 25 files changed, 251 insertions(+), 325 deletions(-) delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.build.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.command.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.images.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.labels.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.networks.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.deploy.volumes-placement.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.build.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.command.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.env.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.labels.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.networks.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.ports.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.dev.volumes.yml create mode 100644 {{cookiecutter.project_slug}}/docker-compose.override.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.shared.admin.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.shared.base-images.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.shared.depends.yml delete mode 100644 {{cookiecutter.project_slug}}/docker-compose.shared.env.yml create mode 100644 {{cookiecutter.project_slug}}/docker-compose.yml diff --git a/{{cookiecutter.project_slug}}/.env b/{{cookiecutter.project_slug}}/.env index 95fc3abfcd..79f70aeed2 100644 --- a/{{cookiecutter.project_slug}}/.env +++ b/{{cookiecutter.project_slug}}/.env @@ -1,6 +1,3 @@ -COMPOSE_PATH_SEPARATOR=: -COMPOSE_FILE=docker-compose.shared.admin.yml:docker-compose.shared.base-images.yml:docker-compose.shared.depends.yml:docker-compose.shared.env.yml:docker-compose.dev.build.yml:docker-compose.dev.command.yml:docker-compose.dev.env.yml:docker-compose.dev.labels.yml:docker-compose.dev.networks.yml:docker-compose.dev.ports.yml:docker-compose.dev.volumes.yml - DOMAIN=localhost # DOMAIN=local.dockertoolbox.tiangolo.com # DOMAIN=localhost.tiangolo.com @@ -44,3 +41,6 @@ POSTGRES_DB=app PGADMIN_LISTEN_PORT=5050 PGADMIN_DEFAULT_EMAIL={{cookiecutter.pgadmin_default_user}} PGADMIN_DEFAULT_PASSWORD={{cookiecutter.pgadmin_default_user_password}} + +# Traefik Public network for testing and local dev +TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL=false diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.build.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.build.yml deleted file mode 100644 index 178a1646b5..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.build.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '3.3' -services: - backend: - build: - context: ./backend - dockerfile: backend.dockerfile - celeryworker: - build: - context: ./backend - dockerfile: celeryworker.dockerfile - frontend: - build: - context: ./frontend - args: - FRONTEND_ENV: ${FRONTEND_ENV-production} diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.command.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.command.yml deleted file mode 100644 index 141ee407be..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.command.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: '3.3' -services: - proxy: - command: --docker \ - --docker.swarmmode \ - --docker.watch \ - --docker.exposedbydefault=false \ - --constraints=tag==${TRAEFIK_TAG} \ - --logLevel=INFO \ - --accessLog \ - --web diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.images.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.images.yml deleted file mode 100644 index f68f78d82e..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.images.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: '3.3' -services: - backend: - image: '${DOCKER_IMAGE_BACKEND}:${TAG-latest}' - celeryworker: - image: '${DOCKER_IMAGE_CELERYWORKER}:${TAG-latest}' - frontend: - image: '${DOCKER_IMAGE_FRONTEND}:${TAG-latest}' diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.labels.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.labels.yml deleted file mode 100644 index 0fa9b919eb..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.labels.yml +++ /dev/null @@ -1,57 +0,0 @@ -version: '3.3' -services: - pgadmin: - deploy: - labels: - - traefik.frontend.rule=Host:pgadmin.${DOMAIN} - - traefik.enable=true - - traefik.port=5050 - - traefik.tags=${TRAEFIK_PUBLIC_TAG} - - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} - - traefik.frontend.entryPoints=http,https - - traefik.frontend.redirect.entryPoint=https - proxy: - deploy: - labels: - # For the configured domain - - traefik.frontend.rule=Host:${DOMAIN} - # For a domain with and without 'www' - # Comment the previous line above and un-comment the line below - # - "traefik.frontend.rule=Host:www.${DOMAIN},${DOMAIN}" - - traefik.enable=true - - traefik.port=80 - - traefik.tags=${TRAEFIK_PUBLIC_TAG} - - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} - - traefik.frontend.entryPoints=http,https - - traefik.frontend.redirect.entryPoint=https - # Uncomment the config line below to detect and redirect www to non-www (or the contrary) - # The lines above for traefik.frontend.rule are needed too - # - "traefik.frontend.redirect.regex=^https?://(www.)?(${DOMAIN})/(.*)" - # To redirect from non-www to www un-comment the line below - # - "traefik.frontend.redirect.replacement=https://www.${DOMAIN}/$$3" - # To redirect from www to non-www un-comment the line below - # - "traefik.frontend.redirect.replacement=https://${DOMAIN}/$$3" - flower: - deploy: - labels: - - traefik.frontend.rule=Host:flower.${DOMAIN} - - traefik.enable=true - - traefik.port=5555 - - traefik.tags=${TRAEFIK_PUBLIC_TAG} - - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} - - traefik.frontend.entryPoints=http,https - - traefik.frontend.redirect.entryPoint=https - backend: - deploy: - labels: - - traefik.frontend.rule=PathPrefix:/api,/docs,/redoc - - traefik.enable=true - - traefik.port=80 - - traefik.tags=${TRAEFIK_TAG} - frontend: - deploy: - labels: - - traefik.frontend.rule=PathPrefix:/ - - traefik.enable=true - - traefik.port=80 - - traefik.tags=${TRAEFIK_TAG} diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.networks.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.networks.yml deleted file mode 100644 index f1a81ffea5..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.networks.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '3.3' -services: - pgadmin: - networks: - - ${TRAEFIK_PUBLIC_NETWORK} - - default - proxy: - networks: - - ${TRAEFIK_PUBLIC_NETWORK} - - default - flower: - networks: - - ${TRAEFIK_PUBLIC_NETWORK} - - default - -networks: - traefik-public: - external: true diff --git a/{{cookiecutter.project_slug}}/docker-compose.deploy.volumes-placement.yml b/{{cookiecutter.project_slug}}/docker-compose.deploy.volumes-placement.yml deleted file mode 100644 index 86bbfd0ce3..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.deploy.volumes-placement.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3.3' -services: - db: - volumes: - - app-db-data:/var/lib/postgresql/data/pgdata - deploy: - placement: - constraints: - - node.labels.${STACK_NAME}.app-db-data == true - proxy: - deploy: - placement: - constraints: - - node.role == manager - -volumes: - app-db-data: diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.build.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.build.yml deleted file mode 100644 index 20c45cd030..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.build.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3.3' -services: - backend: - build: - context: ./backend - dockerfile: backend.dockerfile - args: - env: dev - celeryworker: - build: - context: ./backend - dockerfile: celeryworker.dockerfile - args: - env: dev - frontend: - build: - context: ./frontend - args: - FRONTEND_ENV: dev diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.command.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.command.yml deleted file mode 100644 index 3bddda8a49..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.command.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3.3' -services: - proxy: - command: --docker \ - --docker.watch \ - --docker.exposedbydefault=false \ - --constraints=tag==${TRAEFIK_TAG} \ - --logLevel=DEBUG \ - --accessLog \ - --web - # backend: - # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing - backend: - command: /start-reload.sh diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.env.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.env.yml deleted file mode 100644 index 78681312b1..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.env.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: '3.3' -services: - backend: - environment: - - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 - - SERVER_HOST=http://${DOMAIN} - celeryworker: - environment: - - RUN=celery worker -A app.worker -l info -Q main-queue -c 1 - - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 - - SERVER_HOST=http://${DOMAIN} diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.labels.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.labels.yml deleted file mode 100644 index 46799e62b8..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.labels.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3.3' -services: - proxy: - labels: - - traefik.frontend.rule=Host:${DOMAIN} - - traefik.enable=true - - traefik.port=80 - backend: - labels: - - traefik.frontend.rule=PathPrefix:/api,/docs,/redoc - - traefik.enable=true - - traefik.port=80 - - traefik.tags=${TRAEFIK_TAG} - frontend: - labels: - - traefik.frontend.rule=PathPrefix:/ - - traefik.enable=true - - traefik.port=80 - - traefik.tags=${TRAEFIK_TAG} diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.networks.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.networks.yml deleted file mode 100644 index 3a3990f11c..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.networks.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: '3.3' -services: - backend: - networks: - default: - aliases: - - ${DOMAIN} diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.ports.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.ports.yml deleted file mode 100644 index af26b17436..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.ports.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '3.3' -services: - pgadmin: - ports: - - '5050:5050' - proxy: - ports: - - '80:80' - - '8090:8080' - flower: - ports: - - '5555:5555' - backend: - ports: - - '8888:8888' diff --git a/{{cookiecutter.project_slug}}/docker-compose.dev.volumes.yml b/{{cookiecutter.project_slug}}/docker-compose.dev.volumes.yml deleted file mode 100644 index f332614096..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.dev.volumes.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: '3.3' -services: - backend: - volumes: - - ./backend/app:/app - celeryworker: - volumes: - - ./backend/app:/app diff --git a/{{cookiecutter.project_slug}}/docker-compose.override.yml b/{{cookiecutter.project_slug}}/docker-compose.override.yml new file mode 100644 index 0000000000..fae2649be5 --- /dev/null +++ b/{{cookiecutter.project_slug}}/docker-compose.override.yml @@ -0,0 +1,75 @@ +version: "3.3" +services: + + proxy: + ports: + - "80:80" + - "8090:8080" + command: --docker \ + --docker.watch \ + --docker.exposedbydefault=false \ + --constraints=tag==${TRAEFIK_TAG} \ + --logLevel=DEBUG \ + --accessLog \ + --web + labels: + - traefik.frontend.rule=Host:${DOMAIN} + - traefik.enable=true + - traefik.port=80 + + pgadmin: + ports: + - "5050:5050" + + flower: + ports: + - "5555:5555" + + backend: + ports: + - "8888:8888" + volumes: + - ./backend/app:/app + environment: + - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 + - SERVER_HOST=http://${DOMAIN} + build: + context: ./backend + dockerfile: backend.dockerfile + args: + env: dev + # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing + command: /start-reload.sh + labels: + - traefik.frontend.rule=PathPrefix:/api,/docs,/redoc + - traefik.enable=true + - traefik.port=80 + - traefik.tags=${TRAEFIK_TAG} + + celeryworker: + volumes: + - ./backend/app:/app + environment: + - RUN=celery worker -A app.worker -l info -Q main-queue -c 1 + - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 + - SERVER_HOST=http://${DOMAIN} + build: + context: ./backend + dockerfile: celeryworker.dockerfile + args: + env: dev + + frontend: + build: + context: ./frontend + args: + FRONTEND_ENV: dev + labels: + - traefik.frontend.rule=PathPrefix:/ + - traefik.enable=true + - traefik.port=80 + - traefik.tags=${TRAEFIK_TAG} + +networks: + traefik-public: + external: ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-false} diff --git a/{{cookiecutter.project_slug}}/docker-compose.shared.admin.yml b/{{cookiecutter.project_slug}}/docker-compose.shared.admin.yml deleted file mode 100644 index 72b9de388c..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.shared.admin.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: '3.3' -services: - pgadmin: - image: dpage/pgadmin4 - depends_on: - - db - env_file: - - .env - proxy: - image: traefik:v1.7 - volumes: - - /var/run/docker.sock:/var/run/docker.sock - flower: - image: mher/flower - env_file: - - .env - command: - - "--broker=amqp://guest@queue:5672//" - # For the "Broker" tab to work in the flower UI, uncomment the following command argument, - # and change the queue service's image as described in docker-compose.shared.base-images.yml - # - "--broker_api=http://guest:guest@queue:15672/api//" diff --git a/{{cookiecutter.project_slug}}/docker-compose.shared.base-images.yml b/{{cookiecutter.project_slug}}/docker-compose.shared.base-images.yml deleted file mode 100644 index c2e6043fef..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.shared.base-images.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: '3.3' -services: - db: - image: postgres:12 - queue: - image: rabbitmq:3 - # Using the below image instead is required to enable the "Broker" tab in the flower UI: - # image: rabbitmq:3-management - # - # You also have to change the flower command as documented in docker-compose.shared.admin.yml diff --git a/{{cookiecutter.project_slug}}/docker-compose.shared.depends.yml b/{{cookiecutter.project_slug}}/docker-compose.shared.depends.yml deleted file mode 100644 index 2a52bde86b..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.shared.depends.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.3' -services: - backend: - depends_on: - - db - celeryworker: - depends_on: - - db - - queue diff --git a/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml b/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml deleted file mode 100644 index bd970e548e..0000000000 --- a/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml +++ /dev/null @@ -1,23 +0,0 @@ -version: '3.3' -services: - db: - env_file: - - .env - environment: - - PGDATA=/var/lib/postgresql/data/pgdata - backend: - env_file: - - .env - environment: - - SERVER_NAME=${DOMAIN} - - SERVER_HOST=https://${DOMAIN} - # Allow explicit env var override for tests - - SMTP_HOST=${SMTP_HOST} - celeryworker: - env_file: - - .env - environment: - - SERVER_NAME=${DOMAIN} - - SERVER_HOST=https://${DOMAIN} - # Allow explicit env var override for tests - - SMTP_HOST=${SMTP_HOST} diff --git a/{{cookiecutter.project_slug}}/docker-compose.yml b/{{cookiecutter.project_slug}}/docker-compose.yml new file mode 100644 index 0000000000..64528cf14c --- /dev/null +++ b/{{cookiecutter.project_slug}}/docker-compose.yml @@ -0,0 +1,159 @@ +version: "3.3" +services: + + proxy: + image: traefik:v1.7 + networks: + - ${TRAEFIK_PUBLIC_NETWORK} + - default + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: --docker \ + --docker.swarmmode \ + --docker.watch \ + --docker.exposedbydefault=false \ + --constraints=tag==${TRAEFIK_TAG} \ + --logLevel=INFO \ + --accessLog \ + --web + deploy: + placement: + constraints: + - node.role == manager + labels: + # For the configured domain + - traefik.frontend.rule=Host:${DOMAIN} + # For a domain with and without 'www' + # Comment the previous line above and un-comment the line below + # - "traefik.frontend.rule=Host:www.${DOMAIN},${DOMAIN}" + - traefik.enable=true + - traefik.port=80 + - traefik.tags=${TRAEFIK_PUBLIC_TAG} + - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} + - traefik.frontend.entryPoints=http,https + - traefik.frontend.redirect.entryPoint=https + # Uncomment the config line below to detect and redirect www to non-www (or the contrary) + # The lines above for traefik.frontend.rule are needed too + # - "traefik.frontend.redirect.regex=^https?://(www.)?(${DOMAIN})/(.*)" + # To redirect from non-www to www un-comment the line below + # - "traefik.frontend.redirect.replacement=https://www.${DOMAIN}/$$3" + # To redirect from www to non-www un-comment the line below + # - "traefik.frontend.redirect.replacement=https://${DOMAIN}/$$3" + + db: + image: postgres:12 + volumes: + - app-db-data:/var/lib/postgresql/data/pgdata + env_file: + - .env + environment: + - PGDATA=/var/lib/postgresql/data/pgdata + deploy: + placement: + constraints: + - node.labels.${STACK_NAME}.app-db-data == true + + pgadmin: + image: dpage/pgadmin4 + networks: + - ${TRAEFIK_PUBLIC_NETWORK} + - default + depends_on: + - db + env_file: + - .env + deploy: + labels: + - traefik.frontend.rule=Host:pgadmin.${DOMAIN} + - traefik.enable=true + - traefik.port=5050 + - traefik.tags=${TRAEFIK_PUBLIC_TAG} + - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} + - traefik.frontend.entryPoints=http,https + - traefik.frontend.redirect.entryPoint=https + + queue: + image: rabbitmq:3 + # Using the below image instead is required to enable the "Broker" tab in the flower UI: + # image: rabbitmq:3-management + # + # You also have to change the flower command + + flower: + image: mher/flower + networks: + - ${TRAEFIK_PUBLIC_NETWORK} + - default + env_file: + - .env + command: + - "--broker=amqp://guest@queue:5672//" + # For the "Broker" tab to work in the flower UI, uncomment the following command argument, + # and change the queue service's image as well + # - "--broker_api=http://guest:guest@queue:15672/api//" + deploy: + labels: + - traefik.frontend.rule=Host:flower.${DOMAIN} + - traefik.enable=true + - traefik.port=5555 + - traefik.tags=${TRAEFIK_PUBLIC_TAG} + - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK} + - traefik.frontend.entryPoints=http,https + - traefik.frontend.redirect.entryPoint=https + + backend: + image: '${DOCKER_IMAGE_BACKEND}:${TAG-latest}' + depends_on: + - db + env_file: + - .env + environment: + - SERVER_NAME=${DOMAIN} + - SERVER_HOST=https://${DOMAIN} + # Allow explicit env var override for tests + - SMTP_HOST=${SMTP_HOST} + build: + context: ./backend + dockerfile: backend.dockerfile + deploy: + labels: + - traefik.frontend.rule=PathPrefix:/api,/docs,/redoc + - traefik.enable=true + - traefik.port=80 + - traefik.tags=${TRAEFIK_TAG} + + celeryworker: + image: '${DOCKER_IMAGE_CELERYWORKER}:${TAG-latest}' + depends_on: + - db + - queue + env_file: + - .env + environment: + - SERVER_NAME=${DOMAIN} + - SERVER_HOST=https://${DOMAIN} + # Allow explicit env var override for tests + - SMTP_HOST=${SMTP_HOST} + build: + context: ./backend + dockerfile: celeryworker.dockerfile + + frontend: + image: '${DOCKER_IMAGE_FRONTEND}:${TAG-latest}' + build: + context: ./frontend + args: + FRONTEND_ENV: ${FRONTEND_ENV-production} + deploy: + labels: + - traefik.frontend.rule=PathPrefix:/ + - traefik.enable=true + - traefik.port=80 + - traefik.tags=${TRAEFIK_TAG} + +volumes: + app-db-data: + +networks: + traefik-public: + external: ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-true} diff --git a/{{cookiecutter.project_slug}}/scripts/build-push.sh b/{{cookiecutter.project_slug}}/scripts/build-push.sh index 998e439e2f..425703de89 100644 --- a/{{cookiecutter.project_slug}}/scripts/build-push.sh +++ b/{{cookiecutter.project_slug}}/scripts/build-push.sh @@ -7,4 +7,4 @@ TAG=${TAG} \ FRONTEND_ENV=${FRONTEND_ENV-production} \ . ./scripts/build.sh -docker-compose -f docker-stack.yml push +docker-compose -f docker-compose.yml push diff --git a/{{cookiecutter.project_slug}}/scripts/build.sh b/{{cookiecutter.project_slug}}/scripts/build.sh index a76f3c2207..8ac32fb3f6 100644 --- a/{{cookiecutter.project_slug}}/scripts/build.sh +++ b/{{cookiecutter.project_slug}}/scripts/build.sh @@ -6,8 +6,5 @@ set -e TAG=${TAG} \ FRONTEND_ENV=${FRONTEND_ENV-production} \ docker-compose \ --f docker-compose.deploy.build.yml \ --f docker-compose.deploy.images.yml \ -config > docker-stack.yml - -docker-compose -f docker-stack.yml build +-f docker-compose.yml \ +build diff --git a/{{cookiecutter.project_slug}}/scripts/deploy.sh b/{{cookiecutter.project_slug}}/scripts/deploy.sh index 3e24f9e1f9..95d043e80f 100644 --- a/{{cookiecutter.project_slug}}/scripts/deploy.sh +++ b/{{cookiecutter.project_slug}}/scripts/deploy.sh @@ -8,17 +8,9 @@ TRAEFIK_TAG=${TRAEFIK_TAG} \ STACK_NAME=${STACK_NAME} \ TAG=${TAG} \ docker-compose \ --f docker-compose.shared.admin.yml \ --f docker-compose.shared.base-images.yml \ --f docker-compose.shared.depends.yml \ --f docker-compose.shared.env.yml \ --f docker-compose.deploy.command.yml \ --f docker-compose.deploy.images.yml \ --f docker-compose.deploy.labels.yml \ --f docker-compose.deploy.networks.yml \ --f docker-compose.deploy.volumes-placement.yml \ +-f docker-compose.yml \ config > docker-stack.yml docker-auto-labels docker-stack.yml -docker stack deploy -c docker-stack.yml --with-registry-auth ${STACK_NAME} +docker stack deploy -c docker-stack.yml --with-registry-auth "${STACK_NAME}" diff --git a/{{cookiecutter.project_slug}}/scripts/test-local.sh b/{{cookiecutter.project_slug}}/scripts/test-local.sh index da69063961..4c180f21d3 100644 --- a/{{cookiecutter.project_slug}}/scripts/test-local.sh +++ b/{{cookiecutter.project_slug}}/scripts/test-local.sh @@ -3,27 +3,13 @@ # Exit in case of error set -e +docker-compose down -v --remove-orphans # Remove possibly previous broken stacks left hanging after an error + if [ $(uname -s) = "Linux" ]; then echo "Remove __pycache__ files" sudo find . -type d -name __pycache__ -exec rm -r {} \+ fi -docker-compose \ - -f docker-compose.shared.admin.yml \ - -f docker-compose.shared.base-images.yml \ - -f docker-compose.shared.depends.yml \ - -f docker-compose.shared.env.yml \ - -f docker-compose.dev.build.yml \ - -f docker-compose.dev.env.yml \ - -f docker-compose.dev.labels.yml \ - -f docker-compose.dev.networks.yml \ - -f docker-compose.dev.ports.yml \ - -f docker-compose.dev.volumes.yml \ - config > docker-stack.yml - -# -f docker-compose.dev.command.yml \ - -docker-compose -f docker-stack.yml build -docker-compose -f docker-stack.yml down -v --remove-orphans # Remove possibly previous broken stacks left hanging after an error -docker-compose -f docker-stack.yml up -d -docker-compose -f docker-stack.yml exec -T backend-tests /tests-start.sh "$@" +docker-compose build +docker-compose up -d +docker-compose exec -T backend bash /app/tests-start.sh "$@" diff --git a/{{cookiecutter.project_slug}}/scripts/test.sh b/{{cookiecutter.project_slug}}/scripts/test.sh index 305b5015b5..78b4db90e0 100644 --- a/{{cookiecutter.project_slug}}/scripts/test.sh +++ b/{{cookiecutter.project_slug}}/scripts/test.sh @@ -3,12 +3,11 @@ # Exit in case of error set -e -DOMAIN=backend SMTP_HOST="" \ +DOMAIN=backend \ +SMTP_HOST="" \ +TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL=false \ docker-compose \ --f docker-compose.shared.base-images.yml \ --f docker-compose.shared.env.yml \ --f docker-compose.shared.depends.yml \ --f docker-compose.deploy.build.yml \ +-f docker-compose.yml \ config > docker-stack.yml docker-compose -f docker-stack.yml build From dbe6509c99c4f3de38da478db55cd0ee6da5df35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sun, 19 Apr 2020 16:30:03 +0200 Subject: [PATCH 2/2] :wrench: Remove TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL from .env --- {{cookiecutter.project_slug}}/.env | 3 --- {{cookiecutter.project_slug}}/docker-compose.override.yml | 3 ++- {{cookiecutter.project_slug}}/docker-compose.yml | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/{{cookiecutter.project_slug}}/.env b/{{cookiecutter.project_slug}}/.env index 79f70aeed2..6211634c62 100644 --- a/{{cookiecutter.project_slug}}/.env +++ b/{{cookiecutter.project_slug}}/.env @@ -41,6 +41,3 @@ POSTGRES_DB=app PGADMIN_LISTEN_PORT=5050 PGADMIN_DEFAULT_EMAIL={{cookiecutter.pgadmin_default_user}} PGADMIN_DEFAULT_PASSWORD={{cookiecutter.pgadmin_default_user_password}} - -# Traefik Public network for testing and local dev -TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL=false diff --git a/{{cookiecutter.project_slug}}/docker-compose.override.yml b/{{cookiecutter.project_slug}}/docker-compose.override.yml index fae2649be5..931cb2a189 100644 --- a/{{cookiecutter.project_slug}}/docker-compose.override.yml +++ b/{{cookiecutter.project_slug}}/docker-compose.override.yml @@ -72,4 +72,5 @@ services: networks: traefik-public: - external: ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-false} + # For local dev, don't expect an external Traefik network + external: false diff --git a/{{cookiecutter.project_slug}}/docker-compose.yml b/{{cookiecutter.project_slug}}/docker-compose.yml index 64528cf14c..8bdf3db11d 100644 --- a/{{cookiecutter.project_slug}}/docker-compose.yml +++ b/{{cookiecutter.project_slug}}/docker-compose.yml @@ -156,4 +156,5 @@ volumes: networks: traefik-public: + # Allow setting it to false for testing external: ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-true}