Как хостить Mini App на GitHub Pages: бесплатно, быстро, без сервера

от автора

Когда я только начинал пилить TG Notion, первой мыслью было: «Надо брать VPS, ставить Nginx, прикручивать домен, получать сертификат…». Знакомо? Если ты хоть раз настраивал HTTPS для Mini App — ты понимаешь, о чём я.

Но оказалось, что можно вообще без всего этого. Серьёзно. GitHub Pages даёт тебе бесплатный HTTPS-хостинг для статики, а деплой происходит через git push. Никаких серверов, никакой боли. Звучит как сказка? Сейчас расскажу, как это работает, и покажу на живом примере — TG Notion.

1. В чём проблема

Для Telegram Mini App нужен URL с https://. Без этого WebApp не откроется.

Ты делаешь демку. Она ещё сырая. Меняешь интерфейс пять раз в день. Ловишь баги. И после каждого изменения ты должен идти на сервер, пушить код, перезапускать Nginx, чистить кэш. Это отнимает время и бесит.

Сервер — это продакшен. А демка — это песочница. Она должна обновляться мгновенно и без геморроя. Ты хочешь просто сохранить файл и сразу увидеть результат. Не лезть в SSH, не трогать конфиги, не ждать деплой.

2. Решение — GitHub Pages

GitHub Pages — это бесплатный хостинг для статических сайтов. Вы просто кладёте HTML/CSS/JS файлы в репозиторий, включаете Pages в настройках репозитория — и у вас есть HTTPS. Деплой — git push. Всё. Бесплатно. Навсегда.

Для Mini App этого более чем достаточно. Боту не нужен сервер для WebApp — он просто открывает URL. Вся логика живёт в Telegram (WebApp API), ваш код — в браузере. Поэтому никаких бэкендов, никаких аренд.

Давайте по шагам.

2.1 Создаём репозиторий

Заходим на GitHub, жмём «+» → «New repository». Имя: tg-notion-ui (или любое другое). Важно: репозиторий должен быть публичным — иначе GitHub Pages не включится для частного репо.

git clone https://github.com/yourname/tg-notion-ui.gitcd tg-notion-ui

2.2 Структура файлов

В корне репозитория создаём три файла:

index.html — точка входа. Telegram откроет этот файл по URL кнопки Menu Button.

<!DOCTYPE html><html lang="ru"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Mini App</title></head><body>    <h1>Привет, я Mini App</h1></body></html>

style.css — здесь живёт тема, стили, отступы. Никакой магии, только CSS-переменные.

:root {    --bg: #1a1a2e;    --text: #e0e0e0;    --accent: #4a86ff;}

app.js — логика WebApp. Подключаем Telegram WebApp API, инициализируем, разворачиваем на весь экран.

const tg = window.Telegram.WebApp;tg.ready();tg.expand();

2.3 Включаем GitHub Pages

Идём в Settings репозитория → Pages → Branch: выставляем main, жмём Save. Через минуту сайт живёт по адресу https://yourname.github.io/tg-notion-ui/.

В BotFather прописываем этот URL как Menu Button. Готово.

3. Пример — TG Notion

TG Notion — это живой пример. Это notes & tasks внутри Telegram, которые хостятся на GitHub Pages.

Что там под капотом:

  • Mini App: чистый HTML/CSS/JS. SPA, без фреймворков, без сборщиков. Файлы — статика.

  • Данные: localStorage. Да, это костыль. Но для демки это работает идеально. Пользователь что-то создал — оно сохранилось и открылось здесь же. Никакой базы, никаких бэкендов.

  • Бот: aiogram + SQLite. Это дверь. Просто регистрация пользователя. Но база здесь не для Mini App — она для будущего. Сейчас бот работает с моего компа,пока я не доведу его до ума. Но когда я перенесу базу на сервер, WebApp проснётся для синхронизации данных.

Репозиторий всего этого лежит здесь: https://github.com/Elrick-from-Malnibone/tg-notion-ui

4. Пошаговая настройка GitHub Pages

Держите инструкцию:

Шаг 1. Создайте репозиторий на GitHub. Название не важно. Главное — он должен быть публичным.

Шаг 2. Положите в репозиторий три файла: index.htmlstyle.cssapp.js. Содержимое — любое. Это просто пример, вы можете написать своё.

Шаг 3. Settings → Pages → Branch: main/ (root). Save. Ждать минуту. Открывайте URL из Settings.

Шаг 4. BotFather → /mybots → Menu Button. URL: ваш https://....github.io/..... Готово. Ваш Mini App живёт по этому адресу.

Никаких серверов. Никаких Nginx. Никаких Certbot.

5. Ограничения

Честно. GitHub Pages — это статика. Только фронтенд. Вы не можете запустить там Python, Node.js, базу данных. Нельзя API, нельзя вебхуки. Поэтому:

  • Нет серверной логики. Ваш код не исполняется на сервере — он просто лежит и отображается. Юзер жмёт кнопку — фронтенд реагирует. Данные сохраняются тут же, на устройстве.

  • Нет синхронизации. Данные локальны. Пользователь открыл на телефоне — на десктопе их нет. Это демо. Так и задумано.

Когда вы дорастёте до продакшена, вы возьмёте сервер, базу, настройте API, вебхуки. Тогда данные будут бегать между устройствами, и localStorage уйдёт в историю.

6. Что дальше

TG Notion — это только начало. Дальше я добавлю:

  • Синхронизацию через базу данных (SQLite/PostgreSQL)

  • Шеринг заметок и задач (кнопка «Поделиться»)

  • Общие доски (совместное редактирование)

  • Напоминания (бот пришлёт уведомление в Telegram)

  • Категории и папки

Но это всё потом. Сейчас — демка. И она полностью работает. Вы можете потрогать её здесь: @Telega_notion_bot.

7. Ссылки

Надеюсь, было полезно. Тестируйте, ломайте, пишите в чат.

ссылка на оригинал статьи https://habr.com/ru/articles/1052416/