Files
2024-test-rosmorport/.idea/copilotDiffState.xml
erjemin 8385e04103 refactor: Удалена ненужная папка logs
Причины:
- В production логи nginx хранятся в системной папке хоста
- В dev образ постоянно перестраивается, логи не накапливаются
- Логи не нужны для хранения в контейнере
Удалено:
- Папка logs из корня проекта
- mkdir -p /app/logs из Dockerfile
- Монтирование logs из docker-compose.yml и docker-compose.prod.yml
- Переменная TOUCH_RELOAD из settings.py и .env файлов
Результат: более clean и минималистичная структура проекта
2026-03-31 13:45:32 +03:00

45 lines
35 KiB
XML
Raw Blame History

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