Налаштування торгового бота на хмарі (AWS, DigitalOcean, Hetzner)

Запуск та налаштування торгового бота на хмарі (AWS, DigitalOcean, Hetzner) Після запуску бота на хмарному сервері через 3 години він упав — повідомлення `Killed` у логах. Причина: нестача пам'яті. Торговий бот завантажив у пам'ять ринкові дані, а OOM killer зніс процес. Без автоматичного перезап

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Запуск та налаштування торгового бота на хмарі (AWS, DigitalOcean, Hetzner)

Після запуску бота на хмарному сервері через 3 години він упав — повідомлення Killed у логах. Причина: нестача пам'яті. Торговий бот завантажив у пам'ять ринкові дані, а OOM killer зніс процес. Без автоматичного перезапуску він залишився мертвим до ранку. Таке трапляється часто: боти пишуть у трейді, а інфраструктуру підганяють абияк.

Ми налаштовуємо ботів уже 5 років (з 2019 року). За цей час набили ґулі на WebSocket-розривах, витоках ключів і неправильному виборі сервера. Виробили простий патерн: VPS з запасом, systemd для управління, Telegram-алерти й жодного Docker без потреби. 100+ успішних проектів — наш досвід.

Як вибрати сервер для безперебійної роботи?

Ключ — сервер з 2 vCPU та 4 ГБ RAM. Для скальпінгу сервер має бути поруч із біржею. Наприклад, для Binance підходять AWS Tokyo (latency ~10 мс) або Vultr Singapore (15 мс). Між Європою та Азією затримка перевищує 200 мс — для HFT це смертельно. Ми рекомендуємо Hetzner для алгоритмічної торгівлі: він дешевший за AWS у 2–3 рази, але latency на 20–30 мс вища, що некритично для стратегій на хвилинних свічках. Для Binance краще DigitalOcean (регіон NYC) — 40 мс до серверів біржі. VPS з 2 vCPU коштує ~$10 на місяць, що в 4 рази дешевше виділеного сервера за $40. Економія: $30/міс при переході з виділеного сервера на VPS.

Параметр Мінімум Рекомендація
CPU 1 vCPU 2 vCPU
RAM 1 ГБ 4 ГБ для мультивалютних ботів
Диск 20 ГБ SSD 40 ГБ SSD (логи займають багато)
Мережа Будь-яка Близькість до біржі: <50 мс
Провайдер DigitalOcean, Hetzner Vultr для Binance, AWS для мультибіржових

Чому Systemd кращий за Docker?

Для одного бота Docker додає 5–10% накладних витрат на CPU/RAM і ускладнює налагодження. Systemd — вбудований у Linux демон, надійний і мінімалістичний. Він на 5–10% ефективніший за Docker у використанні ресурсів. Ось unit-файл, який ми використовуємо:

[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 

Офіційна документація systemd: https://www.freedesktop.org/software/systemd/man/systemd.service.html

Параметр MemoryMax обмежує пам'ять для cgroup v2, запобігаючи OOM kill. А Restart=on-failure гарантує перезапуск тільки після аварійного завершення, не чіпаючи навмисні зупинки. Для профілювання використовуйте perf або py-spy.

Після створення файлу:

systemctl daemon-reload systemctl enable trading-bot systemctl start trading-bot journalctl -u trading-bot -f 

Як убезпечити API-ключі?

Ніколи не поміщайте ключі в код — це найчастіша причина витоків. Використовуємо змінні оточення. Приклад файлу .env з правами 600:

# /home/bot/trading-bot/.env 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 

Додатково можна зберігати ключі в AWS Secrets Manager або 1Password CLI, але для одного бота .env з файрволами та мінімумом прав достатньо.

Як налаштувати моніторинг через Telegram?

Мінімальний набір — Telegram-алерти та heartbeat. Асинхронний код надсилає повідомлення при старті, помилках і раз на годину (heartbeat). Якщо повідомлення не приходить — бот упав. Приклад на Python з httpx:

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") # Heartbeat раз на годину async def heartbeat(): while True: await asyncio.sleep(3600) await send_alert(f"Heartbeat: balance={await get_balance()}", "INFO") 

Telegram-алерти на 50% швидше за email-сповіщення в доставці критичних повідомлень. Додатково підключаємо UptimeRobot для зовнішньої перевірки: він пінгує IP і при відсутності відповіді шле SMS.

Як оновити бота без зупинки?

Деплой нової версії:

cd /home/bot/trading-bot git pull origin main /home/bot/.venv/bin/pip install -r requirements.txt systemctl restart trading-bot 

Systemd коректно чекає завершення поточної ітерації перед запуском нового процесу. Для критичних оновлень можна використовувати systemctl restart --check — але при Restart=on-failure новий процес стартує без втрати даних. Граційне завершення (graceful shutdown) забезпечується через SIGTERM.

Додаткові поради
  • Для профілювання затримок використовуйте perf або py-spy.
  • Для обмеження ресурсів через cgroup v2 задайте MemoryHigh замість MemoryMax.
  • Використовуйте systemd drop-in для перевизначення параметрів без редагування основного файлу.
  • Аналізуйте throughput бота через journalctl.

Покрокове розгортання

  1. Вибрати VPS: 2 vCPU, 4 ГБ RAM, регіон близько до біржі.
  2. Встановити Ubuntu 22.04 LTS, оновити пакети.
  3. Створити користувача bot без sudo.
  4. Склонувати репозиторій з ботом.
  5. Встановити Python 3.11 та залежності у віртуальному оточенні.
  6. Створити .env з API-ключами та Telegram-токеном.
  7. Помістити systemd unit-файл та увімкнути сервіс.
  8. Налаштувати Telegram-алерти: старт, помилки, heartbeat раз на годину.
  9. Перевірити журнал: journalctl -u trading-bot -f.
  10. Налаштувати зовнішній моніторинг (UptimeRobot).

Після цих кроків бот працює 24/7 з автоматичним перезапуском. Якщо щось пішло не так — Telegram повідомить.

Типові помилки самостійного налаштування

Основні проблеми: відсутність автоматичного рестарту (бот висить мертвим), API-ключі в коді (витік на GitHub), слабкий сервер (OOM kill при зростанні даних), відсутність моніторингу (дізнаєтеся про падіння через тиждень). Для мінімізації ризиків використовуйте описаний вище шаблон — він перевірений на сотнях продакшен-запусків.

Що входить у налаштування під ключ

  • Підбір та налаштування VPS з урахуванням стратегії.
  • Розгортання бота з усіма залежностями у віртуальному оточенні.
  • Налаштування systemd для автозапуску та обмеження ресурсів.
  • Інтеграція Telegram-алертів (старт, помилки, heartbeat).
  • Документація з доступів і процедур оновлення.
  • Онбордінг команди: пояснення архітектури та логування.

Термін виконання: 2–4 дні. Ціна — від $250 за базову конфігурацію, до $500 для мультивалютних систем. Оцінимо ваш проект безкоштовно.

Наша компанія працює з 2019 року: 5+ років досвіду, 100+ успішних проектів, гарантія uptime 99.9%. Замовте налаштування під ключ — ми знаємо, як зробити надійно.