VPS с самостоятельным администрированием
Хостинг Telegram Mini App на своём VPS
Mini App — HTTPS-интерфейс, который открывается внутри Telegram. Он может работать рядом с polling-ботом: браузер обращается к веб-backend, а бот продолжает получать сообщения через Bot API. Ради кнопки меню переключать бота на webhooks не нужно.
Скачать исходники Mini App. Пример показывает пользователю его подтверждённые имя и Telegram ID. Внутри — EN/RU интерфейс, backend на стандартной библиотеке Node 24 и Caddy для HTTPS. Нет базы, обращений к модели, оплаты или хранения переписки. Сначала можно проверить хостинг и границу авторизации, затем проектировать своё приложение.
Подготовьте DNS и сервер
Нужен Linux VPS с Docker Compose и отдельный hostname, например mini.example.com. Для одного демонстрационного приложения предлагаем начать с 1 vCPU, 1 ГБ RAM и 20 ГБ диска; это не замер ёмкости. Если сервер общий с другими службами, см. выбор VPS.
Направьте A-запись домена на VPS. AAAA добавляйте только при настроенном и доступном IPv6. Разрешите входящие TCP 80/443 в firewall провайдера и хоста, сохранив SSH. Порты должны быть свободны. Если их уже использует веб-сервер, настройте совместную работу через существующий reverse proxy, не останавливая посторонний сайт.
Настройте и запустите
mkdir -p /opt/telegram-mini-app
cd /opt/telegram-mini-app
curl --fail --show-error --location \
https://cloudcompute.ru/downloads/telegram-mini-app-v1.zip \
--output mini-app.zip
unzip mini-app.zip
cd telegram-mini-app
cp .env.example .env
chmod 600 .env
nano .env
Укажите токен того бота, из меню которого откроется страница, и настоящий DNS hostname:
MINI_APP_DOMAIN=mini.example.com
TELEGRAM_BOT_TOKEN=replace-with-botfather-token
docker compose up -d --build
docker compose ps
docker compose logs --tail=50 app caddy
Caddy принимает HTTPS и передаёт запросы на app:8080 внутри Docker. Порты хоста публикует только Caddy; не открывайте 8080 наружу. Выпуск сертификата зависит от DNS и доступности сервера. Caddy получает домен, а токен бота — только backend. Не помещайте токен в JavaScript, адрес браузера или публичный каталог.
Откройте https://YOUR_HOSTNAME/healthz: {"ok":true} проверяет доступность HTTP, не вход Telegram. При обычном посещении / браузером страница показывает инструкцию и отключает проверку, поскольку данных запуска Telegram нет.
Откройте через меню бота
У подтверждённого @BotFather выберите /setmenubutton, нужного бота, подпись кнопки и https://YOUR_HOSTNAME/. В личном чате нажмите эту кнопку, затем Проверить подключение. Должны появиться подтверждённые имя и числовой ID. Через пять минут закройте Mini App и откройте заново для свежих данных запуска.
Если страница открывается, но проверка не проходит, проверьте принадлежность токена этому боту, точное совпадение hostname с origin страницы и часы сервера. См. диагностику. Ручной ввод Telegram ID в обычном браузере не создаёт аутентифицированный запрос.
Каким данным доверяет backend
Браузер передаёт исходный Telegram.WebApp.initData в JSON POST. Сервер проверяет HMAC с токеном бота по всем подписанным полям, кроме hash; поле signature, если есть, также участвует. Это отличается от Ed25519-проверки для третьих сторон. Сервер отклоняет повторяющиеся и повреждённые поля, старые timestamps и некорректные данные пользователя. initDataUnsafe не используется как подтверждение личности.
Допускаются данные не старше пяти минут и до 30 секунд расхождения часов в будущее. Ответы не кэшируются, подписанные данные и имена не записываются в логи. В течение этого окна корректные данные можно отправить повторно. Для показа человеку только его собственного ID это допустимо, но не даёт прав на чужие записи и не защищает покупки, изменения или платный inference от повторов. Для них нужна отдельная логика продукта.
Сохраняйте .env, исходники и Caddyfile, а при перезапусках — volumes сертификатов. Docker tags Node/Caddy и URL Telegram SDK изменяемые: среда не полностью зафиксирована. Offline-тесты проверяют искусственно подписанные данные и локальный HTTP. Реальный запуск из Telegram, публичный TLS и развёртывание на VPS пока не проверены.
Далее: главная страница кластера, обслуживание, официальная документация Mini Apps.
Тарифы из текущего каталога
Сейчас не удалось загрузить планы. Смотрите актуальные тарифы на странице цен.