Причины: - В production логи nginx хранятся в системной папке хоста - В dev образ постоянно перестраивается, логи не накапливаются - Логи не нужны для хранения в контейнере Удалено: - Папка logs из корня проекта - mkdir -p /app/logs из Dockerfile - Монтирование logs из docker-compose.yml и docker-compose.prod.yml - Переменная TOUCH_RELOAD из settings.py и .env файлов Результат: более clean и минималистичная структура проекта
45 lines
35 KiB
XML
45 lines
35 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<project version="4">
|
||
<component name="CopilotDiffPersistence">
|
||
<option name="pendingDiffs">
|
||
<map>
|
||
<entry key="$PROJECT_DIR$/.env">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/.env" />
|
||
<option name="originalContent" value="# ======================================== # Django настройки для локальной разработки # ======================================== DEBUG=True ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0 SECRET_KEY=django-insecure-local-dev-secret-key-not-for-production # Скрытый URL для админ панели (обфускированный чтобы хулиганы не лазали) ADMIN_URL=a-d-m-i-n/ # ======================================== # База данных - SQLite для разработки (в папке database в корне) # ======================================== DB_ENGINE=django.db.backends.sqlite3 DB_NAME=database/db.sqlite3 # ======================================== # Пути для файлов # ======================================== MEDIA_ROOT=public/media STATIC_ROOT=public/static SITEMAP_ROOT=public TOUCH_RELOAD_PATH=logs/touchreload.txt " />
|
||
<option name="updatedContent" value="# ======================================== # Django настройки для локальной разработки # ======================================== DEBUG=True ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0 SECRET_KEY=django-insecure-local-dev-secret-key-not-for-production # Скрытый URL для админ панели (обфускированный чтобы хулиганы не лазали) ADMIN_URL=a-d-m-i-n/ # ======================================== # База данных - SQLite для разработки (в папке database в корне) # ======================================== DB_ENGINE=django.db.backends.sqlite3 DB_NAME=database/db.sqlite3 # ======================================== # Пути для файлов (относительно корня проекта) # ======================================== MEDIA_ROOT=public/media STATIC_ROOT=public/static SITEMAP_ROOT=public " />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
<entry key="$PROJECT_DIR$/docker-compose.prod.yml">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/docker-compose.prod.yml" />
|
||
<option name="originalContent" value="# docker-compose.prod.yml для production развертывания проекта rosmorport_tsts # Использование: docker-compose -f docker-compose.prod.yml up -d version: '3.9' services: # Django приложение в production web: # Строим образ из Dockerfile в текущей директории build: context: . dockerfile: Dockerfile # Имя контейнера container_name: rosmorport_web_prod # Переменные окружения для production environment: - DOCKER_ENV=1 - DEBUG=False - ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,web,pet-clones.cocorico.ru - DB_ENGINE=django.db.backends.postgresql - DB_HOST=db - DB_PORT=5432 - DB_NAME=${POSTGRES_DB:-rosmorport_db} - DB_USER=${POSTGRES_USER:-postgres} - DB_PASSWORD=${POSTGRES_PASSWORD:-postgres} - PYTHONUNBUFFERED=1 # Тома для медиа, статики и БД volumes: - public_media:/app/public/media - public_static:/app/public/static - database:/app/database - ./logs:/app/logs # Перенаправляем порты ports: - "8000:8000" # Зависимость от базы данных depends_on: db: condition: service_healthy # Политика перезапуска restart: unless-stopped # Ограничения ресурсов deploy: resources: limits: cpus: '1' memory: 512M reservations: cpus: '0.5' memory: 256M # PostgreSQL база данных для production db: # Используем официальный образ PostgreSQL image: postgres:16-alpine container_name: rosmorport_db_prod # Переменные окружения environment: - POSTGRES_DB=${POSTGRES_DB:-rosmorport_db} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} # Том для хранения данных БД volumes: - postgres_data:/var/lib/postgresql/data # Портов не открываем - доступ только изнутри контейнеров # ports: # - "5432:5432" # Проверка здоровья сервиса healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] interval: 10s timeout: 5s retries: 5 # Политика перезапуска restart: unless-stopped # Ограничения ресурсов deploy: resources: limits: cpus: '1' memory: 1G reservations: cpus: '0.5' memory: 512M # Nginx для reverse proxy (опционально) # nginx: # image: nginx:alpine # container_name: rosmorport_nginx # volumes: # - ./config/nginx.conf:/etc/nginx/nginx.conf:ro # - django_staticfiles:/app/static:ro # - django_mediafiles:/app/media:ro # ports: # - "80:80" # - "443:443" # depends_on: # - web # restart: unless-stopped # Именованные тома для хранения данных volumes: postgres_data: driver: local public_media: driver: local public_static: driver: local database: driver: local # Сеть для сервисов networks: default: name: rosmorport_network driver: bridge " />
|
||
<option name="updatedContent" value="# docker-compose.prod.yml для production развертывания проекта rosmorport_tsts # Использование: docker-compose -f docker-compose.prod.yml up -d version: '3.9' services: # Django приложение в production web: # Строим образ из Dockerfile в текущей директории build: context: . dockerfile: Dockerfile # Имя контейнера container_name: rosmorport_web_prod # Переменные окружения для production environment: - DOCKER_ENV=1 - DEBUG=False - ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,web,pet-clones.cocorico.ru - DB_ENGINE=django.db.backends.postgresql - DB_HOST=db - DB_PORT=5432 - DB_NAME=${POSTGRES_DB:-rosmorport_db} - DB_USER=${POSTGRES_USER:-postgres} - DB_PASSWORD=${POSTGRES_PASSWORD:-postgres} - PYTHONUNBUFFERED=1 # Тома для медиа, статики и БД volumes: - public_media:/app/public/media - public_static:/app/public/static - database:/app/database # Перенаправляем порты ports: - "8000:8000" # Зависимость от базы данных depends_on: db: condition: service_healthy # Политика перезапуска restart: unless-stopped # Ограничения ресурсов deploy: resources: limits: cpus: '1' memory: 512M reservations: cpus: '0.5' memory: 256M # PostgreSQL база данных для production db: # Используем официальный образ PostgreSQL image: postgres:16-alpine container_name: rosmorport_db_prod # Переменные окружения environment: - POSTGRES_DB=${POSTGRES_DB:-rosmorport_db} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} # Том для хранения данных БД volumes: - postgres_data:/var/lib/postgresql/data # Портов не открываем - доступ только изнутри контейнеров # ports: # - "5432:5432" # Проверка здоровья сервиса healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] interval: 10s timeout: 5s retries: 5 # Политика перезапуска restart: unless-stopped # Ограничения ресурсов deploy: resources: limits: cpus: '1' memory: 1G reservations: cpus: '0.5' memory: 512M # Nginx для reverse proxy (опционально) # nginx: # image: nginx:alpine # container_name: rosmorport_nginx # volumes: # - ./config/nginx.conf:/etc/nginx/nginx.conf:ro # - django_staticfiles:/app/static:ro # - django_mediafiles:/app/media:ro # ports: # - "80:80" # - "443:443" # depends_on: # - web # restart: unless-stopped # Именованные тома для хранения данных volumes: postgres_data: driver: local public_media: driver: local public_static: driver: local database: driver: local # Сеть для сервисов networks: default: name: rosmorport_network driver: bridge " />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
<entry key="$PROJECT_DIR$/docker-compose.yml">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/docker-compose.yml" />
|
||
<option name="originalContent" value="# docker-compose.yml для локальной разработки проекта rosmorport_tsts version: '3.9' services: # Django приложение web: # Строим образ из Dockerfile в текущей директории build: context: . dockerfile: Dockerfile # Имя контейнера container_name: rosmorport_web # Переменные окружения для разработки environment: - DOCKER_ENV=1 - DEBUG=True - ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,web - DB_ENGINE=django.db.backends.sqlite3 - DB_NAME=/app/db.sqlite3 - PYTHONUNBUFFERED=1 # Монтируем текущую директорию для разработки volumes: - .:/app - ./public/static:/app/public/static - ./public/media:/app/public/media - ./database:/app/database - ./logs:/app/logs # Перенаправляем порты ports: - "8000:8000" # Команда для запуска в режиме разработки command: > sh -c "python rosmorport_tsts/manage.py migrate && python rosmorport_tsts/manage.py collectstatic --noinput && python rosmorport_tsts/manage.py runserver 0.0.0.0:8000" # Зависимости (если будут другие сервисы) # depends_on: # - db # Сохраняем контейнер в запущенном состоянии при ошибках stdin_open: true tty: true # Опционально: PostgreSQL база данных для продакшена # db: # image: postgres:16-alpine # container_name: rosmorport_db # environment: # - POSTGRES_DB=rosmorport_db # - POSTGRES_USER=postgres # - POSTGRES_PASSWORD=postgres # volumes: # - postgres_data:/var/lib/postgresql/data # ports: # - "5432:5432" # healthcheck: # test: ["CMD-SHELL", "pg_isready -U postgres"] # interval: 10s # timeout: 5s # retries: 5 # Именованные тома для хранения данных volumes: django_staticfiles: driver: local django_mediafiles: driver: local # postgres_data: # driver: local # Опционально: сеть для сервисов networks: default: name: rosmorport_network driver: bridge " />
|
||
<option name="updatedContent" value="# docker-compose.yml для локальной разработки проекта rosmorport_tsts version: '3.9' services: # Django приложение web: # Строим образ из Dockerfile в текущей директории build: context: . dockerfile: Dockerfile # Имя контейнера container_name: rosmorport_web # Переменные окружения для разработки environment: - DOCKER_ENV=1 - DEBUG=True - ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,web - DB_ENGINE=django.db.backends.sqlite3 - DB_NAME=/app/db.sqlite3 - PYTHONUNBUFFERED=1 # Монтируем текущую директорию для разработки volumes: - .:/app - ./public/static:/app/public/static - ./public/media:/app/public/media - ./database:/app/database # Перенаправляем порты ports: - "8000:8000" # Команда для запуска в режиме разработки command: > sh -c "python rosmorport_tsts/manage.py migrate && python rosmorport_tsts/manage.py collectstatic --noinput && python rosmorport_tsts/manage.py runserver 0.0.0.0:8000" # Зависимости (если будут другие сервисы) # depends_on: # - db # Сохраняем контейнер в запущенном состоянии при ошибках stdin_open: true tty: true # Опционально: PostgreSQL база данных для продакшена # db: # image: postgres:16-alpine # container_name: rosmorport_db # environment: # - POSTGRES_DB=rosmorport_db # - POSTGRES_USER=postgres # - POSTGRES_PASSWORD=postgres # volumes: # - postgres_data:/var/lib/postgresql/data # ports: # - "5432:5432" # healthcheck: # test: ["CMD-SHELL", "pg_isready -U postgres"] # interval: 10s # timeout: 5s # retries: 5 # Именованные тома для хранения данных volumes: django_staticfiles: driver: local django_mediafiles: driver: local # postgres_data: # driver: local # Опционально: сеть для сервисов networks: default: name: rosmorport_network driver: bridge " />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
<entry key="$PROJECT_DIR$/rosmorport_tsts/rosmorport_tsts/settings.py">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/rosmorport_tsts/rosmorport_tsts/settings.py" />
|
||
<option name="originalContent" value="# -*- coding: utf-8 -*- """ Django settings for rosmorport_tsts project. Generated by 'django-admin startproject' using Django 5.0.4. For more information on this file, see https://docs.djangoproject.com/en/5.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/5.0/ref/settings/ """ import os from pathlib import Path # Загружаем переменные окружения из .env файла from dotenv import load_dotenv load_dotenv() # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Функция для получения переменной окружения с преобразованием типа def get_env(key, default=None, dtype=str): """Получить переменную окружения с типом преобразования""" value = os.getenv(key, default) if value is None: raise ValueError(f"Переменная окружения {key} не установлена") if dtype == bool: return value.lower() in ('true', '1', 'yes', 'on') elif dtype == int: return int(value) else: return value # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = get_env('SECRET_KEY', 'django-insecure-change-me-in-production') # SECURITY WARNING: don't run with debug turned on in production! # ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: не работайте в режиме DEBUG в production! DEBUG = get_env('DEBUG', 'True', dtype=bool) # Хосты на которых может работать приложение ALLOWED_HOSTS = get_env('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',') # Application definition (Определение приложений) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rosmorport_tsts.apps.RosmorportTstsConfig', # Приложение проекта ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'rosmorport_tsts.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates-django', ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, # Добавляем шаблонизатор Jinja2 (возможно его использование в будущем) # { # 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 'DIRS': [BASE_DIR / 'templates-jinja2', ], # 'APP_DIRS': True, # 'OPTIONS': { # 'environment': 'roll_cms.my_jinja2_addon.environment', # 'extensions': [ # 'roll_cms.my_jinja2_addon.DjangoNow', # ], # 'context_processors': [ # 'django.template.context_processors.debug', # 'django.template.context_processors.request', # 'django.contrib.auth.context_processors.auth', # 'django.contrib.messages.context_processors.messages', # ], # }, # } ] WSGI_APPLICATION = 'rosmorport_tsts.wsgi.application' # Database # https://docs.djangoproject.com/en/5.0/ref/settings/#databases # Определяем тип БД из переменной окружения DB_ENGINE = get_env('DB_ENGINE', 'django.db.backends.sqlite3') # Конфигурация базы данных в зависимости от типа if 'postgresql' in DB_ENGINE: # PostgreSQL DATABASES = { 'default': { 'ENGINE': DB_ENGINE, 'NAME': get_env('DB_NAME', 'rosmorport_db'), 'USER': get_env('DB_USER', 'postgres'), 'PASSWORD': get_env('DB_PASSWORD', ''), 'HOST': get_env('DB_HOST', 'localhost'), 'PORT': get_env('DB_PORT', '5432'), } } elif 'mysql' in DB_ENGINE: # MySQL DATABASES = { 'default': { 'ENGINE': DB_ENGINE, 'NAME': get_env('DB_NAME', 'rosmorport_db'), 'USER': get_env('DB_USER', 'root'), 'PASSWORD': get_env('DB_PASSWORD', ''), 'HOST': get_env('DB_HOST', 'localhost'), 'PORT': get_env('DB_PORT', '3306'), } } else: # SQLite (по умолчанию для разработки) # DATABASE_ROOT: корень проекта (где лежит manage.py родительской папки) PROJECT_ROOT = BASE_DIR.parent # Получаем DB_NAME из .env, но всегда строим абсолютный путь от PROJECT_ROOT db_name = get_env('DB_NAME', 'database/db.sqlite3') # Если путь не абсолютный, строим его от PROJECT_ROOT if not db_name.startswith('/'): db_path = PROJECT_ROOT / db_name else: db_path = db_name DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(db_path), } } # Password validation (Валидаторы паролей) # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization (Интернационализация) # https://docs.djangoproject.com/en/4.2/topics/i18n/ LANGUAGE_CODE = 'ru-RU' TIME_ZONE = 'Europe/Moscow' USE_I18N = True USE_TZ = True FIRST_DAY_OF_WEEK = 1 # первый день недели: понедельник SHORT_DATE_FORMAT = '%Y-%m-%d' SHORT_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' APPEND_SLASH = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.0/howto/static-files/ STATIC_URL = 'static/' MEDIA_URL = 'media/' # Пути для файлов (из переменных окружения) # BASE_DIR это директория rosmorport_tsts/, поэтому идём на уровень выше PROJECT_ROOT = BASE_DIR.parent MEDIA_ROOT = get_env('MEDIA_ROOT', str(PROJECT_ROOT / 'public' / 'media')) SITEMAP_ROOT = get_env('SITEMAP_ROOT', str(PROJECT_ROOT / 'public')) TOUCH_RELOAD = get_env('TOUCH_RELOAD_PATH', str(PROJECT_ROOT / 'logs' / 'touchreload.txt')) # Статические файлы - разные конфигурации для DEBUG и PRODUCTION if DEBUG: # В режиме разработки Django сам будет раздавать статические файлы # и не нужен STATIC_ROOT, но нужны STATICFILES_DIRS для поиска файлов STATICFILES_DIRS = [ PROJECT_ROOT / 'public' / 'static', ] else: # В продакшене нужен STATIC_ROOT для collectstatic STATIC_ROOT = get_env('STATIC_ROOT', str(PROJECT_ROOT / 'public' / 'static')) STATICFILES_DIRS = [] # Default primary key field type (Тип primary key в моделях) # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' " />
|
||
<option name="updatedContent" value="# -*- coding: utf-8 -*- """ Django settings for rosmorport_tsts project. Generated by 'django-admin startproject' using Django 5.0.4. For more information on this file, see https://docs.djangoproject.com/en/5.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/5.0/ref/settings/ """ import os from pathlib import Path # Загружаем переменные окружения из .env файла from dotenv import load_dotenv load_dotenv() # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Функция для получения переменной окружения с преобразованием типа def get_env(key, default=None, dtype=str): """Получить переменную окружения с типом преобразования""" value = os.getenv(key, default) if value is None: raise ValueError(f"Переменная окружения {key} не установлена") if dtype == bool: return value.lower() in ('true', '1', 'yes', 'on') elif dtype == int: return int(value) else: return value # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = get_env('SECRET_KEY', 'django-insecure-change-me-in-production') # SECURITY WARNING: don't run with debug turned on in production! # ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: не работайте в режиме DEBUG в production! DEBUG = get_env('DEBUG', 'True', dtype=bool) # Хосты на которых может работать приложение ALLOWED_HOSTS = get_env('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',') # Application definition (Определение приложений) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rosmorport_tsts.apps.RosmorportTstsConfig', # Приложение проекта ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'rosmorport_tsts.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates-django', ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, # Добавляем шаблонизатор Jinja2 (возможно его использование в будущем) # { # 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 'DIRS': [BASE_DIR / 'templates-jinja2', ], # 'APP_DIRS': True, # 'OPTIONS': { # 'environment': 'roll_cms.my_jinja2_addon.environment', # 'extensions': [ # 'roll_cms.my_jinja2_addon.DjangoNow', # ], # 'context_processors': [ # 'django.template.context_processors.debug', # 'django.template.context_processors.request', # 'django.contrib.auth.context_processors.auth', # 'django.contrib.messages.context_processors.messages', # ], # }, # } ] WSGI_APPLICATION = 'rosmorport_tsts.wsgi.application' # Database # https://docs.djangoproject.com/en/5.0/ref/settings/#databases # Определяем тип БД из переменной окружения DB_ENGINE = get_env('DB_ENGINE', 'django.db.backends.sqlite3') # Конфигурация базы данных в зависимости от типа if 'postgresql' in DB_ENGINE: # PostgreSQL DATABASES = { 'default': { 'ENGINE': DB_ENGINE, 'NAME': get_env('DB_NAME', 'rosmorport_db'), 'USER': get_env('DB_USER', 'postgres'), 'PASSWORD': get_env('DB_PASSWORD', ''), 'HOST': get_env('DB_HOST', 'localhost'), 'PORT': get_env('DB_PORT', '5432'), } } elif 'mysql' in DB_ENGINE: # MySQL DATABASES = { 'default': { 'ENGINE': DB_ENGINE, 'NAME': get_env('DB_NAME', 'rosmorport_db'), 'USER': get_env('DB_USER', 'root'), 'PASSWORD': get_env('DB_PASSWORD', ''), 'HOST': get_env('DB_HOST', 'localhost'), 'PORT': get_env('DB_PORT', '3306'), } } else: # SQLite (по умолчанию для разработки) # DATABASE_ROOT: корень проекта (где лежит manage.py родительской папки) PROJECT_ROOT = BASE_DIR.parent # Получаем DB_NAME из .env, но всегда строим абсолютный путь от PROJECT_ROOT db_name = get_env('DB_NAME', 'database/db.sqlite3') # Если путь не абсолютный, строим его от PROJECT_ROOT if not db_name.startswith('/'): db_path = PROJECT_ROOT / db_name else: db_path = db_name DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(db_path), } } # Password validation (Валидаторы паролей) # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization (Интернационализация) # https://docs.djangoproject.com/en/4.2/topics/i18n/ LANGUAGE_CODE = 'ru-RU' TIME_ZONE = 'Europe/Moscow' USE_I18N = True USE_TZ = True FIRST_DAY_OF_WEEK = 1 # первый день недели: понедельник SHORT_DATE_FORMAT = '%Y-%m-%d' SHORT_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' APPEND_SLASH = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.0/howto/static-files/ STATIC_URL = 'static/' MEDIA_URL = 'media/' # Пути для файлов (из переменных окружения) # BASE_DIR это директория rosmorport_tsts/, поэтому идём на уровень выше PROJECT_ROOT = BASE_DIR.parent MEDIA_ROOT = get_env('MEDIA_ROOT', str(PROJECT_ROOT / 'public' / 'media')) SITEMAP_ROOT = get_env('SITEMAP_ROOT', str(PROJECT_ROOT / 'public')) # Статические файлы - разные конфигурации для DEBUG и PRODUCTION if DEBUG: # В режиме разработки Django сам будет раздавать статические файлы # и не нужен STATIC_ROOT, но нужны STATICFILES_DIRS для поиска файлов STATICFILES_DIRS = [ PROJECT_ROOT / 'public' / 'static', ] else: # В продакшене нужен STATIC_ROOT для collectstatic STATIC_ROOT = get_env('STATIC_ROOT', str(PROJECT_ROOT / 'public' / 'static')) STATICFILES_DIRS = [] # Default primary key field type (Тип primary key в моделях) # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' " />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
</map>
|
||
</option>
|
||
</component>
|
||
</project> |