VPS для бота на Python: production-деплой под systemd
Запустить бота на ноутбуке легко, но 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 для каждого. Один сервер спокойно тянет несколько лёгких ботов одновременно.