Чеклист запуска продаж
От пустого VPS до первой оплаты — один путь: установить стек, подключить панель, создать тариф, включить кассу, проверить тестовой покупкой. Всё, кроме установки, делается мышкой в веб-кабинете, изменения применяются на лету, без перезапусков.

Перед установкой
| Что | Подробности |
|---|---|
| VPS | Linux (Ubuntu/Debian). Рекомендуется 1 vCPU / 2 GB RAM. На 1 GB установщик сам поднимет 2 GB swap, чтобы сборка не упала по памяти. |
| Домен (желательно) | Нужен для HTTPS. Без домена стек поднимется на http://IP, но кнопка мини-аппы в Telegram не появится — Telegram открывает мини-аппы только по HTTPS. Для домена спросят e-mail под бесплатный сертификат Let's Encrypt. |
| Токен бота | @BotFather → /newbot → токен вида 1234:AA.... |
| Панель Remnawave | Рабочая панель версии ≥ 2.8.0: URL + API-токен. Нет панели — Enter при установке поднимет встроенную мок-панель, чтобы всё пощупать. |
Ключи шифрования, пароли и вебхук-секреты установщик генерирует и хранит сам — руками в файлы ничего вписывать не нужно.
Шаг 1. Установка
git clone https://github.com/STEP-CORP/StepBot.git && cd StepBot
./scripts/install.shУстановщик спросит только то, что нельзя придумать за вас:
- Токен бота — обязательно.
- Домен — Enter, если домена нет (будет
http://IP). - E-mail для Let's Encrypt — если указали домен.
- URL панели Remnawave — Enter для встроенной мок-панели.
- API-токен панели — если указали URL.
Дальше сам: ставит Docker, при нехватке памяти поднимает swap, генерирует секреты, собирает и запускает стек (postgres · redis · web · bot · worker · scheduler · caddy), применяет миграции и ждёт, пока сервис оживёт. В конце выдаёт:
🎉 Готово!
Кабинет https://ваш-домен/admin/
Логин admin
Пароль <сгенерированный пароль>
Мини-аппа https://ваш-домен/app/Пароль
Запишите пароль сразу. Он лежит в .env (строка ADMIN__PASSWORD). Отдельной кнопки смены пароля в интерфейсе нет — меняется в .env + ./scripts/update.sh (система перехэширует его при старте).
WARNING
Первая сборка занимает несколько минут — это нормально. Если что-то пошло не так, установщик покажет последние строки лога и путь к полному логу. Кабинет после старта открывается не мгновенно: сервису нужно ~15–20 секунд (uvicorn + миграции).
Подробности установки — в /guide/install, деплой на VPS — в /guide/deploy-vps.
Первый вход: https://ваш-домен/admin/, логин admin, пароль из вывода установщика. Если в .env включён ADMIN__DEMO_ENABLED=true, на странице входа появится кнопка одноразового демо-входа «только смотреть» (read-only, без пароля) — удобно показать кабинет партнёру. Для боевого магазина держите демо-режим выключенным.
Шаг 2. Подключить живую панель
Раздел «Серверы» (/cabinet/servers). Нажмите «Синхронизировать» — подтянутся ноды из Remnawave. Отметьте нужные флажком «в продаже». Если синк падает с ошибкой — проверьте URL и токен панели в .env. Как устроена синхронизация — /panel/sync.
Шаг 3. Создать тариф
Раздел «Тарифы» (/cabinet/tariffs): название, сроки и цены (например 30 дней / 149 ₽), лимит устройств и трафика.
Главная грабля запуска
Привяжите к тарифу хотя бы один сквод панели (поле «сквады» / internal squads). Без сквода клиент при покупке получит «ошибку VPN-сервера».
Шаг 4. Включить кассу
Раздел «Платежи» (/payments/settings): тумблер «активна» + поля ключей (шифруются) + кнопка «Тест» — она делает реальную пробу API и подсказывает, чего не хватает. Как только касса активна, кнопки оплаты сами появляются в боте и мини-аппе. Клиент платит → подписка выдаётся автоматически по вебхуку.
Проще всего стартовать с Telegram Stars — работает сразу, без ключей и вебхуков. Для карт — YooKassa: shop_id + secret_key.
| Касса | Что вписать | Вебхук нужен? |
|---|---|---|
| Telegram Stars | ничего — из коробки | нет (подтверждение внутри Telegram) |
| Вручную / баланс | ничего (начисление админом) | — |
| YooKassa (карта, СБП) | shop_id, secret_key (+ recurrent_enabled для автосписаний) | да |
| CryptoBot (USDT/TON/BTC) | api_token из @CryptoBot | да |
| Cryptomus / Heleket | merchant_uuid, api_key | да |
| Platega (СБП/карта/крипта) | merchant_id, secret, payment_method | да |
| ЮMoney (кошелёк) | wallet, notification_secret | да |
Кроме них из коробки готовы Robokassa, WATA, FreeKassa, PayPalych, CloudPayments, Lava, MulenPay, KassaAI, RollyPay, RioPay, SeverPay, AuraPay, Antilopay — всего 21 живой провайдер.
Вебхук-URL для кабинета провайдера:
https://ваш-домен/api/v1/payments/<касса>Подставьте код кассы: yookassa, cryptobot, cryptomus, platega, yoomoney и т.д. Пример для YooKassa: https://ваш-домен/api/v1/payments/yookassa. Для Telegram Stars вебхук не нужен вовсе. Детали — /payments/webhooks.
INFO
Поле «комиссия» кассы учитывается в расчёте чистой прибыли (оборот − комиссии − налог) в том же разделе.
Шаг 5. Собрать меню бота
Бот запускается сам сразу после установки. Проверьте: отправьте /start — должно прийти приветствие и кнопка «📱 Приложение». Убедитесь, что не включён «Режим техработ» (MAINTENANCE_MODE). В разделе «Настройки» (/cabinet/settings) пропишите свой Telegram ID в ADMIN_IDS и BOT_USERNAME (без @).
Меню собирается в разделе «Меню» — дерево кнопок с живым превью (/bot/menu-builder). Готовое меню по умолчанию можно оставить как есть или подправить; кнопка «Сбросить к стандартному» вернёт заводское.

Шаг 6. Настроить мини-аппу
Раздел «Мини-аппа» (/miniapp/configuration): одна из 8 тем (Минимал, Прайват, Бадди, Нативный, Терминал, Журнал, Неон, Поп), акцентный цвет, заголовок → кнопка «Опубликовать».

WARNING
Мини-аппа требует HTTPS. Если кнопка мини-аппы не появилась — вы ставили без домена (http://IP) или в настройках не заполнен SUBSCRIPTION_MINI_APP_URL.
Шаг 7. Тестовая покупка
Купите тариф сами — через Stars или ручное начисление баланса. Убедитесь, что подписка выдалась и кнопка «Подключить» отдаёт ссылку. После этого магазин готов к продажам. Как устроен флоу покупки — /bot/purchase.
Опционально, тумблерами (применяется без перезапуска): пробный период (TRIAL_ENABLED — дни/трафик/устройства), рефералка (REFERRAL_ENABLED), промокоды и акции, автопродление с баланса, баннеры и логотип, покупка с сайта (WEB_CABINET_ENABLED, /features/site-sales). Отдельно — ИИ-поддержка: ключ sk-ant-… с console.anthropic.com, модель по умолчанию claude-haiku-4-5, база знаний своими словами и кнопка «Тест» до включения на реальных клиентах.
Первые дни: на что смотреть
Реконсилятор платежей
Если вебхук кассы потеряется (проксю/CDN съело, неверный URL) или выдача упала уже после ответа 200 — фоновый реконсилятор каждые 5 минут сам опрашивает провайдера по зависшим счетам и добивает оплаченные. Опрос идемпотентен: гонка с опоздавшим вебхуком безвредна. То есть «клиент оплатил, а подписки нет» само чинится в пределах нескольких минут — если этого не происходит, проверяйте вебхук-URL и ключи кассы.
Watchdog панели
Watchdog пингует панель каждые 2 минуты (тумблер AUTO_MAINTENANCE_ENABLED). Три неудачных проверки подряд → бот сам включает режим техработ и шлёт алерт; когда панель вернётся — снимает. Автоматика снимает только свой флаг: техрежим, включённый вручную, не трогается. Ручной тумблер — «Режим техработ» (MAINTENANCE_MODE): бот отвечает всем заглушкой, кроме админов.
Дополнительно ночью (в 04:17) идёт сверка бот↔панель (REMNAWAVE_RESYNC_ENABLED) — лечит расхождения от ручных правок на панели и шлёт отчёт, если что-то восстановила.
Бэкапы
Раздел «Обслуживание» (/cabinet/maintenance) и настройки категории «Бэкапы»: BACKUP_ENABLED (включено по умолчанию), время BACKUP_TIME (по умолчанию 04:00), сколько копий хранить BACKUP_KEEP_LAST (по умолчанию 7) и пароль шифрования BACKUP_ENCRYPTION_PASSWORD. Кнопка «Сделать бэкап сейчас» снимает копию вручную. ./scripts/update.sh всегда кладёт дамп в backups/ перед обновлением. Подробно — /features/backups.
Пароль бэкапа
Установщик печатает его в конце установки — сохраните отдельно от сервера, без него зашифрованный архив не открыть. Если свой не задавали — это первые 16 символов APP__JWT_SECRET из .env. Копия архива приходит вам в Telegram (если указан ваш ID), чтобы бэкап пережил потерю сервера.
Восстановление из бэкапа на чистом сервере:
# 1) распаковать архив (спросит пароль шифрования)
unzip backup_YYYYMMDD_HHMMSS.zip # → db_YYYYMMDD_HHMMSS.sql
# 2) поднять только БД и залить дамп
./scripts/dc.sh up -d postgres
cat db_*.sql | ./scripts/dc.sh exec -T postgres psql -U vpn -d vpn
# 3) поднять остальной стек
./scripts/dc.sh up -dМониторинг здоровья
https://ваш-домен/health отдаёт 200 + статус БД/Redis — лёгкий пинг, можно дёргать часто. Для аптайм-мониторинга берите https://ваш-домен/health/deep: он добавляет статус воркера (фоновые задачи) и панели и возвращает 503, если воркер мёртв — обычный /health этого не видит, а без воркера не работают вебхуки-выдача, реконсилятор и бэкапы. Наведите на него UptimeRobot или аналог. На дашборде кабинета — выручка, подписки, онлайн и лента аудита.
Обновление продукта — одной командой ./scripts/update.sh, запущенной из папки бота: скрипт сначала снимает бэкап БД, потом тянет обновления, пересобирает и мигрирует; если новая версия не поднялась — печатает готовые команды отката. Данные не теряются. Детали — /guide/update.
Частые проблемы
| Симптом | В чём дело / что делать |
|---|---|
| Кабинет не открылся сразу | Старт занимает ~15–20 секунд. Если долго — ./scripts/dc.sh logs web. |
| «Ошибка VPN-сервера» при покупке | К тарифу не привязан сквод панели. «Тарифы» → тариф → поле «сквады». Проверьте, что в «Серверы» ноды синхронизированы и отмечены «в продаже». |
| Касса не появилась в боте | Не активна или не заполнены поля. «Платежи»: тумблер + все ключи, кнопка «Тест» подскажет, чего не хватает. |
| Мало памяти / сборка падает | На 1 GB RAM установщик сам поднимает 2 GB swap. Если ставили руками или swap не создался — добавьте его и повторите ./scripts/install.sh (скрипт идемпотентен). |
| Кнопка мини-аппы не появилась | Нужен HTTPS: ставьте с доменом, проверьте SUBSCRIPTION_MINI_APP_URL в настройках. |
Безопасность перед продажей клиентам
- Смените дефолтный пароль администратора:
.env→ADMIN__PASSWORD+./scripts/update.sh. Выключите демо-режим (ADMIN__DEMO_ENABLED=false). - Ключи, сгенерированные установщиком (
APP__CRYPT_KEY— шифрование секретов,APP__JWT_SECRET— сессии кабинета, пароль БД, вебхук-секрет), уникальны для вашей установки — не копируйте чужие и не переиспользуйте между серверами. - Не коммитьте и не пересылайте
.env— в нём все секреты. Файл создаётся с правами600; держите его на сервере. - Ключи касс шифруются в базе автоматически (Fernet) — в кабинете и API они не показываются обратно, только отметка «поле заполнено».
- Ключ ИИ-поддержки при утечке отзовите на console.anthropic.com и впишите новый в разделе «ИИ-поддержка».
Переезжаете с другого бота с живой аудиторией? Начните с /guide/migration — балансы, подписки и ключи панели переносятся без даунтайма для подписчиков. Вопросы и обмен опытом — в сообществе.
