add: SITEMAP_RUNBOOK.md; mod: README.md — обновлена документация проекта
This commit is contained in:
20
README.md
20
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, которые могут быть полезны для понимания устройства проекта и его
|
||||||
|
администрирования, а также для будущей реорганизации документации.
|
||||||
|
|
||||||
### Немного о механике кеширования:
|
### Немного о механике кеширования:
|
||||||
|
|
||||||
|
|||||||
102
SITEMAP_RUNBOOK.md
Normal file
102
SITEMAP_RUNBOOK.md
Normal file
@@ -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";
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user