diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a2b0562..2f95e77f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,10 @@ stages: - - deploy + - deploy + - db + - stop + +variables: + REVIEW_DOMAIN: back-review.lil.school deploy_prod: stage: deploy @@ -8,9 +13,56 @@ deploy_prod: - cd /work/www/lil.school/docker/ - docker-compose -f docker-compose-prod.yml up --build -d environment: - name: prod/site + name: prod url: https://lil.school only: - - master + - release tags: - prod + +deploy_review: + stage: deploy + script: + - cd docker + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME up --build -d + environment: + name: review/$CI_COMMIT_REF_SLUG + url: https://$CI_COMMIT_REF_SLUG-$REVIEW_DOMAIN + on_stop: stop-review + tags: + - review + only: + - branches + except: + - release + +stop-review: + stage: stop + environment: + name: review/$CI_COMMIT_REF_SLUG + action: stop + script: + - cd docker + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME down + - rm -rf /work/data/back_${CI_COMMIT_REF_NAME}/ + when: manual + only: + - branches + except: + - release + tags: + - review + +prod-db: + stage: db + script: + - cd docker + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME restart db + - echo 'DROP DATABASE IF EXISTS lilcity; CREATE DATABASE lilcity' | docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME exec -T -u postgres postgres psql postgres + when: manual + only: + - branches + except: + - release + tags: + - review diff --git a/docker/docker-compose-prod.yml b/docker/docker-compose-prod.yml index 440f2cbf..c3b97c9e 100644 --- a/docker/docker-compose-prod.yml +++ b/docker/docker-compose-prod.yml @@ -10,6 +10,11 @@ services: - .env volumes: - ./data/postgres:/var/lib/postgresql/data + logging: &logging + driver: "json-file" + options: + max-size: "1m" + max-file: "1" redis: image: redis:4.0.9-alpine @@ -18,6 +23,7 @@ services: - "127.0.0.1:6379:6379" volumes: - ./data/redis:/data + logging: *logging app: build: @@ -36,3 +42,4 @@ services: links: - db - redis + logging: *logging diff --git a/docker/docker-compose-review.yml b/docker/docker-compose-review.yml new file mode 100644 index 00000000..e84063a1 --- /dev/null +++ b/docker/docker-compose-review.yml @@ -0,0 +1,64 @@ +version: '3' + +services: + db: + image: postgres:10.3-alpine + restart: always + ports: + - "5432:5432" + env_file: + - .env + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/postgres:/var/lib/postgresql/data + logging: &logging + driver: "json-file" + options: + max-size: "1m" + max-file: "1" + networks: + - internal + - review + labels: + - traefik.enable=false + + redis: + image: redis:4.0.9-alpine + restart: always + ports: + - "127.0.0.1:6379:6379" + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/redis:/data + logging: *logging + networks: + - internal + - review + labels: + - traefik.enable=false + + app: + build: + context: ../ + dockerfile: docker/Dockerfile + restart: always + env_file: + - .env + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/media:/app/media + ports: + - "${PORT}:80" + depends_on: + - db + - redis + logging: *logging + networks: + - internal + - review + labels: + - traefik.frontend.rule=Host:${REVIEW_HOST} + - traefik.docker.network=review + +networks: + internal: + review: + external: + name: review diff --git a/docker/entrypoint_app.sh b/docker/entrypoint_app.sh index a61879d2..a346f89c 100755 --- a/docker/entrypoint_app.sh +++ b/docker/entrypoint_app.sh @@ -1,5 +1,6 @@ #!/bin/sh cd /app +chown www-data:www-data /app/media python manage.py migrate #python manage.py loaddata /app/apps/*/fixtures/*.json python2.7 /usr/bin/supervisord -n