MAATRIX / Блог / VPS для Telegram-бота на aiogram: полный деплой

VPS для Telegram-бота на aiogram: полный деплой

VPS для Telegram-бота на aiogram: деплой и работа 24/7
Блог MAATRIX · 2026-07-07

aiogram — самый популярный асинхронный фреймворк для Telegram-ботов на Python. Чтобы бот отвечал пользователям круглосуточно, ему нужен сервер, который не выключается. Развернём бота на VPS: venv, systemd, выбор между polling и вебхуком.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Почему боту нужен сервер, а не ноутбук

Пока вы тестируете бота на локальной машине, всё работает. Но как только вы закроете крышку ноутбука или пропадёт интернет — бот замолчит, а пользователи будут писать в пустоту. Продакшн-бот обязан жить на машине, которая включена всегда.

VPS даёт постоянный аптайм, внешний IP (нужен для вебхуков) и полный root-доступ для установки чего угодно. Даже младшего тарифа с 1 ГБ RAM хватает для бота с тысячами пользователей, потому что aiogram асинхронный и почти не грузит CPU в простое.

  • Работает 24/7 — не зависит от вашего компьютера.
  • Внешний IP и домен — можно поднять вебхук с TLS.
  • Лёгкий по ресурсам — async-архитектура экономит RAM.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Telegram-бота

Установка Python и окружения

aiogram 3.x требует Python 3.9+. Ставим свежий Python, git и создаём отдельного пользователя с изолированным venv.

sudo apt update && sudo apt install -y python3 python3-venv python3-pip git
sudo useradd -r -m -s /bin/bash botuser
sudo -u botuser bash -c 'cd ~ && git clone https://github.com/you/mybot.git'
sudo -u botuser bash -c 'cd ~/mybot && python3 -m venv venv && venv/bin/pip install -U aiogram'

Токен бота, полученный от @BotFather, кладём в файл окружения, а не в код. Права 600 — чтобы токен не прочитал никто, кроме бота.

echo 'BOT_TOKEN=123456:AAxxxxxxxx' | sudo -u botuser tee /home/botuser/mybot/.env
sudo chmod 600 /home/botuser/mybot/.env

Минимальный бот на aiogram 3

Вот рабочий каркас бота на long polling — этого достаточно для старта. Токен читается из окружения.

import asyncio, os
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import CommandStart

dp = Dispatcher()

@dp.message(CommandStart())
async def start(m: Message):
    await m.answer('Привет! Бот работает на VPS 24/7.')

async def main():
    bot = Bot(os.environ['BOT_TOKEN'])
    await dp.start_polling(bot)

if __name__ == '__main__':
    asyncio.run(main())

Long polling не требует домена и TLS — бот сам ходит за обновлениями к Telegram. Это идеальный вариант для старта и большинства ботов.

Автозапуск через systemd

Чтобы бот пережил ребут и сам поднимался после сбоя, оформляем его как systemd-сервис. Файл окружения подхватывается через EnvironmentFile.

sudo tee /etc/systemd/system/mybot.service > /dev/null <<'EOF'
[Unit]
Description=Aiogram Telegram bot
After=network-online.target
Wants=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
systemctl status mybot
journalctl -u mybot -f

Теперь при sudo reboot бот поднимется автоматически, а при исключении в коде systemd перезапустит его через 5 секунд.

Вебхук вместо polling

Для высоконагруженных ботов вебхук эффективнее: Telegram сам присылает апдейты на ваш HTTPS-эндпоинт, без постоянных запросов. Нужен домен и TLS — проще всего через nginx и certbot.

sudo apt install -y nginx certbot python3-certbot-nginx
sudo certbot --nginx -d bot.example.com

nginx проксирует запросы на локальный порт бота (например, 8080), а aiogram обрабатывает их через встроенный aiohttp-сервер. Для большинства проектов polling проще и не требует домена — переходите на вебхук, только когда упрётесь в нагрузку.

Где брать сервер и частые ошибки

Telegram-бот нетребователен к ресурсам, но чувствителен к сетевой доступности Telegram API. Локации MAATRIX в UK, США и РФ дают стабильный доступ к серверам Telegram, AMD EPYC + NVMe обеспечивают мгновенный отклик, а от $8/мес это дешевле любой замены упавшему хостингу. Оплата картой РФ, СБП, криптой или MAAT снимает вопрос зарубежной оплаты.

  • Токен в коде и git — украдут бота; храните в .env с правами 600.
  • Запуск через nohup — не поднимется после ребута; используйте systemd.
  • Две копии бота с одним токеном — конфликт getUpdates, апдейты теряются.
  • Нет Restart=always — одно исключение кладёт бота навсегда.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Telegram-бота

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Polling или вебхук — что выбрать?

Для старта и большинства ботов — polling: не нужен домен и TLS. Вебхук имеет смысл при высокой нагрузке, когда важна экономия на постоянных запросах к API.

Сколько RAM нужно боту на aiogram?

Обычному боту хватает 512 МБ-1 ГБ. aiogram асинхронный и почти не грузит память в простое; больше нужно только при работе с медиа и БД.

Почему бот отвечает с двух аккаунтов дубликатами?

Скорее всего запущены две копии с одним токеном. Остановите лишний процесс — при polling один токен обслуживает только один экземпляр.