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

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

Блог MAATRIX · 2026-07-07

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

Почему боту нужен именно 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\nsudo apt install -y python3 python3-venv python3-pip git ufw\nsudo ufw allow OpenSSH\nsudo ufw enable
', 'Заводим отдельного пользователя без прав root — бот не должен работать от суперпользователя.', '
sudo useradd -m -s /bin/bash botuser\nsudo -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 \\\n  && python3 -m venv .venv \\\n  && .venv/bin/pip install --upgrade pip \\\n  && .venv/bin/pip install -r requirements.txt'
", 'Секреты (токен бота, API-ключи) держим в файле окружения с правами 600, а не в коде и не в git.', "
sudo -u botuser tee /home/botuser/mybot/.env >/dev/null <<'EOF'\nBOT_TOKEN=123456:AA...your-token\nADMIN_ID=100500\nEOF\nsudo chmod 600 /home/botuser/mybot/.env
"]

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

['systemd поднимет бота после ребута и перезапустит упавший процесс. Создаём unit-файл:', '
sudo nano /etc/systemd/system/mybot.service
', '
[Unit]\nDescription=Python Telegram bot\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=botuser\nWorkingDirectory=/home/botuser/mybot\nEnvironmentFile=/home/botuser/mybot/.env\nExecStart=/home/botuser/mybot/.venv/bin/python bot.py\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target
', '
sudo systemctl daemon-reload\nsudo systemctl enable --now mybot\nsudo systemctl status mybot
', 'Параметр Restart=always вернёт процесс к жизни после падения, а network-online.target гарантирует, что сеть уже поднята к моменту старта — иначе бот упадёт на первом же запросе к API.']

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

['Логи systemd собирает сам — смотрим их через journalctl в реальном времени:', "
journalctl -u mybot -f\njournalctl -u mybot --since '1 hour ago'
", 'Обновление сводится к git pull, доустановке зависимостей и рестарту:', "
sudo -u botuser bash -lc 'cd /home/botuser/mybot && git pull \\\n  && .venv/bin/pip install -r requirements.txt'\nsudo 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-бота

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

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

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

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

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

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

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