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 и минималистичная структура проекта
This commit is contained in:
@@ -41,12 +41,11 @@ DB_NAME=db.sqlite3
|
|||||||
# DB_PORT=3306
|
# DB_PORT=3306
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Пути для файлов (относительно проекта)
|
# Пути для файлов (относительно корня проекта)
|
||||||
# ========================================
|
# ========================================
|
||||||
MEDIA_ROOT=public/media
|
MEDIA_ROOT=public/media
|
||||||
STATIC_ROOT=public/static
|
STATIC_ROOT=public/static
|
||||||
SITEMAP_ROOT=public
|
SITEMAP_ROOT=public
|
||||||
TOUCH_RELOAD_PATH=logs/touchreload.txt
|
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Настройки почты (опционально)
|
# Настройки почты (опционально)
|
||||||
|
|||||||
9
.github/copilot-instructions.md
vendored
Normal file
9
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Вы - опытный помощник по программированию GitHub Copilot.
|
||||||
|
Всегда отвечай на русском языке, если не указано иное.
|
||||||
|
Комментируй код, который ты генерируешь, чтобы объяснить его функциональность на русском языке.
|
||||||
|
Не удаляй старые комментарии. Код которых хочешь удалить скрывай в комментариях.
|
||||||
|
При написании кода следуй стандартам PEP 8 для Python.
|
||||||
|
Используй современные возможности Python (3.12+) и Django (6.0+).
|
||||||
|
Предпочитай `poetry` для управления зависимостями.
|
||||||
|
Подробнее комментировать каждое действие.
|
||||||
|
Всегда спрашивай да/нет пред деплоем, git commit и git push.
|
||||||
10
.idea/.gitignore
generated
vendored
Normal file
10
.idea/.gitignore
generated
vendored
Normal file
@@ -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/
|
||||||
29
.idea/2024-test-rosmorport.iml
generated
Normal file
29
.idea/2024-test-rosmorport.iml
generated
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="django" name="Django">
|
||||||
|
<configuration>
|
||||||
|
<option name="rootFolder" value="$MODULE_DIR$/rosmorport_tsts" />
|
||||||
|
<option name="settingsModule" value="rosmorport_tsts/settings.py" />
|
||||||
|
<option name="manageScript" value="$MODULE_DIR$/rosmorport_tsts/manage.py" />
|
||||||
|
<option name="environment" value="<map/>" />
|
||||||
|
<option name="doNotUseTestRunner" value="false" />
|
||||||
|
<option name="trackFilePattern" value="migrations" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/rosmorport_tsts" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.14 (rosmorport-tsts-OiaYl72h-py3.14)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
<component name="PyDocumentationSettings">
|
||||||
|
<option name="format" value="PLAIN" />
|
||||||
|
<option name="myDocStringFormat" value="Plain" />
|
||||||
|
</component>
|
||||||
|
<component name="TemplatesService">
|
||||||
|
<option name="TEMPLATE_CONFIGURATION" value="Django" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Ask2AgentMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
45
.idea/copilotDiffState.xml
generated
Normal file
45
.idea/copilotDiffState.xml
generated
Normal file
File diff suppressed because one or more lines are too long
10
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
10
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<Languages>
|
||||||
|
<language minSize="57" name="Python" />
|
||||||
|
</Languages>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.8" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.14 (rosmorport-tsts-OiaYl72h-py3.14)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/2024-test-rosmorport.iml" filepath="$PROJECT_DIR$/.idea/2024-test-rosmorport.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
.idea/vcs.xml
generated
Normal file
7
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
10
Dockerfile
10
Dockerfile
@@ -42,10 +42,7 @@ ENV PATH="/opt/venv/bin:$PATH"
|
|||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Создаём необходимые директории
|
# Создаём необходимые директории
|
||||||
RUN mkdir -p /app/logs /app/public/media /app/public/static
|
RUN mkdir -p /app/public/media /app/public/static /app/database
|
||||||
|
|
||||||
# Собираем статические файлы
|
|
||||||
RUN python rosmorport_tsts/manage.py collectstatic --noinput --clear || true
|
|
||||||
|
|
||||||
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
|
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
|
||||||
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
||||||
@@ -54,6 +51,7 @@ USER appuser
|
|||||||
# Открываем порт
|
# Открываем порт
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
|
|
||||||
# Команда для запуска приложения (используем gunicorn)
|
# CMD - выполняет миграции, собирает статику и запускает Gunicorn
|
||||||
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--timeout", "120", "rosmorport_tsts.wsgi:application"]
|
# Использует 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"]
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ services:
|
|||||||
- public_media:/app/public/media
|
- public_media:/app/public/media
|
||||||
- public_static:/app/public/static
|
- public_static:/app/public/static
|
||||||
- database:/app/database
|
- database:/app/database
|
||||||
- ./logs:/app/logs
|
|
||||||
|
|
||||||
# Перенаправляем порты
|
# Перенаправляем порты
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ services:
|
|||||||
- ./public/static:/app/public/static
|
- ./public/static:/app/public/static
|
||||||
- ./public/media:/app/public/media
|
- ./public/media:/app/public/media
|
||||||
- ./database:/app/database
|
- ./database:/app/database
|
||||||
- ./logs:/app/logs
|
|
||||||
|
|
||||||
# Перенаправляем порты
|
# Перенаправляем порты
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
.
|
|
||||||
@@ -194,7 +194,6 @@ MEDIA_URL = 'media/'
|
|||||||
PROJECT_ROOT = BASE_DIR.parent
|
PROJECT_ROOT = BASE_DIR.parent
|
||||||
MEDIA_ROOT = get_env('MEDIA_ROOT', str(PROJECT_ROOT / 'public' / 'media'))
|
MEDIA_ROOT = get_env('MEDIA_ROOT', str(PROJECT_ROOT / 'public' / 'media'))
|
||||||
SITEMAP_ROOT = get_env('SITEMAP_ROOT', str(PROJECT_ROOT / 'public'))
|
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
|
# Статические файлы - разные конфигурации для DEBUG и PRODUCTION
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
from django.contrib.staticfiles.handlers import StaticFilesHandler
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rosmorport_tsts.settings')
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user