MAATRIX / Блог / VPS для бота на Python: production-деплой под systemd

VPS для бота на Python: production-деплой под systemd

VPS для бота на Python: деплой в production под systemd
Блог MAATRIX · 2026-07-07

Запустить бота на ноутбуке легко, но production требует, чтобы процесс жил после ребута, перезапускался при падении и не тёк памятью. Разберём полный путь: изолированный venv, systemd, окружение и логи.

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

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

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

Почему боту нужен именно VPS

Телеграм- и Discord-боты держат постоянное соединение с API платформы и должны быть онлайн 24/7. Домашний компьютер для этого не годится: сон, перезагрузки, скачки IP и провайдерские NAT рвут long-polling и вебхуки.

VPS решает это: статический белый IP, аптайм близкий к 100% и root-доступ, чтобы настроить systemd и firewall под себя. Для российской аудитории важен ещё один момент — Telegram Bot API и многие платёжные шлюзы стабильнее отвечают с зарубежного адреса.

  • Постоянный онлайн — процесс не зависит от вашей машины.
  • Белый IP — нужен для вебхуков и внешних вызовов.
  • Изоляция — бот не мешает другим сервисам и наоборот.

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

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

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

Подготовка сервера и Python

Обновляем систему, ставим Python, venv и firewall. В свежих Ubuntu 22.04/24.04 Python 3 уже есть — нужен только модуль venv и заголовки для сборки колёс.

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip git ufw
sudo ufw allow OpenSSH
sudo ufw enable

Заводим отдельного пользователя без прав root — бот не должен работать от суперпользователя.

sudo useradd -m -s /bin/bash botuser
sudo -u botuser git clone https://github.com/you/mybot.git /home/botuser/mybot

Виртуальное окружение и зависимости

Никогда не ставьте пакеты бота в системный Python — конфликты версий сломают apt. Создаём venv и ставим зависимости внутрь него.

sudo -u botuser bash -lc 'cd /home/botuser/mybot \
  && python3 -m venv .venv \
  && .venv/bin/pip install --upgrade pip \
  && .venv/bin/pip install -r requirements.txt'

Секреты (токен бота, API-ключи) держим в файле окружения с правами 600, а не в коде и не в git.

sudo -u botuser tee /home/botuser/mybot/.env >/dev/null <<'EOF'
BOT_TOKEN=123456:AA...your-token
ADMIN_ID=100500
EOF
sudo chmod 600 /home/botuser/mybot/.env

Запуск под systemd с автоперезапуском

systemd поднимет бота после ребута и перезапустит упавший процесс. Создаём unit-файл:

sudo nano /etc/systemd/system/mybot.service
[Unit]
Description=Python Telegram bot
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
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
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot

Параметр Restart=always вернёт процесс к жизни после падения, а network-online.target гарантирует, что сеть уже поднята к моменту старта — иначе бот упадёт на первом же запросе к API.

Логи и обновление кода

Логи systemd собирает сам — смотрим их через journalctl в реальном времени:

journalctl -u mybot -f
journalctl -u mybot --since '1 hour ago'

Обновление сводится к git pull, доустановке зависимостей и рестарту:

sudo -u botuser bash -lc 'cd /home/botuser/mybot && git pull \
  && .venv/bin/pip install -r requirements.txt'
sudo systemctl restart mybot

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

Python-боту редко нужен мощный сервер: базовому Telegram-боту хватает 1 ГБ RAM. На тарифах MAATRIX это AMD EPYC + NVMe от $8/мес — процессор с высокой производительностью на ядро уверенно тянет асинхронный код, а локации UK, США и РФ дают стабильный доступ к Bot API. Оплата картой РФ, СБП, криптой или токеном MAAT — удобно, когда иностранные провайдеры карты не принимают.

  • Пакеты в системный Python — ломает apt; всегда используйте venv.
  • Токен в репозитории — утечёт при первом же push; храните в .env с правами 600.
  • Нет Restart=always — после падения бот молча умрёт.
  • Два инстанса polling — Telegram отдаёт ошибку 409; запускайте только одну копию.

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

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

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

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

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

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

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

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

Для старта проще long-polling: он не требует домена и TLS. Вебхук экономнее по ресурсам и нужен при большой нагрузке, но требует nginx и сертификата.

Сколько RAM нужно Python-боту?

Простому боту хватает 1 ГБ. Больше памяти нужно, если бот держит кэши, работает с базой или обрабатывает медиа.

Как запускать несколько ботов на одном VPS?

Заведите отдельный unit-файл и venv для каждого. Один сервер спокойно тянет несколько лёгких ботов одновременно.