From 3abc5cbc30612b71c1b9528b0f35a2dc9984f2b9 Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Sun, 8 May 2022 14:36:30 +0300 Subject: [PATCH] deployment --- .../deploy-dev.yaml | 0 .deploy/deploy-prod.yaml | 329 ++++++++++++++++++ .gitlab-ci.yml | 6 +- 3 files changed, 333 insertions(+), 2 deletions(-) rename docker-compose-deploy.yaml => .deploy/deploy-dev.yaml (100%) create mode 100644 .deploy/deploy-prod.yaml diff --git a/docker-compose-deploy.yaml b/.deploy/deploy-dev.yaml similarity index 100% rename from docker-compose-deploy.yaml rename to .deploy/deploy-dev.yaml diff --git a/.deploy/deploy-prod.yaml b/.deploy/deploy-prod.yaml new file mode 100644 index 0000000..9edf42a --- /dev/null +++ b/.deploy/deploy-prod.yaml @@ -0,0 +1,329 @@ +version: "3.4" + + +services: + + nginx: + image: nginx + volumes: + - ./nginx:/etc/nginx + - /sprint-data/static:/var/www/html/static + networks: + - net + ports: + - "80:80" + deploy: + mode: replicated + restart_policy: + condition: any + placement: + constraints: [node.role == manager] + update_config: + parallelism: 1 + order: start-first + + postgres: + image: postgres + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: $DB_PASSWORD + POSTGRES_DB: sprint + volumes: + - /sprint-data/postgres-data:/var/lib/postgresql/data + networks: + - net + deploy: + mode: replicated + restart_policy: + condition: any + placement: + constraints: [node.role == manager] + update_config: + parallelism: 1 + order: start-first + + rabbitmq: + image: rabbitmq:3.7.9-management + networks: + - net + deploy: + mode: replicated + restart_policy: + condition: any + placement: + constraints: [node.role == manager] + update_config: + parallelism: 1 + order: start-first + + migrations: + image: mathwave/sprint-repo:sprint + command: ./manage.py migrate + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + deploy: + mode: replicated + restart_policy: + condition: on-failure + + collect_static: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + volumes: + - /sprint-data/static:/usr/src/app/static + command: ./manage.py collectstatic --noinput + deploy: + mode: global + restart_policy: + condition: on-failure + + web: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + VK_SERVICE_TOKEN: $VK_SERVICE_TOKEN + volumes: + - /sprint-data/static:/usr/src/app/static + command: ./manage.py runserver 0.0.0.0:8000 --noreload --insecure + deploy: + mode: replicated + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + checker: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + command: ./manage.py runserver 0.0.0.0:7999 --noreload + deploy: + mode: replicated + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + polling: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + command: ./manage.py runserver 0.0.0.0:7998 --noreload + deploy: + mode: replicated + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + storage: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py storage + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + volumes: + - /sprint-data/data:/usr/src/app/data + deploy: + mode: replicated + restart_policy: + condition: any + placement: + constraints: [node.role == manager] + update_config: + parallelism: 1 + order: start-first + + bot: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + command: ./manage.py bot + deploy: + mode: replicated + restart_policy: + condition: any + update_config: + parallelism: 1 + order: stop-first + + checker_cleaner: + image: mathwave/sprint-repo:sprint + networks: + - net + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + command: ./manage.py checker_cleaner + deploy: + mode: replicated + restart_policy: + condition: any + update_config: + parallelism: 1 + order: stop-first + + worker: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py receive + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + volumes: + - /tmp:/tmp + - /var/run/docker.sock:/var/run/docker.sock + deploy: + mode: replicated + replicas: 8 + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + docker_cleaner: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py docker_cleaner + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + volumes: + - /var/run/docker.sock:/var/run/docker.sock + deploy: + mode: global + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + file_generator: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py file_generator + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + deploy: + mode: replicated + replicas: 1 + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + notification_manager: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py notification_manager + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + deploy: + mode: replicated + replicas: 1 + restart_policy: + condition: any + update_config: + parallelism: 1 + order: start-first + + apply-languages: + image: mathwave/sprint-repo:sprint + networks: + - net + command: ./manage.py apply_languages + environment: + DB_HOST: "postgres" + FS_HOST: "storage" + RABBIT_HOST: "rabbitmq" + DB_PASSWORD: $DB_PASSWORD + DEBUG: $DEBUG + TELEGRAM_TOKEN: $TELEGRAM_TOKEN + deploy: + mode: replicated + restart_policy: + condition: on-failure + +networks: + net: + driver: overlay diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a6179e..c5cd501 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,8 +16,6 @@ build: .deploy: before_script: - docker login -u mathwave -p $DOCKERHUB_PASSWORD - script: - - docker stack deploy -c ./docker-compose-deploy.yaml sprint deploy-dev: extends: @@ -34,6 +32,8 @@ deploy-dev: DB_PASSWORD: "$DB_PASSWORD_DEMO" DEBUG: "true" TELEGRAM_TOKEN: "$TELEGRAM_TOKEN_DEMO" + script: + - docker stack deploy -c ./.deploy/deploy-dev.yaml sprint deploy-prod: extends: @@ -48,3 +48,5 @@ deploy-prod: PORT: 80 DB_PASSWORD: "$DB_PASSWORD_PROD" TELEGRAM_TOKEN: "$TELEGRAM_TOKEN_PROD" + script: + - docker stack deploy -c ./.deploy/deploy-prod.yaml sprint