diff --git a/.env.example b/.env.example
index 5f02f51..1c2e45f 100644
--- a/.env.example
+++ b/.env.example
@@ -41,12 +41,11 @@ DB_NAME=db.sqlite3
# DB_PORT=3306
# ========================================
-# Пути для файлов (относительно проекта)
+# Пути для файлов (относительно корня проекта)
# ========================================
MEDIA_ROOT=public/media
STATIC_ROOT=public/static
SITEMAP_ROOT=public
-TOUCH_RELOAD_PATH=logs/touchreload.txt
# ========================================
# Настройки почты (опционально)
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 0000000..4492c68
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,9 @@
+Вы - опытный помощник по программированию GitHub Copilot.
+Всегда отвечай на русском языке, если не указано иное.
+Комментируй код, который ты генерируешь, чтобы объяснить его функциональность на русском языке.
+Не удаляй старые комментарии. Код которых хочешь удалить скрывай в комментариях.
+При написании кода следуй стандартам PEP 8 для Python.
+Используй современные возможности Python (3.12+) и Django (6.0+).
+Предпочитай `poetry` для управления зависимостями.
+Подробнее комментировать каждое действие.
+Всегда спрашивай да/нет пред деплоем, git commit и git push.
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..ab1f416
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/2024-test-rosmorport.iml b/.idea/2024-test-rosmorport.iml
new file mode 100644
index 0000000..b1e6b9a
--- /dev/null
+++ b/.idea/2024-test-rosmorport.iml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml
new file mode 100644
index 0000000..1f2ea11
--- /dev/null
+++ b/.idea/copilot.data.migration.ask2agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilotDiffState.xml b/.idea/copilotDiffState.xml
new file mode 100644
index 0000000..e5b477f
--- /dev/null
+++ b/.idea/copilotDiffState.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..d3b20ab
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..f2a68b8
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..793bf6f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..8306744
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 16966ad..e05d7b8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -42,10 +42,7 @@ ENV PATH="/opt/venv/bin:$PATH"
COPY . .
# Создаём необходимые директории
-RUN mkdir -p /app/logs /app/public/media /app/public/static
-
-# Собираем статические файлы
-RUN python rosmorport_tsts/manage.py collectstatic --noinput --clear || true
+RUN mkdir -p /app/public/media /app/public/static /app/database
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
@@ -54,6 +51,7 @@ USER appuser
# Открываем порт
EXPOSE 8000
-# Команда для запуска приложения (используем gunicorn)
-CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--timeout", "120", "rosmorport_tsts.wsgi:application"]
+# CMD - выполняет миграции, собирает статику и запускает Gunicorn
+# Использует sh для выполнения нескольких команд последовательно
+CMD ["sh", "-c", "cd /app/rosmorport_tsts && echo '>>> Applying database migrations...' && python manage.py migrate --noinput && echo '>>> Collecting static files...' && python manage.py collectstatic --noinput --clear && echo '>>> Starting Gunicorn...' && gunicorn --bind 0.0.0.0:8000 --workers 4 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 1000 --timeout 60 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application"]
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index 13f568e..0023de0 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -32,7 +32,6 @@ services:
- public_media:/app/public/media
- public_static:/app/public/static
- database:/app/database
- - ./logs:/app/logs
# Перенаправляем порты
ports:
diff --git a/docker-compose.yml b/docker-compose.yml
index dc06877..c501b8f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -27,7 +27,6 @@ services:
- ./public/static:/app/public/static
- ./public/media:/app/public/media
- ./database:/app/database
- - ./logs:/app/logs
# Перенаправляем порты
ports:
diff --git a/logs/touchreload.txt b/logs/touchreload.txt
deleted file mode 100644
index 7566c14..0000000
--- a/logs/touchreload.txt
+++ /dev/null
@@ -1 +0,0 @@
-.
\ No newline at end of file
diff --git a/rosmorport_tsts/rosmorport_tsts/settings.py b/rosmorport_tsts/rosmorport_tsts/settings.py
index 60dd606..0c5bbf4 100644
--- a/rosmorport_tsts/rosmorport_tsts/settings.py
+++ b/rosmorport_tsts/rosmorport_tsts/settings.py
@@ -194,7 +194,6 @@ MEDIA_URL = 'media/'
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:
diff --git a/rosmorport_tsts/rosmorport_tsts/wsgi.py b/rosmorport_tsts/rosmorport_tsts/wsgi.py
index 139d40b..45e1890 100644
--- a/rosmorport_tsts/rosmorport_tsts/wsgi.py
+++ b/rosmorport_tsts/rosmorport_tsts/wsgi.py
@@ -10,7 +10,14 @@ https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
import os
from django.core.wsgi import get_wsgi_application
+from django.contrib.staticfiles.handlers import StaticFilesHandler
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rosmorport_tsts.settings')
-application = get_wsgi_application()
+# Получаем базовое WSGI приложение Django
+django_application = get_wsgi_application()
+
+# Оборачиваем в StaticFilesHandler для отдачи статических файлов
+# Это позволяет Gunicorn отдавать статику без необходимости отдельного веб-сервера
+# Примечание: В production рекомендуется использовать nginx/apache вместо этого
+application = StaticFilesHandler(django_application)