From e5763b9428c369250a1764f3a8e3122b96307ad3 Mon Sep 17 00:00:00 2001 From: VladislavCR Date: Thu, 7 Mar 2024 22:18:54 +0300 Subject: [PATCH 1/4] fixed nginx, qa deploy --- .github/workflows/qa_deploy.yaml | 5 +++++ infra/docker-compose-dev.yaml | 2 +- infra/nginx/nginx.conf | 11 ++++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qa_deploy.yaml b/.github/workflows/qa_deploy.yaml index 4a86c70..538a3c5 100644 --- a/.github/workflows/qa_deploy.yaml +++ b/.github/workflows/qa_deploy.yaml @@ -75,6 +75,11 @@ jobs: DOCKERHUB_USERNAME_FRONT=${{ secrets.DOCKERHUB_USERNAME_FRONT }} DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }} ALLOWED_HOSTS=${{ secrets.ALLOWED_HOSTS }} + EMAIL_HOST=${{ secrets.EMAIL_HOST }} + EMAIL_HOST_USER=${{ secrets.EMAIL_HOST_USER }} + EMAIL_HOST_PASSWORD=${{ secrets.EMAIL_HOST_PASSWORD }} + NEXT_PUBLIC_CAPTCHA_SITE_KEY=${{ secrets.NEXT_PUBLIC_CAPTCHA_SITE_KEY }} + NEXT_SHARP_PATH=${{ secrets.NEXT_SHARP_PATH }} _EOF_ - name: Copy docker-compose-prod.yaml via ssh uses: appleboy/scp-action@master diff --git a/infra/docker-compose-dev.yaml b/infra/docker-compose-dev.yaml index 338e099..dd6ec46 100644 --- a/infra/docker-compose-dev.yaml +++ b/infra/docker-compose-dev.yaml @@ -24,7 +24,7 @@ services: - db nginx: - build: /nginx/. + build: ./nginx/. ports: - "80:80" - "443:443" diff --git a/infra/nginx/nginx.conf b/infra/nginx/nginx.conf index e7e42ae..3e6f234 100644 --- a/infra/nginx/nginx.conf +++ b/infra/nginx/nginx.conf @@ -3,6 +3,8 @@ server { listen [::]:80; server_name 89.23.117.80 devcodepet.tw1.ru 89.23.117.168 testcodepet.tw1.ru localhost; + root /staticfiles; + location /api/v1/ { proxy_set_header Host $http_host; proxy_pass http://backend:8000/api/v1/; @@ -12,8 +14,11 @@ server { proxy_pass http://backend:8000/admin/; } location / { - alias /staticfiles/; - index index.html; - try_files $uri $uri/ /index.html; + try_files $uri $uri.html $uri/ =404; + } + + error_page 404 /404.html; + location = /404.html { + internal; } } From da1bc137d23cf9f999d712cee3d4ebdda8245acd Mon Sep 17 00:00:00 2001 From: VladislavCR Date: Thu, 7 Mar 2024 23:03:35 +0300 Subject: [PATCH 2/4] fixed deploy, optimization docker files and docker compose --- .github/workflows/deploy.yaml | 18 +++++++++--------- Dockerfile | 4 +--- .env.example => infra/.env.example | 17 +++++++++-------- infra/docker-compose-dev.yaml | 12 +++--------- infra/docker-compose-prod.yaml | 6 +----- infra/nginx/Dockerfile | 2 +- 6 files changed, 24 insertions(+), 35 deletions(-) rename .env.example => infra/.env.example (67%) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 34d853a..93b097e 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -10,16 +10,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out the repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Push to DockerHub - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./ push: true @@ -30,16 +30,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out the repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Push to DockerHub - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./infra/nginx/ push: true @@ -52,7 +52,7 @@ jobs: - build_and_push_to_docker_hub_nginx steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Create project directory and .env-file uses: appleboy/ssh-action@master with: diff --git a/Dockerfile b/Dockerfile index af07588..31928ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,8 +10,6 @@ RUN apt-get update && apt-get install -y vim RUN pip install -r requirements.txt --no-cache-dir -COPY . . - -WORKDIR /backend/src/backend +COPY /src/backend/. . CMD gunicorn --bind 0.0.0.0:8000 config.wsgi diff --git a/.env.example b/infra/.env.example similarity index 67% rename from .env.example rename to infra/.env.example index c72ea28..83a9a78 100644 --- a/.env.example +++ b/infra/.env.example @@ -9,13 +9,14 @@ ALLOWED_HOSTS=localhost,127.0.0.1, USE_SQLITE=True # Для PostgeSQL -# DB_ENGINE=django.db.backends.postgresql -# DB_NAME= -# POSTGRES_USER= -# POSTGRES_PASSWORD= -# DB_HOST= -# DB_PORT= +DB_ENGINE=django.db.backends.postgresql +DB_NAME= +POSTGRES_USER= +POSTGRES_PASSWORD= +DB_HOST= +DB_PORT= # Переменные для работы с docker. -DOCKERHUB_USERNAME=username -PROJECT_NAME=project_name +DOCKERHUB_USERNAME_FRONT= +DOCKERHUB_USERNAME= +PROJECT_NAME= diff --git a/infra/docker-compose-dev.yaml b/infra/docker-compose-dev.yaml index dd6ec46..4d22fbb 100644 --- a/infra/docker-compose-dev.yaml +++ b/infra/docker-compose-dev.yaml @@ -1,22 +1,16 @@ services: db: - image: postgres:latest + image: postgres:16.2-alpine restart: always - ports: - - "5432:5432" + env_file: .env volumes: - db_value:/var/lib/postgresql/data/ - environment: - - POSTGRES_DB=db - - POSTGRES_USER=admin - - POSTGRES_PASSWORD=admin + backend: build: ../. env_file: .env - ports: - - "8000:8000" volumes: - static_volume:/backend_static/ - ./.env:/app diff --git a/infra/docker-compose-prod.yaml b/infra/docker-compose-prod.yaml index 055fc6a..b6b7a47 100644 --- a/infra/docker-compose-prod.yaml +++ b/infra/docker-compose-prod.yaml @@ -7,7 +7,7 @@ volumes: services: db: - image: postgres:latest + image: postgres:16.2-alpine restart: always env_file: .env ports: @@ -19,8 +19,6 @@ services: image: ${DOCKERHUB_USERNAME}/${PROJECT_NAME}_backend:latest restart: always env_file: .env - ports: - - "8000:8000" volumes: - static_volume:/backend_static/ - media_value:/backend_media/ @@ -31,8 +29,6 @@ services: image: ${DOCKERHUB_USERNAME_FRONT}/${PROJECT_NAME}_frontend:latest command: cp -r out/. /frontend_static/ env_file: .env - ports: - - "3000:3000" volumes: - static_volume:/frontend_static depends_on: diff --git a/infra/nginx/Dockerfile b/infra/nginx/Dockerfile index f525310..1a461de 100644 --- a/infra/nginx/Dockerfile +++ b/infra/nginx/Dockerfile @@ -1,2 +1,2 @@ -FROM nginx:1.25 +FROM nginx:1.25.4-alpine-slim COPY nginx.conf /etc/nginx/templates/default.conf.template From 97c34acc70425658ce9ee47f8487ea3cb8be2194 Mon Sep 17 00:00:00 2001 From: VladislavCR Date: Thu, 7 Mar 2024 23:52:37 +0300 Subject: [PATCH 3/4] fixed setting-base, optimized docker compose --- infra/docker-compose-prod.yaml | 19 +++++++++++++++---- src/backend/config/settings/base.py | 26 +++++--------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/infra/docker-compose-prod.yaml b/infra/docker-compose-prod.yaml index b6b7a47..5758814 100644 --- a/infra/docker-compose-prod.yaml +++ b/infra/docker-compose-prod.yaml @@ -8,22 +8,32 @@ volumes: services: db: image: postgres:16.2-alpine - restart: always + restart: unless-stopped env_file: .env ports: - "5432:5432" + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_PASSWORD}" + ] + interval: 5s + timeout: 3s + retries: 5 volumes: - pg_data:/var/lib/postgresql/data backend: image: ${DOCKERHUB_USERNAME}/${PROJECT_NAME}_backend:latest - restart: always + restart: unless-stopped env_file: .env volumes: - static_volume:/backend_static/ - media_value:/backend_media/ depends_on: - - db + db: + condition: service_healthy frontend: image: ${DOCKERHUB_USERNAME_FRONT}/${PROJECT_NAME}_frontend:latest @@ -32,7 +42,8 @@ services: volumes: - static_volume:/frontend_static depends_on: - - db + db: + condition: service_healthy nginx: image: ${DOCKERHUB_USERNAME}/${PROJECT_NAME}_nginx:latest diff --git a/src/backend/config/settings/base.py b/src/backend/config/settings/base.py index 190385c..c05f80f 100644 --- a/src/backend/config/settings/base.py +++ b/src/backend/config/settings/base.py @@ -1,4 +1,3 @@ -import re from os import getenv from pathlib import Path @@ -78,35 +77,20 @@ DATABASES = { "default": { "ENGINE": getenv("DB_ENGINE", default="django.db.backends.postgresql"), - "NAME": getenv("POSTGRES_DB", default="db_test"), + "NAME": getenv("DB_NAME", default="db_test"), "USER": getenv("POSTGRES_USER", default="admin_test"), "PASSWORD": getenv("POSTGRES_PASSWORD", default="postgre_admin"), - "HOST": getenv("POSTGRES_HOST", default="db_test"), - "PORT": getenv("POSTGRES_PORT", default=5432), + "HOST": getenv("DB_HOST", default="db_test"), + "PORT": getenv("DB_PORT", default=5432), } } AUTH_PASSWORD_VALIDATORS = [ { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", - }, - { - "NAME": "apps.users.validators.PasswordMaximumLengthValidator", - "OPTIONS": { - "message": "Пароль слишком длинный.", - }, - }, - { - "NAME": "apps.users.validators.PasswordRegexValidator", - "OPTIONS": { - "message": "В пароле недопустимые символы.", - "help_message": "В пароле допускаются цифры, буквы и спецсимовлы -!#$%%&'*+/=?^_;():@,.<>`{}~«»", - "regex": r"(^[-%!#$&*'+/=?^_;():@,.<>`{|}~-«»0-9A-ZА-ЯЁ]+)\Z", - "flags": re.IGNORECASE, - }, + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", From 845659cea61ba6e22ded90ef5d1dedec4d07c00f Mon Sep 17 00:00:00 2001 From: VladislavCR Date: Fri, 8 Mar 2024 22:46:31 +0300 Subject: [PATCH 4/4] fixed setting base --- src/backend/config/settings/base.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/backend/config/settings/base.py b/src/backend/config/settings/base.py index c05f80f..e1343a7 100644 --- a/src/backend/config/settings/base.py +++ b/src/backend/config/settings/base.py @@ -1,3 +1,4 @@ +import re from os import getenv from pathlib import Path @@ -87,10 +88,25 @@ AUTH_PASSWORD_VALIDATORS = [ { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + "NAME": "apps.users.validators.PasswordMaximumLengthValidator", + "OPTIONS": { + "message": "Пароль слишком длинный.", + }, + }, + { + "NAME": "apps.users.validators.PasswordRegexValidator", + "OPTIONS": { + "message": "В пароле недопустимые символы.", + "help_message": "В пароле допускаются цифры, буквы и спецсимовлы -!#$%%&'*+/=?^_;():@,.<>`{}~«»", + "regex": r"(^[-%!#$&*'+/=?^_;():@,.<>`{|}~-«»0-9A-ZА-ЯЁ]+)\Z", + "flags": re.IGNORECASE, + }, + }, + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",