Кейс · 08 мая 2026 · вайбкодинг

Почему хороший деплой скучный. И как мы за день вывели клиентского бота на боевой сервер

06 мая мне на счёт упал аванс. Клиент-поставщик электроники из Удмуртии официально стартовал Этап 1. 07 мая бот уже стоял на VPS (это арендованный компьютер в дата-центре, всегда включён, на нём и крутятся боты) и обрабатывал реальные сообщения. Между этими двумя датами не случилось ни одного аврала и ни одной ночной правки в духе «о чёрт, не работает». Инфраструктуру мы собрали до аванса, и это вся причина.

Хронология

Что произошло за 5 дней

04 мая мы прогнали smoke-тест на тестовом боте (быстрая проверка, что сборка вообще запускается и проходит насквозь). Whitelist пропустил нужные telegram-id, PII-маскер вычистил телефоны и адреса, LLM-классификация разложила входящие сообщения по категориям, запись в Google Sheets легла куда нужно. За два дня до денег весь pipeline (цепочка обработки сообщения от входа до записи в таблицу) уже отработал на реальных паттернах из переписок клиента.

06 мая на счёт пришёл аванс 75 000 ₽. Работа к этому дню была сделана. Аванс просто дал формальное разрешение поставить готовое решение на боевой сервер.

07 мая клиентский бот развёрнут на VPS Ubuntu 24.04 через Docker Compose. IP, ключи и переменные окружения зафиксированы в .secrets/vps.md. От клиента не потребовалось ничего: ни админ-доступов, ни вечернего созвона «давайте поправим».

Архитектура

Pipeline из 8 явных шагов с точками расширения

Чаще всего в малом бизнесе бот вырастает в монолитный message_handler, куда постепенно дописывают всё подряд, и через пару месяцев такой файл боятся открывать: одна правка тянет за собой три неожиданных поломки. У нас pipeline устроен иначе. Каждый шаг — отдельная функция с понятным входом и выходом, а между шагами оставлены явные «точки расширения», куда позже можно встроить новый модуль.

  • Шаг 1. whitelist: пропускаем только знакомые telegram-id
  • Шаг 2. pii_masker: вырезаем телефоны, адреса, ФИО до отправки в LLM
  • Шаг 3. extract: забираем сущности (даты, суммы, артикулы)
  • Шаг 4. classify: раскладываем сообщение по бизнес-категориям
  • Шаг 4.5. ocr: для скриншотов из WeChat (добавили на следующий день, об этом ниже)
  • Шаг 5. route: отправляем в нужный лист Google Sheets
  • Шаг 6. notify: уведомление команде если есть риск или срочная задача
  • Шаг 7. log: запись для аудита и метрик качества

70 тестов покрывают каждый слой по отдельности. У каждого куска свой файл: tests/test_pii_masker.py, tests/test_classify.py, tests/test_route.py. Когда падает шаг, по красному тесту сразу видно какой, и в логи лезть не приходится.

Главная мысль

Скучный деплой это когда «доделать чуть-чуть» уже произошло

Проекты малого бизнеса редко ломаются на старте. Они вязнут на фразе «надо доделать ещё чуть-чуть и можно показывать». Эта фаза «уже почти готово» умеет тянуться неделями, выматывает клиента и съедает репутацию подрядчика.

У нас smoke-тест прошёл за два дня до денег, каждый шаг pipeline проверен изолированно, а от git pull до рабочего бота на VPS — одна команда docker-compose up -d. Никакого ручного допиливания на сервере по ночам. Вот эта будничность и есть продакшен-качество: проект запущен в боевую работу и им реально пользуются.

Бонус через 48 часов

Когда архитектура превращается в бизнес-возможности

Через два дня после деплоя клиент написал: «Давайте сразу делаем OCR плюс голосовые, их у нас много». OCR (распознавание текста на картинке) понадобился вот зачем: команда работает с китайскими поставщиками, скриншоты прайсов из WeChat и голосовые приходят ежедневно, и ждать 4-6 недель до Этапа 3 им не хотелось.

Технически справились в тот же день. src/ocr/vision.py через Google Cloud Vision встал в шаг 4.5. Распознавание голосовых через Whisper я завёл отдельным модулем, который слушает handle_voice. Ни одной старой функции трогать не пришлось. Команда docker-compose build --no-cache, и всё уже на проде.

Юридически оформили это как досрочный старт Этапа 3 через уведомление сторон по п.5.7 договора, выставили счёт № 003 на остаток Этапа 1 + аванс Этапа 3. Клиент получил фичу быстрее. Я получил подписанный документ и лишнее подтверждение: архитектура из изолированных модулей нужна ради денег, обеим сторонам, и красивая схема тут вторична.

Применить у себя

Чек-лист «как сделать деплой скучным»

  • 1. Pipeline разбит на шаги с явными именами (whitelist / mask / classify / route / log), вместо одного разросшегося process_message()
  • 2. Каждый шаг покрыт тестами на реальных сценариях клиента (не на синтетике)
  • 3. Smoke-тест прошёл на тестовом окружении ДО получения аванса
  • 4. Деплой это одна команда, без ручных шагов «зайти на сервер, поправить .env»
  • 5. Между шагами заложены точки расширения, чтобы новый модуль (OCR, Whisper, любой плагин) встал без переписывания
  • 6. Секреты (ключи, IP, пароли) лежат в .secrets/ вне git, не в коде и не в memory

Если выполнено хотя бы 4 пункта из 6, деплой будет скучным. И клиент это оценит сильнее, чем любую красивую презентацию.

Хочется, чтобы ваш деплой тоже был скучным?

Разбираю задачу под ваш бизнес: какие модули нужны, как разрезать pipeline, где взять тестовые данные, на чём собирать продакшен. Бесплатный созвон 30 минут, диагностика и план.

Записаться на разбор →

Или напишите напрямую: @kulievvb в Telegram

Связанные ссылки

Что ещё почитать

Что не так с твоим сайтом или рекламой?

Разберу за 30 минут. Найду 2-3 конкретные точки, где сайт теряет клиентов, и покажу как чинить. Бесплатно, без обязательств и без продаж в лоб.

Связаться по делу

Заявка прилетит мне и в Telegram, и на почту. Отвечу в течение рабочего дня.

Куда удобнее ответить?
или сразу написать в Telegram →

Нажимая кнопку, даёте согласие на обработку персональных данных (оператор № 23-25-044738).