Skip to content

Чеклист запуска продаж

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

Дашборд админ-кабинета

Перед установкой

ЧтоПодробности
VPSLinux (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. Установка

bash
git clone https://github.com/STEP-CORP/StepBot.git && cd StepBot
./scripts/install.sh

Установщик спросит только то, что нельзя придумать за вас:

  1. Токен бота — обязательно.
  2. Домен — Enter, если домена нет (будет http://IP).
  3. E-mail для Let's Encrypt — если указали домен.
  4. URL панели Remnawave — Enter для встроенной мок-панели.
  5. 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 / Heleketmerchant_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), чтобы бэкап пережил потерю сервера.

Восстановление из бэкапа на чистом сервере:

bash
# 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 в настройках.

Безопасность перед продажей клиентам

  • Смените дефолтный пароль администратора: .envADMIN__PASSWORD + ./scripts/update.sh. Выключите демо-режим (ADMIN__DEMO_ENABLED=false).
  • Ключи, сгенерированные установщиком (APP__CRYPT_KEY — шифрование секретов, APP__JWT_SECRET — сессии кабинета, пароль БД, вебхук-секрет), уникальны для вашей установки — не копируйте чужие и не переиспользуйте между серверами.
  • Не коммитьте и не пересылайте .env — в нём все секреты. Файл создаётся с правами 600; держите его на сервере.
  • Ключи касс шифруются в базе автоматически (Fernet) — в кабинете и API они не показываются обратно, только отметка «поле заполнено».
  • Ключ ИИ-поддержки при утечке отзовите на console.anthropic.com и впишите новый в разделе «ИИ-поддержка».

Переезжаете с другого бота с живой аудиторией? Начните с /guide/migration — балансы, подписки и ключи панели переносятся без даунтайма для подписчиков. Вопросы и обмен опытом — в сообществе.

MIT License · сделано для тех, кто продаёт VPN, а не настраивает ботов