Skip to content
VDS · Застосунки та боти

Telegram-бот на сервері: запуск і автозапуск

Як розмістити Telegram-бота на VPS: ізоляція під власним користувачем, сервіс systemd, зберігання токена, логи та обробка збоїв мережі.

Оновлено 23 серпня 2026 р.

Боту потрібен постійно запущений процес — саме тут безкоштовний хостинг закінчується і починається VDS. Боту майже не потрібні ресурси: навіть VDS-1 (1 ядро, 2 ГБ) впорається з ботом на тисячі користувачів.

Розміщення

Окремий користувач і каталог — щоб бот не працював від імені root:

useradd -r -m -d /srv/bot -s /usr/sbin/nologin botuser
cd /srv/bot && sudo -u botuser git clone https://github.com/you/bot.git .
sudo -u botuser python3 -m venv venv
sudo -u botuser venv/bin/pip install -r requirements.txt

Для Node.js: npm ci --omit=dev замість venv.

Тримайте токен у файлі середовища, а не в коді:

install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env

Файл із токеном не повинен потрапити до репозиторію: додайте його в .gitignore перед першим комітом.

Служба

/etc/systemd/system/tgbot.service:

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

[Service]
User=botuser
WorkingDirectory=/srv/bot
EnvironmentFile=/srv/bot/.env
ExecStart=/srv/bot/venv/bin/python -u bot.py
Restart=always
RestartSec=10
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tgbot
journalctl -u tgbot -f

Прапорець -u у Python вимикає буферизацію виводу — без нього логи з'являться в journal із затримкою на кілька хвилин або не з'являться взагалі.

Long polling чи webhook

Long polling простіший: бот сам опитує Telegram, і вам не потрібно нічого відкривати назовні. Для більшості завдань цього достатньо.

Webhook швидший і ощадніший щодо трафіку, але потребує домену й сертифіката:

location /bot/token {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
}

Знадобляться Let's Encrypt і зворотний проксі. Telegram неохоче приймає самопідписані сертифікати — використовуйте звичайний.

Ніколи не повинно працювати дві копії бота одночасно: Telegram доставляє оновлення лише одному отримувачу, і боти почнуть відповідати з перебоями. Після правок робіть restart, а не другий запуск.

Дані

SQLite достатньо для налаштувань і статистики — файл поруч із ботом. Окремий сервер бази даних потрібен лише тоді, коли в бота є вебпанель або кілька процесів.

Типові помилки

СимптомПричина
Conflict: terminated by other getUpdatesПрацюють дві копії бота
Бот замовкає після ночіНе налаштовано Restart=always, і процес впав під час збою мережі
UnauthorizedТокен відкликано або скопійовано із зайвими пробілами
Немає логівБуферизація виводу або запис у файл замість stdout
Вручну працює, як служба падаєНемає змінних середовища в systemd

Токен, який з'явився на скриншоті, у публічному репозиторії чи в чужому чаті, вважається скомпрометованим. Відкличте його через BotFather і змініть файл .env — не розраховуйте на те, що ніхто не помітить.