fix: switch to dev settings for Docker services and improve env config
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 1m41s
CI/CD Pipeline / Run Tests (push) Failing after 1m47s
CI/CD Pipeline / Build & Push Images (push) Successful in 2m12s
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Successful in 49s
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 1m41s
CI/CD Pipeline / Run Tests (push) Failing after 1m47s
CI/CD Pipeline / Build & Push Images (push) Successful in 2m12s
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Successful in 49s
This commit is contained in:
79
docker-compose.dev.yml
Normal file
79
docker-compose.dev.yml
Normal file
@@ -0,0 +1,79 @@
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
dockerfile: ./docker/Dockerfile.web
|
||||
context: .
|
||||
container_name: mostovik_web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=False
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - ALLOWED_HOSTS=*
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
- ./media:/app/media
|
||||
- ./staticfiles:/app/staticfiles
|
||||
command: >
|
||||
sh -c "python src/manage.py migrate &&
|
||||
python src/manage.py collectstatic --noinput &&
|
||||
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 120"
|
||||
|
||||
celery_worker:
|
||||
build:
|
||||
dockerfile: ./docker/Dockerfile.celery
|
||||
context: .
|
||||
container_name: mostovik_celery_worker
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=True
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
command: celery -A config worker
|
||||
|
||||
celery_beat:
|
||||
build:
|
||||
dockerfile: ./docker/Dockerfile.celery
|
||||
context: .
|
||||
container_name: mostovik_celery_beat
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=False
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
command: celery -A config beat
|
||||
@@ -3,21 +3,22 @@ services:
|
||||
image: 10.10.0.10:3000/avm/mostovik-web:${IMAGE_TAG:-dev}
|
||||
container_name: mostovik_web
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
- DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
- DEBUG=False
|
||||
- SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
- ALLOWED_HOSTS=*
|
||||
- POSTGRES_HOST=127.0.0.1
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=mostovik
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_SSLMODE=disable
|
||||
- REDIS_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
ports:
|
||||
- "8000:8000"
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=False
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - ALLOWED_HOSTS=*
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
- ./media:/app/media
|
||||
@@ -32,19 +33,19 @@ services:
|
||||
container_name: mostovik_celery_worker
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
- DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
- DEBUG=True
|
||||
- SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
- POSTGRES_HOST=127.0.0.1
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=mostovik
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_SSLMODE=disable
|
||||
- REDIS_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=True
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
command: celery -A config worker
|
||||
@@ -54,19 +55,19 @@ services:
|
||||
container_name: mostovik_celery_beat
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
- DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
- DEBUG=False
|
||||
- SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
- POSTGRES_HOST=127.0.0.1
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=mostovik
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_SSLMODE=disable
|
||||
- REDIS_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
# environment:
|
||||
# - DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
# - DEBUG=False
|
||||
# - SECRET_KEY=${SECRET_KEY:-django-insecure-dev-key-change-in-production}
|
||||
# - POSTGRES_HOST=127.0.0.1
|
||||
# - POSTGRES_PORT=5432
|
||||
# - POSTGRES_DB=mostovik
|
||||
# - POSTGRES_USER=postgres
|
||||
# - POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_SSLMODE=disable
|
||||
# - REDIS_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_BROKER_URL=redis://127.0.0.1:6379/0
|
||||
# - CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
command: celery -A config beat
|
||||
|
||||
34
docker-compose.service.yml
Normal file
34
docker-compose.service.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
services:
|
||||
db:
|
||||
image: postgres:15.10
|
||||
container_name: db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-mostovik}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
volumes:
|
||||
- ./data/db:/var/lib/postgresql/data
|
||||
- ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
ports:
|
||||
- "5432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: redis
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- ./data/redis:/data
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
services:
|
||||
db:
|
||||
image: postgres:15.10
|
||||
container_name: mostovik_db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-mostovik_dev}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
volumes:
|
||||
- ./data/db:/var/lib/postgresql/data
|
||||
- ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
ports:
|
||||
- "5432:5432"
|
||||
networks:
|
||||
- mostovik_network
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: mostovik_redis
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- ./data/redis:/data
|
||||
networks:
|
||||
- mostovik_network
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.web
|
||||
container_name: mostovik_web
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- DEBUG=${DEBUG:-True}
|
||||
- SECRET_KEY=${SECRET_KEY:-django-insecure-development-key}
|
||||
- POSTGRES_HOST=db
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=${POSTGRES_DB:-mostovik_dev}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-postgres}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
|
||||
- REDIS_URL=redis://redis:6379/0
|
||||
- CELERY_BROKER_URL=redis://redis:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://redis:6379/0
|
||||
volumes:
|
||||
- ./src:/app/src
|
||||
- ./logs:/app/logs
|
||||
- ./media:/app/media
|
||||
- ./staticfiles:/app/staticfiles
|
||||
ports:
|
||||
- "8000:8000"
|
||||
networks:
|
||||
- mostovik_network
|
||||
command: >
|
||||
sh -c "python src/manage.py migrate &&
|
||||
python src/manage.py collectstatic --noinput &&
|
||||
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3"
|
||||
|
||||
celery_worker:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.celery
|
||||
container_name: mostovik_celery_worker
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- DEBUG=${DEBUG:-True}
|
||||
- POSTGRES_HOST=db
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=${POSTGRES_DB:-mostovik_dev}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-postgres}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
|
||||
- REDIS_URL=redis://redis:6379/0
|
||||
- CELERY_BROKER_URL=redis://redis:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://redis:6379/0
|
||||
volumes:
|
||||
- ./src:/app/src
|
||||
- ./logs:/app/logs
|
||||
networks:
|
||||
- mostovik_network
|
||||
command: celery -A config worker --loglevel=info
|
||||
|
||||
celery_beat:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.celery
|
||||
container_name: mostovik_celery_beat
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- DEBUG=${DEBUG:-True}
|
||||
- POSTGRES_HOST=db
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=${POSTGRES_DB:-mostovik_dev}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-postgres}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
|
||||
- REDIS_URL=redis://redis:6379/0
|
||||
- CELERY_BROKER_URL=redis://redis:6379/0
|
||||
- CELERY_RESULT_BACKEND=redis://redis:6379/0
|
||||
volumes:
|
||||
- ./src:/app/src
|
||||
- ./logs:/app/logs
|
||||
networks:
|
||||
- mostovik_network
|
||||
command: celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
|
||||
|
||||
networks:
|
||||
mostovik_network:
|
||||
driver: bridge
|
||||
@@ -48,6 +48,7 @@ RUN mkdir -p logs src/logs
|
||||
|
||||
# PYTHONPATH для доступа к модулям
|
||||
ENV PYTHONPATH=/app/src
|
||||
ENV DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
|
||||
# Создание пользователя для запуска приложения
|
||||
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
|
||||
|
||||
@@ -31,6 +31,7 @@ RUN mkdir -p logs staticfiles media src/logs src/static src/staticfiles src/medi
|
||||
|
||||
# PYTHONPATH для доступа к модулям
|
||||
ENV PYTHONPATH=/app/src
|
||||
ENV DJANGO_SETTINGS_MODULE=config.settings.dev
|
||||
|
||||
# Создание пользователя для запуска приложения
|
||||
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
|
||||
|
||||
@@ -41,7 +41,6 @@ dependencies = [
|
||||
"djangorestframework-simplejwt>=5.3.1",
|
||||
"drf-yasg>=1.21.10",
|
||||
"pillow>=12.1.0",
|
||||
"python-decouple>=3.8",
|
||||
"coreapi>=2.3.3",
|
||||
"django-rest-swagger>=2.2.0",
|
||||
"model-bakery>=1.17.0",
|
||||
|
||||
@@ -1,42 +1,15 @@
|
||||
"""
|
||||
Base settings for Django project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 3.2.25.
|
||||
"""
|
||||
|
||||
from datetime import timedelta
|
||||
from pathlib import Path
|
||||
|
||||
from .env import build_config, env_list
|
||||
|
||||
# BASE_DIR = .../project_root
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
||||
|
||||
APP_VERSION = "1.0.0"
|
||||
|
||||
config = build_config(BASE_DIR)
|
||||
|
||||
|
||||
def get_env(key: str, default=None):
|
||||
return config(key, default=default)
|
||||
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = get_env(
|
||||
"SECRET_KEY", "django-insecure-development-key-change-in-production"
|
||||
)
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = get_env("DEBUG", True)
|
||||
if isinstance(DEBUG, str):
|
||||
DEBUG = DEBUG.lower() in ("true", "1", "yes")
|
||||
|
||||
ALLOWED_HOSTS = env_list(
|
||||
get_env("ALLOWED_HOSTS", "localhost,127.0.0.1"), default=["localhost", "127.0.0.1"]
|
||||
)
|
||||
|
||||
if isinstance(ALLOWED_HOSTS, str):
|
||||
ALLOWED_HOSTS = ALLOWED_HOSTS.split(",")
|
||||
# SECRET_KEY, DEBUG, ALLOWED_HOSTS определяются в dev.py / production.py
|
||||
|
||||
# Application definition
|
||||
INSTALLED_APPS = [
|
||||
@@ -190,46 +163,15 @@ TEMPLATES = [
|
||||
|
||||
WSGI_APPLICATION = "config.wsgi.application"
|
||||
|
||||
# Database
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.postgresql",
|
||||
"NAME": get_env("POSTGRES_DB", "project_db"),
|
||||
"USER": get_env("POSTGRES_USER", "project_user"),
|
||||
"PASSWORD": get_env("POSTGRES_PASSWORD", "project_password"),
|
||||
"HOST": get_env("POSTGRES_HOST", "db"),
|
||||
"PORT": int(get_env("POSTGRES_PORT", "5432")),
|
||||
},
|
||||
}
|
||||
|
||||
# Cache configuration
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": get_env("REDIS_URL", "redis://localhost:6379/0"),
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
# Database и Cache определяются в dev.py / production.py
|
||||
|
||||
# =============================================================================
|
||||
# PARSERS SETTINGS
|
||||
# =============================================================================
|
||||
|
||||
# Zakupki.gov.ru API Token (получить через Госуслуги)
|
||||
ZAKUPKI_TOKEN = get_env("ZAKUPKI_TOKEN", "")
|
||||
|
||||
# FNS file lock TTL (seconds)
|
||||
FNS_LOCK_TTL_SECONDS = int(get_env("FNS_LOCK_TTL_SECONDS", "3600"))
|
||||
|
||||
# Proxy list for parsers (comma-separated)
|
||||
PARSER_PROXIES = get_env("PARSER_PROXIES", "")
|
||||
if isinstance(PARSER_PROXIES, str) and PARSER_PROXIES:
|
||||
PARSER_PROXIES = [p.strip() for p in PARSER_PROXIES.split(",") if p.strip()]
|
||||
else:
|
||||
PARSER_PROXIES = []
|
||||
ZAKUPKI_TOKEN = "019c03d7-e1f6-7091-b296-8c88b4c585dd"
|
||||
FNS_LOCK_TTL_SECONDS = 3600
|
||||
PARSER_PROXIES = []
|
||||
|
||||
|
||||
# Password validation
|
||||
@@ -305,8 +247,7 @@ REST_FRAMEWORK = {
|
||||
},
|
||||
}
|
||||
|
||||
# JWT settings
|
||||
|
||||
# JWT settings (SIGNING_KEY определяется в dev.py / production.py)
|
||||
SIMPLE_JWT = {
|
||||
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=60),
|
||||
"REFRESH_TOKEN_LIFETIME": timedelta(days=7),
|
||||
@@ -314,7 +255,6 @@ SIMPLE_JWT = {
|
||||
"BLACKLIST_AFTER_ROTATION": True,
|
||||
"UPDATE_LAST_LOGIN": True,
|
||||
"ALGORITHM": "HS256",
|
||||
"SIGNING_KEY": SECRET_KEY,
|
||||
"VERIFYING_KEY": None,
|
||||
"AUDIENCE": None,
|
||||
"ISSUER": None,
|
||||
@@ -335,11 +275,7 @@ SIMPLE_JWT = {
|
||||
}
|
||||
|
||||
# CORS settings
|
||||
CORS_ALLOWED_ORIGINS = get_env(
|
||||
"CORS_ALLOWED_ORIGINS", "http://localhost:3000,http://127.0.0.1:3000"
|
||||
)
|
||||
if isinstance(CORS_ALLOWED_ORIGINS, str):
|
||||
CORS_ALLOWED_ORIGINS = CORS_ALLOWED_ORIGINS.split(",")
|
||||
CORS_ALLOWED_ORIGINS = ["http://localhost:3000", "http://127.0.0.1:3000"]
|
||||
CORS_ALLOW_CREDENTIALS = True
|
||||
|
||||
# =============================================================================
|
||||
@@ -417,5 +353,4 @@ FNS_FAILED_DIRECTORY = BASE_DIR / "input" / "fns" / "failed"
|
||||
# Checko API Settings (checko.ru)
|
||||
# =============================================================================
|
||||
|
||||
# API key for Checko.ru service
|
||||
CHECKO_API_KEY = get_env("CHECKO_API_KEY", "")
|
||||
CHECKO_API_KEY = "pRiEnJuD1tclsLCb"
|
||||
|
||||
@@ -1,51 +1,47 @@
|
||||
import os
|
||||
"""
|
||||
Development settings - закрытый контур, без переменных окружения.
|
||||
Docker на macOS - используется host.docker.internal.
|
||||
"""
|
||||
|
||||
from .base import *
|
||||
|
||||
# Development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
|
||||
SECRET_KEY = "django-insecure-development-key-mostovik-2024"
|
||||
DEBUG = True
|
||||
ALLOWED_HOSTS = ["*"]
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = os.getenv(
|
||||
"SECRET_KEY", "django-insecure-development-key-change-in-production"
|
||||
)
|
||||
# JWT
|
||||
SIMPLE_JWT["SIGNING_KEY"] = SECRET_KEY
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = os.getenv("DEBUG", "True").lower() in ("true", "1", "yes")
|
||||
|
||||
ALLOWED_HOSTS = ["localhost", "127.0.0.1", "0.0.0.0", "testserver", "*"] # noqa: S104
|
||||
|
||||
# Database for development
|
||||
# Database
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.postgresql",
|
||||
"NAME": os.getenv("POSTGRES_DB", "mostovik"),
|
||||
"USER": os.getenv("POSTGRES_USER", "postgres"),
|
||||
"PASSWORD": os.getenv("POSTGRES_PASSWORD", "postgres"),
|
||||
"HOST": os.getenv("POSTGRES_HOST", "127.0.0.1"),
|
||||
"PORT": os.getenv("POSTGRES_PORT", "5432"),
|
||||
"NAME": "mostovik",
|
||||
"USER": "postgres",
|
||||
"PASSWORD": "postgres",
|
||||
"HOST": "host.docker.internal",
|
||||
"PORT": "5432",
|
||||
}
|
||||
}
|
||||
|
||||
# Celery Configuration for Development
|
||||
CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL", "redis://127.0.0.1:6379/0")
|
||||
CELERY_RESULT_BACKEND = os.getenv("CELERY_RESULT_BACKEND", "redis://127.0.0.1:6379/0")
|
||||
# Celery
|
||||
CELERY_BROKER_URL = "redis://host.docker.internal:6379/0"
|
||||
CELERY_RESULT_BACKEND = "redis://host.docker.internal:6379/0"
|
||||
CELERY_ACCEPT_CONTENT = ["json"]
|
||||
CELERY_TASK_SERIALIZER = "json"
|
||||
CELERY_RESULT_SERIALIZER = "json"
|
||||
CELERY_TIMEZONE = "Europe/Moscow"
|
||||
|
||||
# Email backend for development
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
|
||||
# Cache configuration for development
|
||||
REDIS_URL = os.getenv("REDIS_URL", "redis://127.0.0.1:6379/1")
|
||||
# Cache
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": REDIS_URL,
|
||||
"LOCATION": "redis://host.docker.internal:6379/1",
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
# Email
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Iterable
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from decouple import AutoConfig, Config, RepositoryEnv
|
||||
|
||||
|
||||
def build_config(base_dir: Path):
|
||||
env_file = base_dir / ".env"
|
||||
if env_file.exists():
|
||||
return Config(RepositoryEnv(str(env_file)))
|
||||
return AutoConfig(search_path=base_dir)
|
||||
|
||||
|
||||
def env_bool(value: Any, default: bool = False) -> bool:
|
||||
if value is None:
|
||||
return default
|
||||
if isinstance(value, bool):
|
||||
return value
|
||||
if isinstance(value, (int, float)):
|
||||
return bool(value)
|
||||
s = str(value).strip().lower()
|
||||
if s in {"1", "true", "yes", "y", "on"}:
|
||||
return True
|
||||
if s in {"0", "false", "no", "n", "off"}:
|
||||
return False
|
||||
return default
|
||||
|
||||
|
||||
def env_int(value: Any, default: int = 0) -> int:
|
||||
try:
|
||||
return int(str(value).strip())
|
||||
except Exception:
|
||||
return default
|
||||
|
||||
|
||||
def env_list(value: Any, default: Iterable[str] = ()) -> list[str]:
|
||||
"""
|
||||
Поддерживает:
|
||||
- "a,b,c"
|
||||
- "a, b, c"
|
||||
- пустые значения
|
||||
"""
|
||||
if value is None:
|
||||
return list(default)
|
||||
if isinstance(value, (list, tuple, set)):
|
||||
return [str(x).strip() for x in value if str(x).strip()]
|
||||
s = str(value).strip()
|
||||
if not s:
|
||||
return list(default)
|
||||
return [p.strip() for p in s.split(",") if p.strip()]
|
||||
@@ -1,59 +1,54 @@
|
||||
import os
|
||||
"""
|
||||
Production settings - закрытый контур, все настройки захардкожены.
|
||||
Docker Compose сеть - используются имена сервисов (db, redis).
|
||||
"""
|
||||
|
||||
from .base import *
|
||||
|
||||
# Production settings
|
||||
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = os.getenv("SECRET_KEY")
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
# TODO: сменить на безопасный ключ перед деплоем
|
||||
SECRET_KEY = "production-secret-key-mostovik-change-me-2024"
|
||||
DEBUG = False
|
||||
ALLOWED_HOSTS = ["*"] # TODO: указать конкретные хосты
|
||||
|
||||
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",")
|
||||
# JWT
|
||||
SIMPLE_JWT["SIGNING_KEY"] = SECRET_KEY
|
||||
|
||||
# HTTPS settings
|
||||
SECURE_SSL_REDIRECT = True
|
||||
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||
SECURE_HSTS_SECONDS = 31536000
|
||||
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
||||
SECURE_HSTS_PRELOAD = True
|
||||
# HTTPS settings (раскомментировать если используется HTTPS)
|
||||
# SECURE_SSL_REDIRECT = True
|
||||
# SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||
# SECURE_HSTS_SECONDS = 31536000
|
||||
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
||||
# SECURE_HSTS_PRELOAD = True
|
||||
# SESSION_COOKIE_SECURE = True
|
||||
# CSRF_COOKIE_SECURE = True
|
||||
|
||||
# Session security
|
||||
SESSION_COOKIE_SECURE = True
|
||||
CSRF_COOKIE_SECURE = True
|
||||
|
||||
# Database for production
|
||||
# Database
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.postgresql",
|
||||
"NAME": os.getenv("POSTGRES_DB"),
|
||||
"USER": os.getenv("POSTGRES_USER"),
|
||||
"PASSWORD": os.getenv("POSTGRES_PASSWORD"),
|
||||
"HOST": os.getenv("POSTGRES_HOST"),
|
||||
"PORT": os.getenv("POSTGRES_PORT", "5432"),
|
||||
"OPTIONS": {
|
||||
"sslmode": os.getenv("POSTGRES_SSLMODE", "require"),
|
||||
},
|
||||
"NAME": "mostovik",
|
||||
"USER": "postgres",
|
||||
"PASSWORD": "postgres", # TODO: сменить пароль
|
||||
"HOST": "db",
|
||||
"PORT": "5432",
|
||||
}
|
||||
}
|
||||
|
||||
# Celery Configuration for Production
|
||||
CELERY_BROKER_URL = os.getenv("REDIS_URL", "redis://redis:6379/0")
|
||||
CELERY_RESULT_BACKEND = os.getenv("REDIS_URL", "redis://redis:6379/0")
|
||||
# Celery
|
||||
CELERY_BROKER_URL = "redis://redis:6379/0"
|
||||
CELERY_RESULT_BACKEND = "redis://redis:6379/0"
|
||||
CELERY_ACCEPT_CONTENT = ["json"]
|
||||
CELERY_TASK_SERIALIZER = "json"
|
||||
CELERY_RESULT_SERIALIZER = "json"
|
||||
CELERY_TIMEZONE = "UTC"
|
||||
CELERY_TIMEZONE = "Europe/Moscow"
|
||||
CELERY_TASK_ALWAYS_EAGER = False
|
||||
CELERY_WORKER_PREFETCH_MULTIPLIER = 1
|
||||
|
||||
# Cache configuration for production
|
||||
# Cache
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": os.getenv("REDIS_CACHE_URL", "redis://redis:6379/1"),
|
||||
"LOCATION": "redis://redis:6379/1",
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
"CONNECTION_POOL_KWARGS": {
|
||||
@@ -64,7 +59,7 @@ CACHES = {
|
||||
}
|
||||
}
|
||||
|
||||
# Logging for production (stdout for Docker)
|
||||
# Logging (stdout для Docker)
|
||||
LOGGING = {
|
||||
"version": 1,
|
||||
"disable_existing_loggers": False,
|
||||
@@ -91,15 +86,5 @@ LOGGING = {
|
||||
"level": "INFO",
|
||||
"propagate": False,
|
||||
},
|
||||
"apps.data_processor": {
|
||||
"handlers": ["console"],
|
||||
"level": "INFO",
|
||||
"propagate": False,
|
||||
},
|
||||
"apps.scraping": {
|
||||
"handlers": ["console"],
|
||||
"level": "INFO",
|
||||
"propagate": False,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
"""
|
||||
Test settings - для запуска тестов.
|
||||
"""
|
||||
|
||||
from .base import *
|
||||
|
||||
# Test settings
|
||||
SECRET_KEY = "django-insecure-test-key-only-for-testing" # noqa: S105
|
||||
|
||||
SECRET_KEY = "django-insecure-test-key-only-for-testing"
|
||||
DEBUG = True
|
||||
|
||||
# JWT
|
||||
SIMPLE_JWT["SIGNING_KEY"] = SECRET_KEY
|
||||
|
||||
ALLOWED_HOSTS = ["localhost", "127.0.0.1", "0.0.0.0", "testserver"] # noqa: S104
|
||||
|
||||
# Use in-memory SQLite database for faster tests
|
||||
|
||||
Reference in New Issue
Block a user