docs(deploy): снимок боевого выката — чат, ИИ-бот, разборы, фикс склейки
Что выкачено, как устроено на бою (Lockbox вместо старых паролей на сервере, CSP режет встроенные скрипты, лендинг только по «/»), защита денег, откат и список хвостов для следующей сессии. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# СНИМОК: свой чат + ИИ-бот + разборы ВЫКАЧЕНЫ НА БОЕВОЙ (14.07.2026)
|
||||
|
||||
> Заменяет `docs/superpowers/2026-07-13-HANDOFF-own-chat-STATE.md` (там всё то же, но
|
||||
> со статусом «НЕ на проде»). Мозг бота, правила и три замка — оттуда, они не менялись.
|
||||
|
||||
## 🟢 Статус: ВЫКАЧЕНО НА БОЕВОЙ liderra.ru, работает
|
||||
|
||||
Выкат 14.07.2026 ~11:00 МСК. Владелец дал команду «фиксируй всё… потом прод всё сразу».
|
||||
Ветка кода `worktree-jivo-bot-core` (HEAD `cb5b2284`), документы `feat/sales-finder`.
|
||||
|
||||
## Что теперь живёт на боевом
|
||||
|
||||
| Что | Проверено живьём |
|
||||
|---|---|
|
||||
| 🔴 Фикс склейки конкурентов (ноль в ссылке на справочник больше не признак совпадения) | код на сервере |
|
||||
| Полный откат склейки (возвращает и источники, и проект) | миграция `2026_07_14_090000` применена |
|
||||
| Проект на паузе не пишет «Собирает заявки» (серое «Остановлен вами») | тесты + кадры |
|
||||
| «Канбан»: сумма в шапке колонки (был прочерк) | тесты + кадры |
|
||||
| Из «Отчётов» убраны машинные слова («retry-failed для owner») | тесты |
|
||||
| Окошко чата + ИИ-бот на лендинге (гостям) | ✅ открывается само, бот отвечает |
|
||||
| Окошко чата в кабинете (личные ответы клиента) | ⏳ **вживую не проверено** — нужен вход клиентом |
|
||||
| Страница «Как это работает» + 20 разборов, 127 кадров | ✅ 20 тем, кадры открываются, 0 ошибок |
|
||||
| Ссылки бота на разборы | ✅ 3 из 3 (проект / баланс / канбан) |
|
||||
|
||||
## Как это устроено на боевом (важное)
|
||||
|
||||
- **Миграции (5 шт.)** применены ролью `crm_migrator`.
|
||||
🔴 **Пароли в `/home/ubuntu/liderra-secrets.txt` — СТАРЫЕ** (от базы, которая была на VM
|
||||
до переезда в облако 26.06). Настоящие — в **Yandex Lockbox**:
|
||||
- секрет `e6qeooj45vqtn2fju58r` (`connection-a59ccntnhhik6s16918i`) = пароль **crm_migrator**;
|
||||
- секрет `e6q8h11b0ltps6f6ofrl` (`connection-a592v3cg35tu6kjfgh0j`) = **crm_supplier_worker**.
|
||||
Ключ `postgresql_password`. Секрет привязан к пользователю по **connection id**
|
||||
(`yc managed-postgresql user list --cluster-id c9q2cvtjpq3hgq6l0r96`).
|
||||
🔑 Кэш настроек на бою **игнорирует переменные окружения** → перед миграцией
|
||||
`config:clear`, миграция через `sudo -u www-data env DB_USERNAME=crm_migrator DB_PASSWORD=…`,
|
||||
после — `sudo -u www-data php artisan config:cache` (квирк 107).
|
||||
- **GRANT'ы** на новые таблицы `knowledge_chunks` / `bot_dialogs` выданы `crm_app_user` вручную
|
||||
(роли `crm_readonly` в облачном кластере НЕТ).
|
||||
- **Воркер очереди бота** — новый systemd-юнит `liderra-queue-bot.service`
|
||||
(`--queue=bot --tries=1 --timeout=30`). Supervisor на сервере не установлен.
|
||||
- **`.env` прода** дополнен: `BOT_LLM=aitunnel`, `BOT_AITUNNEL_MODEL=claude-haiku-4.5`,
|
||||
`BOT_TOURS_ENABLED=true`, `BOT_LIMITER_STORE=redis`, `SUPPORT_EMAIL=support@liderra.ru`,
|
||||
`LANDING_URL=https://liderra.ru`. `AITUNNEL_API_KEY` там уже был.
|
||||
- **Страница разборов отдаётся ПОРТАЛОМ** по адресу `/kak-eto-rabotaet` (маршрут в `web.php`):
|
||||
на бою nginx отдаёт лендинг только по `/`, всё остальное уходит в портал → **nginx не трогали**.
|
||||
- 🔴 **CSP боевого режет ВСТРОЕННЫЕ скрипты** (`script-src 'self'`, без `unsafe-inline`):
|
||||
страница разборов сначала грузилась ПУСТОЙ. Скрипт вынесен в `/guides/page.js`.
|
||||
Защиту не ослабляли. Виджет чата — внешний файл, поэтому работал сразу.
|
||||
- **Лендинг**: боевой `index.html` = наш прототип + счётчик посетителей (соседняя сессия).
|
||||
Чат и пункт меню «Как это работает» **дописаны в боевой файл**, ничего не затёрто.
|
||||
|
||||
## Защита денег (счётчики чата)
|
||||
|
||||
| Кто | Лимит |
|
||||
|---|---|
|
||||
| Гость, первый час разговора | 60 вопросов |
|
||||
| Гость, дальше | 30 вопросов в час |
|
||||
| Вошедший клиент | 60 в час |
|
||||
| Один разговор целиком | 150 вопросов |
|
||||
| Один адрес в интернете | 60 в час |
|
||||
| **Весь чат за сутки** | **1500 ответов (~660 ₽)** → чат гаснет + письмо владельцу |
|
||||
|
||||
Пауза между сообщениями 2 с. Счётчики — **в Redis** (файловый кэш считает не атомарно:
|
||||
300 прибавок → досчиталось 77).
|
||||
|
||||
## Откат
|
||||
|
||||
- Код: `/home/ubuntu/pre-bot-deploy-20260714-104633-code.tar.gz` (89 МБ), `.env`:
|
||||
`/home/ubuntu/pre-bot-deploy-env.bak`.
|
||||
- Лендинг: `/var/www/liderra/landing/index.html.bak-prechat-*`.
|
||||
- Погасить чат: убрать строку `<script src="/chat-widget.js" …>` из лендинга +
|
||||
`sudo systemctl stop liderra-queue-bot`.
|
||||
|
||||
## 🔴 ХВОСТЫ (следующей сессии)
|
||||
|
||||
1. **Чат в кабинете не проверен вживую** — нужен вход настоящим клиентом: спросить бота
|
||||
«какой у меня баланс», «сколько заявок за неделю». Личные ответы = самая денежная часть.
|
||||
2. **Наблюдение за счётом AITunnel** первые сутки (каждый ответ ~0,44 ₽).
|
||||
3. **Кадры разборов (10 МБ) лежат на сервере, но НЕ в git** (`app/public/guides/`).
|
||||
Выкаты кладут поверх и ничего не удаляют → не пропадут. Но при развёртывании с нуля
|
||||
разборов не будет. Решить: класть в репозиторий или оставить как есть.
|
||||
4. **Лендинг разошёлся с репозиторием**: на бою есть счётчик посетителей, в прототипе
|
||||
`docs/superpowers/prototypes/landing-v5-claude.html` его нет. Кто выложит лендинг из
|
||||
репозитория — **снесёт счётчик**. Привести прототип к боевому.
|
||||
5. **`ПИЛОТ.md` не обновлён** под этот выкат (снимок боевого).
|
||||
6. Мелочи: «Отчёты» не видны в левом меню (владелец решил оставить); бот отвечает 3–6 с.
|
||||
|
||||
## Тесты на момент выката
|
||||
|
||||
Backend 2715/2719 (0 падений, 4 skipped), фронт 1243/1246, бот+автоподбор 437/437.
|
||||
Reference in New Issue
Block a user