Перейти к содержимому

Требования к серверу

Минимум Рекомендуется
Процессор 1 ядро 2 ядра
Память 1 ГБ 2 ГБ
Диск 2 ГБ свободно 5 ГБ свободно
  • Архитектура: x86-64 или ARM64.
  • Система: Linux с Docker и Docker Compose v2.
  • Видеокарта: не нужна.

Если бот стоит на одном сервере с панелью, прибавьте эти цифры к требованиям панели.

Как мерили

  • Запускался настоящий бот версии 1.9.2. Telegram отвечал с задержкой 60 мс, панель — 20 мс.
  • Бот и база работали на одном ядре процессора.
  • В базе 10 тыс. или 100 тыс. пользователей, по 3 оплаты на каждого.
  • Чат: /start и кнопки меню (покупка, подписки, баланс, пополнение) от случайных пользователей.
  • Мини-апп и кабинет: вход, профиль, меню, подписка, тарифы, кошелёк, сама страница. В кабинете около 3% запросов — вход по паролю.
  • Каждая нагрузка держалась 30–40 секунд. Процессор — среднее за это время, память — пик.
  • PostgreSQL 16 с настройками по умолчанию (бот ставит 17-ю версию).

Для ориентира: 5 нажатий в секунду — это уже очень оживлённый бот.

Процессор и память бота на одном ядре

Процент — загрузка этого одного ядра: 30% значит, что ядро занято примерно на треть.

Нагрузка SQLite, 10 тыс. SQLite, 100 тыс. PostgreSQL, 10 тыс. PostgreSQL, 100 тыс.
Простой 0% · 31 МБ 0% · 31 МБ 0% · 30 МБ 0% · 30 МБ
Чат, 5 нажатий/с 2% · 43 МБ 3% · 44 МБ 2% · 36 МБ 2% · 35 МБ
Чат, 25 нажатий/с 9% · 45 МБ 10% · 46 МБ 9% · 37 МБ 9% · 37 МБ
Чат, 100 нажатий/с 28% · 50 МБ 32% · 53 МБ 33% · 44 МБ 30% · 45 МБ
Мини-апп, 50 запросов/с 5% · 49 МБ 6% · 51 МБ 7% · 43 МБ 6% · 44 МБ
Мини-апп, 200 запросов/с 16% · 52 МБ 17% · 54 МБ 20% · 45 МБ 19% · 46 МБ
Кабинет, 50 запросов/с 17% · 54 МБ 17% · 63 МБ 15% · 47 МБ 18% · 55 МБ
Смешанная: чат 25 + мини-апп 100 + кабинет 30 23% · 56 МБ 24% · 67 МБ 29% · 49 МБ 29% · 60 МБ
Стресс: чат 100 + мини-апп 300 + кабинет 100 68% · 68 МБ 70% · 83 МБ 61% · 67 МБ 62% · 84 МБ

У SQLite база работает внутри процесса бота, поэтому её доля уже входит в цифры. PostgreSQL — отдельный контейнер: сверху он занимал 160–180 МБ памяти и не больше 6% ядра.

Время ответа, мс (медиана / 95%)

Нагрузка SQLite, 10 тыс. SQLite, 100 тыс. PostgreSQL, 10 тыс. PostgreSQL, 100 тыс.
Чат, 25 нажатий/с 141 / 208 139 / 207 142 / 212 141 / 210
Чат, 100 нажатий/с 143 / 235 142 / 212 211 / 341 187 / 292
Мини-апп, 200 запросов/с 1 / 65 1 / 65 2 / 66 2 / 66
Кабинет, 50 запросов/с 1 / 76 1 / 76 2 / 76 2 / 77
Смешанная — чат 145 / 262 141 / 215 198 / 375 174 / 346
Смешанная — мини-апп 1 / 66 1 / 66 8 / 119 5 / 105
Стресс — чат 201 / 365 196 / 378 360 / 703 346 / 780
Стресс — мини-апп 8 / 116 12 / 135 68 / 274 70 / 313

Почти всё время ответа в чате — это два обращения к Telegram по 60 мс, заложенные в симуляцию. Сам бот тратит на нажатие единицы миллисекунд.

Размер базы

10 тыс. пользователей 100 тыс. пользователей
SQLite 10 МБ 54 МБ
PostgreSQL 17 МБ 92 МБ

Образ бота занимает на диске около 100 МБ.

Итог

  • Ни одна нагрузка не упёрлась в одно ядро, и ни один запрос не завершился ошибкой.
  • Память бота не выходила за 85 МБ.
  • Число пользователей в базе на нагрузку почти не влияет.
  • Когда бот и PostgreSQL делят одно ядро, PostgreSQL под пиковой нагрузкой отвечает медленнее SQLite.