Настройка торгового бота на облачном сервере
Написать торгового бота и запустить его надёжно в production — две разные задачи. Большинство ботов падают не из-за ошибок в торговой логике, а из-за проблем с инфраструктурой: обрыв соединения, OOM kill, нет мониторинга, нет рестарта после краша. Эта страница — про инфраструктурную часть.
Минимальный жизнеспособный стек
Для одного бота на Python/Node.js:
VPS (DigitalOcean/Hetzner/Vultr) → systemd service → процесс бота → биржевой API
↓
Telegram alert bot (алерты о статусе)
Почему не Docker для одного бота? Лишняя сложность без выгоды. Systemd проще, надёжнее для single-process, и работает на любом Linux VPS из коробки.
Выбор сервера
| Параметр | Минимум | Рекомендация |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1GB | 2–4GB |
| Диск | 20GB SSD | 40GB SSD |
| Сеть | Любая | Близость к бирже (для latency) |
| Провайдер | DigitalOcean, Hetzner | Vultr Tokyo/Singapore для Binance |
Для ботов, где latency критична (скальпинг, арбитраж) — сервер в том же регионе, что биржа. Binance mainnet — AWS Tokyo или Singapore. FTX был в AWS Virginia. Latency между Европой и Азией — 200–300ms, это смерть для HFT стратегий.
Systemd unit файл
# /etc/systemd/system/trading-bot.service
[Unit]
Description=Trading Bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=bot
WorkingDirectory=/home/bot/trading-bot
EnvironmentFile=/home/bot/trading-bot/.env
ExecStart=/home/bot/.venv/bin/python main.py
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
# Ограничения ресурсов
MemoryMax=512M
CPUQuota=80%
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable trading-bot
systemctl start trading-bot
journalctl -u trading-bot -f # логи в реальном времени
Restart=on-failure + RestartSec=10 — бот автоматически рестартует после краша с 10-секундной паузой. Важно: on-failure, а не always — бот не должен рестартовать при нормальном exit (например, при ручной остановке).
Переменные окружения и секреты
API ключи — только через environment variables, никогда в коде:
# /home/bot/trading-bot/.env (права 600, владелец bot)
BINANCE_API_KEY=xxx
BINANCE_SECRET=yyy
TELEGRAM_BOT_TOKEN=zzz
TELEGRAM_CHAT_ID=123456
chmod 600 /home/bot/trading-bot/.env
chown bot:bot /home/bot/trading-bot/.env
Мониторинг и алерты в Telegram
Минимальный мониторинг для бота:
import httpx, asyncio
TELEGRAM_URL = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
async def send_alert(message: str, level: str = "INFO"):
prefix = {"INFO": "ℹ️", "WARN": "⚠️", "ERROR": "🚨"}.get(level, "")
await httpx.AsyncClient().post(TELEGRAM_URL, json={
"chat_id": TELEGRAM_CHAT_ID,
"text": f"{prefix} *{level}*\n{message}",
"parse_mode": "Markdown"
})
# Алерт при старте
await send_alert("Bot started", "INFO")
# Алерт при ордере
await send_alert(f"Order placed: BUY {qty} BTC @ {price}", "INFO")
# Heartbeat — бот жив
async def heartbeat():
while True:
await asyncio.sleep(3600) # раз в час
await send_alert(f"Heartbeat: balance={await get_balance()}", "INFO")
Если heartbeat перестал приходить — бот упал. Дополнительно можно настроить UptimeRobot или BetterStack для внешнего мониторинга процесса.
Обновление бота без downtime
# Деплой новой версии
cd /home/bot/trading-bot
git pull origin main
/home/bot/.venv/bin/pip install -r requirements.txt
# Graceful restart — systemd дождётся завершения текущей итерации
systemctl restart trading-bot
Настройка инфраструктуры для одного бота от нуля: 2–4 часа. Для нескольких ботов с Docker Compose и централизованным логированием — 1–2 дня.







