projects/org/@biz-lideravto/it/docs/site/LAUNCH_GUIDE.md

Пошаговый план запуска lideravto-new

← Назад в оглавление

Версия: 1.0
Дата: 2026-02-27
Проект: new.lideravto.ru — Drupal 11.3.3 + Commerce 3.x
Цель: От текущего состояния (модули в /tst/) до рабочего сайта с полным каталогом


Что уже готово


Общая схема

Шаг 0: Подготовка данных (~30 мин)
    ↓
Шаг 1: Деплой модулей (~20 мин)
    ↓
Шаг 2: Подготовка конфигов (~20 мин)
    ↓
Шаг 3: Тестовый импорт 1 бренд (~30 мин)
    ↓
Шаг 4: Шаблон и меню (~45 мин)
    ↓
Шаг 5: Полный импорт (~60 мин)
    ↓
Шаг 6: SEO и технические настройки (~30 мин)
    ↓
Шаг 7: Настройка автоимпорта (~30 мин)
─────────────────────────────────────────
Итого: ~4,5 часа

Шаг 0. Подготовка данных

Время: ~30 минут
Что: Очистить и нормализовать данные перед первым импортом

0.1 Автофикс наименований

cd /opt/claude-workspace/projects/org/@biz-lideravto/

# Запустить авто-фикс по словарю
python3 it/scripts/fix_names.py \
  --input it/data/CATALOG.csv \
  --dictionary it/lider-drupal/data/parts_dictionary.csv \
  --output it/data/CATALOG_fixed.csv

# Проверить результат
python3 it/scripts/fix_names.py --stats it/data/CATALOG_fixed.csv

Ожидаемый результат:
- ~800 автоматически исправлено (наименование + поле "узел")
- ~400 требуют ручной проверки (флаг needs_review)

0.2 Нормализация OEM

python3 it/scripts/normalize_oem.py \
  --input it/data/CATALOG_fixed.csv \
  --output it/data/CATALOG_ready.csv

# Проверить: должно быть 0 дублей по oem_normalized
python3 it/scripts/normalize_oem.py --check-dupes it/data/CATALOG_ready.csv

0.3 Генерация файла совместимости

python3 it/scripts/build_compatibility.py \
  --input it/data/CATALOG_ready.csv \
  --output it/data/COMPATIBILITY.csv

# Ожидаемо: ~18 304 строк (по строке на каждую пару OEM × модель)

0.4 Контрольная проверка

# Финальная валидация перед импортом
python3 it/scripts/validate_catalog.py it/data/CATALOG_ready.csv

# Должно быть:
# ✅ 0 пустых OEM
# ✅ 0 пустых наименований
# ✅ 0 пустых марок/моделей
# ⚠️  ~400 флагов needs_review — это ок, пойдут в очередь

Шаг 1. Деплой модулей

Время: ~20 минут
Сервер: SSH/FTP к new.lideravto.ru

1.1 Синхронизация модулей /tst/ → /app/

# С нашего сервера к beget
rsync -avz \
  /opt/claude-workspace/projects/org/@biz-lideravto/it/lider-drupal/tst/modules/custom/ \
  {beget_user}@{beget_host}:~/lideravto/app/modules/custom/

# Синхронизация конфигурации
rsync -avz \
  /opt/claude-workspace/projects/org/@biz-lideravto/it/lider-drupal/tst/config/ \
  {beget_user}@{beget_host}:~/lideravto/app/config/

# Credentials в .credentials.md
# Хост и логин: it/lider-drupal/.credentials.md

1.2 Запуск установки на сервере

# На beget сервере (через SSH или Beget SSH Panel)
cd ~/lideravto/app/

# Применить обновления БД и конфигурации
drush updatedb
drush config:import
drush cache:rebuild

# Включить кастомные модули
drush en dru_lider_setup
drush lider:setup:install   # создаёт vocabulary, content types, поля
drush en dru_lider_models dru_lider_parts dru_lider_catalog
drush en dru_lider_products dru_lider_compatibility dru_lider_importer
drush en dru_lider_seo dru_lider_frontend
drush cache:rebuild

1.3 Проверка деплоя

# Все модули включены
drush pml | grep lider

# Тесты должны пройти
# (если phpunit доступен на shared hosting)
cd ~/lideravto/app/
./vendor/bin/phpunit modules/custom/ --testdox 2>&1 | tail -20

Контроль:
- curl -s -o /dev/null -w "%{http_code}" http://new.lideravto.ru/200
- curl -s -o /dev/null -w "%{http_code}" http://new.lideravto.ru/admin/302 (редирект на логин)


Шаг 2. Подготовка конфигурационных файлов

Время: ~20 минут
Что: Создать YAML-конфиги под наш конкретный проект

2.1 canonical_priority.yaml

Файл определяет какая модель бренда является canonical-моделью по умолчанию.

# Файл уже описан в MODULES_GUIDE.md
# Создать: it/data/references/canonical_priority.yaml
# Содержимое: приоритеты для Scania, Volvo, Mercedes, MAN, DAF, Renault, Iveco, Liebherr

После создания проверить по Яндекс Вордстат первые 3 марки:
- Scania R vs G vs P — убедиться что R на первом месте ✓
- Volvo FH vs FM vs FMX — убедиться что FH на первом месте ✓
- Mercedes Actros vs Axor — убедиться что Actros на первом месте ✓

2.2 donors.yaml

Файл связей "двигатель/агрегат → список грузовиков".

# Создать: it/data/references/donors.yaml
# Содержимое: engines (DC13, D13, OM471...), gearboxes (GRS895, I-Shift...), axles (RS1344...)
# Шаблон в MODULES_GUIDE.md раздел "dru_lider_compatibility"

2.3 Загрузить конфиги на сервер

rsync -avz \
  /opt/claude-workspace/projects/org/@biz-lideravto/it/data/references/ \
  {beget_user}@{beget_host}:~/lideravto/app/config/lider/

# Сообщить модулям где искать конфиги (drush state или settings.php)
drush state:set lider.config_path '../config/lider'

Шаг 3. Тестовый импорт: один бренд

Время: ~30 минут
Цель: Убедиться что pipeline работает до полного импорта всего каталога

3.1 Загрузить CATALOG_ready.csv на сервер

rsync -avz \
  /opt/claude-workspace/projects/org/@biz-lideravto/it/data/CATALOG_ready.csv \
  {beget_user}@{beget_host}:~/lideravto/data/

3.2 Валидация без импорта

# На сервере
drush lider:import:validate \
  --file=~/lideravto/data/CATALOG_ready.csv \
  --verbose

# Должно выдать: 0 критических ошибок

3.3 Dry-run для Scania

drush lider:import:catalog \
  --file=~/lideravto/data/CATALOG_ready.csv \
  --brand=scania \
  --limit=200 \
  --mode=dry-run

# Показывает что будет сделано, ничего не записывает
# Ожидаем: ~200 NEW, 0 ошибок

3.4 Реальный тестовый импорт Scania (200 записей)

drush lider:import:catalog \
  --file=~/lideravto/data/CATALOG_ready.csv \
  --brand=scania \
  --limit=200 \
  --mode=insert

drush lider:import:compatibility --source=catalog --brand=scania
drush lider:import:canonical --recalculate --brand=scania
drush cache:rebuild

3.5 Проверка в браузере


Шаг 4. Шаблон и меню

Время: ~45 минут
Цель: Настроить визуальную структуру ПОКА данных мало (переделывать дешевле)

4.1 Верхнее меню по брендам

В dru_lider_frontend реализовать Twig блок:

{# templates/block--lider-brand-menu.html.twig #}
<nav class="brand-menu">
  {% for brand in brands %}
    <a href="/zapchasti/{{ brand.slug }}/"
       class="{{ active_brand == brand.id ? 'active' : '' }}">
      {{ brand.name }}
    </a>
  {% endfor %}
</nav>

Данные передаются из Block plugin через taxonomy query lider_brands.

4.2 Левое контекстное меню

{# templates/block--lider-sidebar-nav.html.twig #}
{% if current_model %}
  <nav class="sidebar-nav">
    <h4><a href="/zapchasti/{{ current_brand.slug }}/">{{ current_brand.name }}</a></h4>
    {% for system in current_model.systems %}
      <a href="/zapchasti/{{ current_brand.slug }}/{{ current_model.slug }}/{{ system.slug }}/"
         class="{{ active_system == system.id ? 'active' : '' }}">
        {{ system.name }}
        <span class="count">{{ system.parts_count }}</span>
      </a>
    {% endfor %}
  </nav>
{% elseif current_brand %}
  <nav class="sidebar-nav">
    {% for model in current_brand.models %}
      <a href="/zapchasti/{{ current_brand.slug }}/{{ model.slug }}/">
        {{ model.name }}
      </a>
    {% endfor %}
  </nav>
{% endif %}

4.3 Хлебные крошки

Главная → Scania → R5 → Двигатель → Форсунка топливная DC13 XPI

Настроить через Drupal Breadcrumb Builder или Twig в page шаблоне.

4.4 Проверка шаблона


Шаг 5. Полный импорт

Время: ~60 минут
Порядок важен — каждый шаг зависит от предыдущего

# На сервере: ~/lideravto/app/

# 5.1 Загрузить taxonomy (если не загружен в Шаге 1)
drush lider:import:catalog \
  --file=~/lideravto/data/CATALOG_ready.csv \
  --mode=upsert \
  --taxonomy-only

# 5.2 Все товары
drush lider:import:catalog \
  --file=~/lideravto/data/CATALOG_ready.csv \
  --mode=upsert
# Ожидаем: ~9 212 NEW, время ~30 мин

# 5.3 Совместимость из прайса
drush lider:import:compatibility --source=catalog
# Ожидаем: ~18 304 записей

# 5.4 Расширение через доноров
drush lider:import:compatibility --source=donors
# Ожидаем: ~3 000–5 000 новых записей

# 5.5 Совместимость из текстовых комментариев
drush lider:import:compatibility --source=comments
# Ожидаем: ~200–500 записей

# 5.6 Редиректы (формат-варианты OEM: A-prefix, PE-suffix, дефисы)
drush lider:import:redirects --rebuild

# 5.7 Пересчёт canonical по алгоритму
drush lider:import:canonical --recalculate

# 5.8 Кросс-ссылки между деталями
drush lider:import:crosslinks

# 5.9 Сброс кеша и пересборка sitemap
drush cache:rebuild
drush xmlsitemap:rebuild

Метрики после полного импорта

# Проверить количество страниц
drush sql:query "SELECT COUNT(*) FROM node WHERE type='lider_part' AND status=1;"
# Ожидаем: 9 212

# Проверить совместимость
drush sql:query "SELECT COUNT(*) FROM lider_compatibility;"
# Ожидаем: 17 000–20 000

# Проверить очередь на проверку
drush lider:import:review-queue --limit=10
# Показывает детали требующие уточнения наименований

# Размер sitemap
curl -s http://new.lideravto.ru/sitemap.xml | grep '<url>' | wc -l
# Ожидаем: 9 000–10 000 (только canonical)

Шаг 6. SEO и технические настройки

Время: ~30 минут

6.1 robots.txt

# На сервере: ~/lideravto/app/robots.txt

cat > ~/lideravto/app/robots.txt << 'EOF'
User-agent: *
Disallow: /admin/
Disallow: /user/
Disallow: /cart/
Disallow: /checkout/
Allow: /zapchasti/

Sitemap: http://new.lideravto.ru/sitemap.xml
EOF

6.2 Canonical теги — проверка

# Проверить что canonical тег правильный на нескольких страницах
curl -s http://new.lideravto.ru/zapchasti/scania/r5/dvigatel/forsunka-9604621423/ \
  | grep -o 'rel="canonical"[^>]*>'

# Должно быть: rel="canonical" href="http://new.lideravto.ru/zapchasti/scania/r5/dvigatel/forsunka-9604621423/"

6.3 Проверка URL-архитектуры

# Деталь с 1 моделью → конкретная модель в URL → 200 OK
curl -I http://new.lideravto.ru/zapchasti/scania/r5/dvigatel/forsunka-9604621423/
# Ожидаем: HTTP/1.1 200 OK

# Деталь с 2+ моделями → any в URL → 200 OK
curl -I http://new.lideravto.ru/zapchasti/scania/any/dvigatel/forsunka-9604621423/
# Ожидаем: HTTP/1.1 200 OK

# Canonical тег = self на любой странице детали
curl -s http://new.lideravto.ru/zapchasti/scania/any/dvigatel/forsunka-dc13-xpi-9604621423/ \
  | grep -o 'rel="canonical"[^>]*>'
# Ожидаем: rel="canonical" href=".../scania/any/.../forsunka-dc13-xpi-9604621423/"

# Format-error (A-prefix) → 301 на правильный URL
curl -I http://new.lideravto.ru/zapchasti/scania/r5/dvigatel/forsunka-a9604621423/
# Ожидаем: HTTP/1.1 301 → /zapchasti/scania/r5/.../forsunka-9604621423/

# Листинг модели → 200 (всегда)
curl -I http://new.lideravto.ru/zapchasti/scania/g5/dvigatel/
# Ожидаем: HTTP/1.1 200 OK

6.4 301 со старого сайта (если нужно)

Если планируется переезд с lideravto.ru → new.lideravto.ru:

# В nginx конфиге lideravto.ru добавить (через support beget или в панели)
location /catalog/ {
  return 301 http://new.lideravto.ru/zapchasti/;
}
location / {
  return 301 http://new.lideravto.ru$request_uri;
}

6.5 Яндекс Метрика

Добавить код счётчика в dru_lider_frontend/templates/html.html.twig:

{# В <head> #}
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
  (function(m,e,t,r,i,k,a){...})
  (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "XXXXXXXX");
</script>
<!-- /Yandex.Metrika counter -->

ID счётчика из .credentials.md.

6.6 Скорость страниц

# Включить Internal Page Cache в Drupal
drush en page_cache dynamic_page_cache

# Проверить заголовки кеширования
curl -I http://new.lideravto.ru/zapchasti/scania/r5/ \
  | grep -i cache

# Ожидаем: X-Drupal-Cache: HIT (после первого запроса)

Шаг 7. Настройка автоимпорта

Время: ~30 минут

7.1 Создать задачу в планировщике

# НЕ редактировать crontab напрямую!
# Добавить задачу через system/scheduler/

vim /opt/claude-workspace/system/scheduler/schedule.yaml

Добавить:

tasks:
  lideravto_import:
    name: "lideravto  импорт нового прайса"
    schedule: "0 6 * * 1"  # каждый понедельник в 6:00
    command: >
      python3 /opt/claude-workspace/projects/org/@biz-lideravto/it/scripts/check_new_price.py
      && rsync {data} {server}
      && ssh {server} "drush lider:import:catalog --mode=upsert --file=~/data/latest.csv"
    notify_telegram: true
    enabled: true

7.2 Папка входящих прайсов

# Создать структуру inbox
mkdir -p /mnt/beget-s3/projects/lideravto/inbox/
mkdir -p /mnt/beget-s3/projects/lideravto/processed/

# Права
chmod 755 /mnt/beget-s3/projects/lideravto/inbox/

Менеджер кладёт новые прайсы в inbox/. Скрипт автоматически:
1. Обнаруживает новый файл
2. Запускает валидацию
3. Если OK → запускает импорт
4. Перемещает файл в processed/YYYY-MM-DD/
5. Шлёт отчёт в Telegram

7.3 Тест автоимпорта

# Положить тестовый файл в inbox
cp it/data/CATALOG_ready.csv /mnt/beget-s3/projects/lideravto/inbox/test_2026-02-27.csv

# Запустить вручную
python3 system/scheduler/run.py --run lideravto_import

# Проверить Telegram — должно прийти уведомление с отчётом

Итоговый чеклист готовности сайта

Функциональность

SEO

Данные

Технические


Возможные проблемы и решения

Проблема Вероятная причина Решение
Модуль не устанавливается Зависимость не включена drush en {dependency} сначала
Меню не отображается Taxonomy terms не созданы Проверить drush lider:setup:install
404 на страницах деталей URL aliases не сгенерированы drush pathauto:bulk-update
Canonical не применяется Сервис CanonicalResolver не настроен Проверить canonical_priority.yaml путь
Медленный импорт Нет индексов в БД Проверить idx_lider_oem_normalized
Дубликаты OEM Нормализация не применилась Проверить oem_normalized поле в БД
Donor expansion не работает donors.yaml не найден Проверить drush state:get lider.config_path
Меню пустое после импорта Cache не сброшен drush cache:rebuild

Документ подготовлен для проекта new.lideravto.ru
Дата: 2026-02-27


← Назад в оглавление