From c0b41cd86691b0ec159ad6d59fe0a902c5c7dbcf Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 18 Apr 2026 13:48:28 +0300 Subject: [PATCH] =?UTF-8?q?add:=20SITEMAP=5FRUNBOOK.md;=20mod:=20README.md?= =?UTF-8?q?=20=E2=80=94=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 ++++++++- SITEMAP_RUNBOOK.md | 102 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 SITEMAP_RUNBOOK.md diff --git a/README.md b/README.md index e356d16..b5f7213 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,24 @@ # Оконный агрегатор «Окнардия» -### Переделка под Python 3.8 и Django 4.1 +### Переделка под Python 3.12 и Django 5.2 +### Актуальная памятка и дорожная карта + +* Изменена база данных используемая в проекте (SQLite вместо MariaDB). +* Окружение проекта теперь настраивается через `poetry` вместо `pip` и `requirements.txt`. +* Проект получает настройки и секреты через переменные окружения (`.env`) вместо `my_secret*.py`. + +См. также: + +* [`AGENTS.md`](AGENTS.md) – контекст проекта для AI-ассистентов (архитектура, конвенции, рабочие сценарии). +* [`SETUP.md`](SETUP.md) – пошаговая настройка окружения, запуск проекта и базовые команды разработки. +* Сервисные утилиты: + - [`SITEMAP_RUNBOOK.md`](SITEMAP_RUNBOOK.md) – sitemap (генерация, веса, cron, nginx) + + + +--- +Легаси-материалы старого README, которые могут быть полезны для понимания устройства проекта и его +администрирования, а также для будущей реорганизации документации. ### Немного о механике кеширования: diff --git a/SITEMAP_RUNBOOK.md b/SITEMAP_RUNBOOK.md new file mode 100644 index 0000000..0dd8e09 --- /dev/null +++ b/SITEMAP_RUNBOOK.md @@ -0,0 +1,102 @@ +# SITEMAP_RUNBOOK.md + +## Что изменено + +- Генерация sitemap выполняется только через custom management command: `generate_sitemaps`. +- Генерация через интерфейс `/service/*` и URL-роуты удалена. +- Файлы sitemap хранятся в media-каталоге: `MEDIA_ROOT/_serv_sitemap`. +- `robots.txt` указывает на `https://oknardia.ru/media/_serv_sitemap/sitemap.xml`. +- Глубина `compare_offers` по-молчанию ограничена диапазоном `2..4`. +- В `lastmod` записывается только дата (`YYYY-MM-DD`), без времени. + +## Что сейчас входит в sitemap + +- главная страница `/`; +- список и карточки блога (`/blog/Pn`, `/blogpost/...`); +- каталог профилей: корень, производители и карточки моделей; +- каталог серий домов и детальные страницы типовых серий; +- каталог оконных компаний и карточки брендов; +- каталог стандартных оконных проёмов; +- страница рейтинга профилей; +- страницы цен по адресам и по одиночным проёмам; +- страницы `compare_offers` (с `changefreq=monthly` и пониженным приоритетом). + +## Ручной запуск + +Из каталога `oknardia/`: + +```bash +poetry run python manage.py generate_sitemaps +``` + +С явными параметрами: + +```bash +poetry run python manage.py generate_sitemaps \ + --compare-min-depth 2 \ + --compare-max-depth 4 \ + --max-items 40000 \ + --max-file-size 5242880 \ + --max-files-qty 998 +``` + +## Параметры команды + +- `--compare-min-depth` — минимальная глубина комбинаций `compare_offers` (по умолчанию `2`). +- `--compare-max-depth` — максимальная глубина комбинаций `compare_offers` (по умолчанию `4`). +- `--max-items` — лимит URL в одном sitemap-файле (по умолчанию `40000`). +- `--max-file-size` — лимит размера sitemap-файла в байтах (по умолчанию `5242880`). +- `--max-files-qty` — лимит количества вложенных sitemap-файлов (по умолчанию `998`). + +## Важные переменные окружения + +- `SITE_BASE_URL` — базовый URL сайта (например, `https://oknardia.ru`). +- `SITEMAP_SUBDIR` — подкаталог в `MEDIA_ROOT` для sitemap (по умолчанию `_serv_sitemap`). + +## Что добавить в контейнер + +Минимально (после миграций и перед запуском веб-процесса): + +```bash +poetry run python manage.py generate_sitemaps || true +``` + +> `|| true` можно убрать, если хотите падать при любой ошибке генерации. + +## Вариант для расписания (когда определитесь) + +Можно запускать команду по расписанию любым внешним scheduler: + +```bash +poetry run python manage.py generate_sitemaps +``` + +- через cron хоста, +- или через отдельный scheduler-контейнер. + +### Пример внешнего cron на хосте + +Пример строки для `crontab -e` на хост-машине (запуск раз в 3 дня в 03:30) с явным именем контейнера `oknarida-backend`: + +```bash +30 3 */3 * * /usr/bin/docker exec -i oknarida-backend /bin/sh -lc 'cd /app/oknardia && poetry run python manage.py generate_sitemaps --compare-min-depth 2 --compare-max-depth 4 --max-items 40000 --max-file-size 5242880 --max-files-qty 998' >> /var/log/oknardia-sitemap.log 2>&1 +``` + +> Если путь проекта внутри контейнера отличается от `/app/oknardia`, просто замени `cd /app/oknardia` на фактический путь. + +## Прокси/NGINX + +Можно хранить физические файлы в media-volume и при этом проксировать/алиасить корневой URL `sitemap.xml` на файл из `media/_serv_sitemap`. + +Допустимо, что файл доступен по двум URL (корневой и media), но в `robots.txt` должен быть указан один канонический вариант. + +### NGINX snippet (alias для корневого sitemap) + +```nginx +# Корневой sitemap.xml (для привычного для поисковиков URL) +location = /sitemap.xml { + alias /<путь-к-каталогку-с-докер-приложением>/media/_serv_sitemap/sitemap.xml; + default_type application/xml; + add_header Cache-Control "public, max-age=300"; +} +```