Установка кабинета
Кабинет (sn-cabinet) — отдельная служба на том же или другом сервере. Он обслуживает витрину, личный кабинет и /app/ для Mini App через ограниченный API панели. Доступ к PostgreSQL ему не нужен.
Порядок установки
- Откройте Кабинет и Mini App. Стартовые тексты RU/EN, SEO, цвета и стандартный логотип уже подставлены в пустые поля. При желании отредактируйте их, включите Опубликовать кабинет и разрешить Mini App и нажмите Сохранить настройки.
- Создайте установку: имя, HTTPS-домен, IP и вариант размещения. Домен кабинета отличается от панели и подписки даже на одном сервере.
- Направьте DNS A/AAAA на выбранный сервер, откройте TCP 80/443, сохраните доступ SSH.
- Скопируйте команду из карточки установки и выполните от root на сервере назначения. Ключ относится к этой установке и остаётся в её окружении.
- Дождитесь проверок бинарника, SHA256, локального
/readyи публичного HTTPS. Убедитесь, что установка появилась на связи в админке. - Выберите эту установку для Mini App в настройках бота. Без кабинета Mini App недоступно.
- Проверьте витрину до входа, регистрацию, сохранение и повторный просмотр кода, вход с другого браузера и привязку Telegram. Затем проверьте тарифы, докупки, платежи и поддержку.
Стартовый шаблон заполняет только пустые поля формы и сохраняется после вашего нажатия «Сохранить настройки». Ваши тексты, ссылки, цвета и переключатели сохраняются. Логотип и favicon загружаются с домена вашей панели. Цены берутся из настроенных тарифов.
На одном сервере
Установщик добавляет отдельный сайт Caddy через /etc/caddy/customer-sites/cabinet.caddy. Существующая панель продолжает работать. Не используйте её домен для кабинета. При занятых портах другим proxy не отключайте его вслепую: выберите режим внешнего proxy.
На отдельном сервере
Нужны Debian/Ubuntu, systemd, amd64/arm64 и исходящий HTTPS к панели. База и её пароль не копируются. Служба слушает 127.0.0.1:8090; reverse proxy публикует только HTTPS-домен.
Отозванный ключ и сохранение публикации
Если в карточке написано Ключ отозван, нажмите Восстановить ключ и команду. Команда доступна и при выключенной публикации. Перед её запуском включите публикацию и сохраните настройки — подсказка в окне команды ведёт к нужному переключателю.
При отзыве ключа этот сервер снимается с выбора для Mini App. Старая привязка к отозванному или удалённому серверу больше не мешает сохранить публикацию, тексты и оформление. После восстановления и запуска кабинета выберите доступный сервер для Mini App заново. Другой выбранный сервер сохраняется.
Если ошибка «Кабинет не найден или его ключ отозван» уже появилась в старой версии, обновите панель и перезагрузите страницу. Данные кабинета сохранятся; включать публикацию через SQL или переустанавливать панель не требуется.
HTTP 400 на первом шаге установки
Сообщение «Сайт ещё не опубликован» означает, что в панели выключена публикация кабинета. Это одинаково для установки рядом с панелью и на отдельном сервере.
Откройте Кабинет и Mini App → Брендинг и содержимое, заполните обязательные поля, включите Опубликовать кабинет и разрешить Mini App и нажмите Сохранить настройки. Дождитесь успешного сохранения и повторите ту же команду по SSH. Одной галочки без сохранения недостаточно. Новый ключ и переустановка панели не нужны: служба кабинета на этом шаге ещё не устанавливалась.
HTTP 401/403 означает отказ в доступе: проверьте ключ и возьмите актуальную команду в Серверы и установка. Другой HTTP 400 или HTML вместо JSON может приходить от reverse proxy: проверьте его правила и журнал sn-api.
Обновление
При обновлении готовой установки до v0.2.6 и новее стандартный кабинет на сервере этой же панели обновляется вместе с ней:
cd /opt/stealthnet-software && make update
Отдельная команда для такого кабинета не нужна. Обновление сохраняет ключ и настройки, проверяет готовность службы и возвращает предыдущие бинарники при ошибке. Отключённая и остановленная служба не включается автоматически. Повторный запуск команды также обновит отставшую сборку кабинета, если панель уже последней версии.
Команды на каждом сервере
На каждом сервере используется одинаковый каталог и команды. Сначала обновите панель, затем выполните обновление на отдельных серверах кабинета и подписки: они получают сборки со своей панели. Команда управляет только компонентами на сервере, где запущена.
cd /opt/stealthnet-software
| Команда | Действие |
|---|---|
make update |
Обновить установленные компоненты |
make start |
Запустить службы |
make stop |
Остановить службы |
make restart |
Перезапустить службы |
make status |
Показать состояние |
Caddy, PostgreSQL и настройки автозапуска не меняются. На сервере панели команды управляют панелью, её локальной подпиской, настроенным ботом и установленным кабинетом. На отдельном сервере — кабинетом, подпиской или обоими установленными сервисами. Бот без токена не запускается.
Новые установщики создают команды автоматически. Если отдельный сервис установлен до v0.2.6 и каталога с Makefile ещё нет, один раз добавьте команды от root (ключи и настройки сохранятся):
apt-get update && apt-get install -y curl ca-certificates python3 make
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/STEALTHNET-APP/STEALTHNET-SOFTWARE/v0.2.6/web/service-manager.py -o /root/stealthnet-service-manager.py
python3 /root/stealthnet-service-manager.py install-entrypoints
После этого используйте cd /opt/stealthnet-software && make update. Старые команды обновления продолжают работать. Для существующей установки через Docker используйте её Compose-файл.
Окружение и диагностика
Секреты: /etc/sn-cabinet/env, права 600. Служба: sn-cabinet. Проверка состояния:
systemctl status sn-cabinet --no-pager
journalctl -u sn-cabinet -n 80 --no-pager
curl -fsS http://127.0.0.1:8090/ready
После обновления проверьте также публичный /ready вашего домена. После отзыва установки или её ключа обновите окружение по новой команде из панели. Отзыв ключа не удаляет клиентские покупки.
При существующем nginx или контейнерном proxy используйте CABINET_PROXY=external и настройте HTTPS вручную. Подробные правила proxy и восстановления приведены во встроенной инструкции.