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