EQVPS

Як захостити Telegram-бота на VPS (і щоб він не падав)

Jun 15, 2026 · 2 min read · EQVPS Team

Telegram-бот, що працює, лише поки відкритий ноутбук, насправді не працює — він демонструється. Щоб він реально був онлайн, відповідав о 3 ночі, переживав ваші перезавантаження й свої падіння, йому потрібен сервер. Ось увесь шлях від початку до кінця, з командами.

Спершу хороша новина: бот — крихітне навантаження. Майже весь час він простоює в очікуванні повідомлень, тож найдешевший сервер тягне його легко — без виділеного IP, без домену, без наворотів.

1. Токен у BotFather

У Telegram напишіть @BotFather, надішліть /newbot, оберіть ім'я та username. Він видасть токен виду 12345:AAH.... Ставтеся до нього як до пароля — у кого токен, той керує ботом.

2. Мінімальний бот

Зайдіть на сервер по SSH, поставте Python і бібліотеку:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot

Бот, що відповідає — ~/mybot/bot.py:

import os
from telegram.ext import ApplicationBuilder, CommandHandler

async def start(update, ctx):
    await update.message.reply_text("Живий і на сервері. 🟢")

app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Зверніть увагу: токен читається зі змінної оточення, а не зашитий у код. Це важливо для наступного кроку.

3. Те, що реально тримає бота: systemd

Якщо просто запустити python bot.py, він помре, щойно ви закриєте SSH. systemd-сервіс — те, що змушує його пережити вихід, падіння й перезавантаження. Створіть /etc/systemd/system/mybot.service:

[Unit]
Description=Telegram bot
After=network-online.target

[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...ваш-токен
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser

[Install]
WantedBy=multi-user.target

Потім:

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot      # має бути active (running)
journalctl -u mybot -f           # живі логи

Restart=always — рядок, що робить усю роботу: впав — повернувся за 5 секунд. enable — підніметься після перезавантаження. Це і є різниця між «я колись запускав бота» і «мій бот онлайн».

4. Чому без домену й відкритих портів

Бот використовує long polling — сам ходить у Telegram за апдейтами, тож усередину нічого стукати не має. Ні публічного URL, ні вхідного правила фаєрвола, ні виділеного IP. Саме тому NAT-VPS (спільний IP, SSH на порту) — нормальний і дешевий дім для бота. Webhook існує для дуже великих обсягів, але на старті він майже напевно не потрібен.

Чесні застереження

Ось і все. Спершу закрийте сервер за чек-лістом безпеки, покладіть сервіс — і бот лишається онлайн незалежно від вас. На крипто-оплаченому VPS він може працювати за хвилину після того, як ви наважилися.

FAQ

Який VPS потрібен для Telegram-бота?

Найменший. Бот майже весь час простоює, чекаючи апдейти, тож 1 ГБ RAM і 2 ядра вистачає більшості ботів — навіть доволі завантаженим. Більше потрібно, лише якщо бот сам робить важку роботу (обробка картинок, локальна модель, велика БД).

Як тримати бота запущеним після закриття SSH?

Запускати як systemd-сервіс. На відміну від запуску в терміналі, systemd тримає його живим після виходу, перезапускає при падінні й піднімає після перезавантаження. Це і є різниця між іграшкою й тим, що стабільно працює.

Чому бот зупиняється, коли я відключаюсь?

Бо ви запустили його в SSH-сесії, і він помирає з її кінцем. Оберніть у systemd-сервіс (або tmux для швидкого тесту) — і він працює незалежно від вашого входу.

Чи потрібен домен або webhook для Telegram-бота?

Ні. Long polling (getUpdates) не вимагає публічного URL, домену та вхідного порту — бот сам ходить у Telegram. Тому NAT-VPS без виділеного IP чудово підходить для бота. Webhook — опційна оптимізація для великих обсягів.

Чи безпечно тримати токен бота на VPS?

Так, якщо ставитися до нього як до пароля: тримати у змінній оточення чи файлі, читабельному лише користувачем бота, не комітити в git і закрити сервер SSH-ключами. Витік — відкличте в BotFather і випустіть новий.

← Back to blogSee plans & pricing →