- Расширенное логирование с форматом 'main' (IP, время, метод, URL, статус)
- Буферизированные логи с 5-сек очисткой для оптимизации дискового I/O
- Rate-limiting: 100 req/s на IP, burst=200 для легитимного трафика
- Логирование статики и медиа включено для анализа попыток сканирования
- Отключен log_not_found для уменьшения размера логов (404 всё равно в error_log)
- Добавлено уточнение что WhiteNoise уже сжимает статику (gzip в nginx не нужен)
Добавлены три важных файла в папку public:
- robots.txt: инструкции для поисковых ботов
- sitemap.xml: карта сайта с оптимизированной частотой обновления
- llms.md: информация для LLM систем
- Заменен build: ... на image: git.cube2.ru/erjemin/2024-test-rosmorport:latest
- В production образ должен быть собран в CI/CD и загружен из реестра
- Watchtower будет автоматически обновлять контейнер при выходе нового image
- Это более правильный и безопасный подход для production
- Исправлен warning: FROM ... AS builder (заглавные буквы согласно Dockerfile best practices)
- Убран multiplatform (linux/arm64) и остановлены на linux/amd64 для надежности
(arm64 добавим позже когда система будет стабильной)
- Увеличен timeout с 1800 до 3600 сек (30 до 60 минут) для надежности при медленном интернете
- Это должно решить проблему '499 Client Closed Request' при push в реестр Gitea
- Удалено исключение config/ из .dockerignore
- config/nginx/pet-clones--external-nginx.conf требуется для Docker образа
- Используется в docker-compose.prod.yml для настройки nginx reverse-proxy
Обновлен Dockerfile:
- Исправлены права доступа пользователя appuser (создание перед COPY)
- Правильный порядок операций (USER -> COPY -> mkdir)
- Оптимизация для production (workers=1, timeout=120, max-requests=200)
- collectstatic и удаление лишних файлов статики при build
Обновлен docker-compose.prod.yml:
- Переименован контейнер в petclones-site--backend
- Production переменные окружения (DEBUG=False)
- Volumes для media, database и nginx конфигов
- Gunicorn с параметрами для production
- Watchtower для автоматического обновления образов
- Ограничение ресурсов (0.25 CPU, 512M RAM)
- JSON logging с ротаци??бновлен Dockerfile:
- Исправлены права доступа пользователя appuser (создание перед COPY?? Исправлены пр?? Правильный порядок операций (USER -> COPY -> mkdir)
- Оптимизация для prod
- Удален copilotDiffState.xml из git истории
- Добавлено правило в .gitignore для игнорирования этого файла
- Это локальный служебный файл PyCharm, специфичный для машины разработчика
- Не должен попадать в репозиторий и загрязнять git history
Добавлена информация:
- История проекта РосМорПорт с 2004 года
- Ссылка на репозиторий (https://git.cube2.ru/erjemin/2024-test-rosmorport)
- Описание переделки в 2026 году для развертывания в Docker при переносе на новый хостинг
Обновлен Dockerfile с двухэтапной сборкой, экспортом зависимостей через poetry, сборкой статики и удалением лишних файлов (экономия ~20МБ).
Обновлен docker-compose.yml с привязкой к localhost для безопасности.
Обновлен .dockerignore для исключения ненужных файлов (source maps, RTL CSS, TTF).
Добавлены таймауты SQLite в settings.py.
Минимальные параметры Gunicorn: 1 worker, timeout 30s, max-requests 100.
Тестировано и работает на http://localhost:8040
- Конфигурация collectstatic в settings.py:
* STATIC_ROOT = staticfiles/ для собранных файлов
* STATICFILES_DIRS указывает на public/static
* CompressedManifestStaticFilesStorage для production
* WhiteNoiseMiddleware в MIDDLEWARE
* WHITENOISE_ROOT для подачи файлов из /public
- Исправлены пути в settings.py для правильной работы БД
- Обновлена конфигурация urls.py для отдачи статики
- Добавлена зависимость whitenoise ^6.6.0 в pyproject.toml
- Обновлен .gitignore (раскомментирована staticfiles/)
Статика работает в dev режиме и готова для production.
Причины:
- В production логи nginx хранятся в системной папке хоста
- В dev образ постоянно перестраивается, логи не накапливаются
- Логи не нужны для хранения в контейнере
Удалено:
- Папка logs из корня проекта
- mkdir -p /app/logs из Dockerfile
- Монтирование logs из docker-compose.yml и docker-compose.prod.yml
- Переменная TOUCH_RELOAD из settings.py и .env файлов
Результат: более clean и минималистичная структура проекта
- Проблема: при запуске manage.py из rosmorport_tsts/ относительный путь database/db.sqlite3 не работал
- Решение: теперь путь всегда строится как абсолютный от PROJECT_ROOT
- БД корректно находится в database/db.sqlite3 в корне проекта
- Протестировано: проект запускается без ошибок, БД содержит 17 записей из production
Структура БД скопирована с production сервера.
- Добавлена переменная окружения ADMIN_URL для динамического управления URL админки
- Дефолтное значение в коде: 'admin/' (стандартное, безопасное)
- Пользователь может переопределить через .env для скрытия в production
- Примечание: никогда не коммитьте реальные значения секретов в .env.example
Это позволяет:
- Легко скрывать админку от автоматических сканеров
- Использовать разные URL для dev/production
- Не хранить секреты в коде
- Исправлены пути STATICFILES_DIRS и MEDIA_ROOT (они должны быть относительно корня проекта, а не settings.py)
- Добавлена раздача STATIC_URL в urls.py для DEBUG режима
- Проверено что все статические файлы (CSS, JS) отдаются с кодом 200
Использование:
- Media: ❌ Не используется (нет FileField/ImageField в моделях)
- Static: ✅ Используется (CSS, JS, images в public/static)
Статика теперь корректно работает в dev окружении.
- Удалены dev зависимости (pytest, black, ruff, mypy, ipython и т.д.)
- Оставлены только необходимые для production пакеты
- poetry.lock сокращен с 63KB до 4KB
- Проект работает нормально (django check passed)
Для локальной разработки можно установить нужные инструменты отдельно при необходимости.
- Добавлена конфигурация через poetry (pyproject.toml + poetry.lock)
- Переделана система конфигурации Django с .env переменными
- Добавлен файл .env для локальной разработки (SQLite БД)
- Обновлен settings.py для работы с переменными окружения
- Создана документация по локальной разработке (DEVELOPMENT.md)
- Подготовлена инфраструктура для Docker (Dockerfile, docker-compose.yml)
- Обновлен .gitignore для Python/Django проекта
Проект работает локально с миграциями и админ пользователем (admin/1234).