Запуск та налаштування торгового бота на хмарі (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.
Покрокове розгортання
- Вибрати VPS: 2 vCPU, 4 ГБ RAM, регіон близько до біржі.
- Встановити Ubuntu 22.04 LTS, оновити пакети.
- Створити користувача
botбез sudo. - Склонувати репозиторій з ботом.
- Встановити Python 3.11 та залежності у віртуальному оточенні.
- Створити
.envз API-ключами та Telegram-токеном. - Помістити systemd unit-файл та увімкнути сервіс.
- Налаштувати Telegram-алерти: старт, помилки, heartbeat раз на годину.
- Перевірити журнал:
journalctl -u trading-bot -f. - Налаштувати зовнішній моніторинг (UptimeRobot).
Після цих кроків бот працює 24/7 з автоматичним перезапуском. Якщо щось пішло не так — Telegram повідомить.
Типові помилки самостійного налаштування
Основні проблеми: відсутність автоматичного рестарту (бот висить мертвим), API-ключі в коді (витік на GitHub), слабкий сервер (OOM kill при зростанні даних), відсутність моніторингу (дізнаєтеся про падіння через тиждень). Для мінімізації ризиків використовуйте описаний вище шаблон — він перевірений на сотнях продакшен-запусків.
Що входить у налаштування під ключ
- Підбір та налаштування VPS з урахуванням стратегії.
- Розгортання бота з усіма залежностями у віртуальному оточенні.
- Налаштування systemd для автозапуску та обмеження ресурсів.
- Інтеграція Telegram-алертів (старт, помилки, heartbeat).
- Документація з доступів і процедур оновлення.
- Онбордінг команди: пояснення архітектури та логування.
Термін виконання: 2–4 дні. Ціна — від $250 за базову конфігурацію, до $500 для мультивалютних систем. Оцінимо ваш проект безкоштовно.
Наша компанія працює з 2019 року: 5+ років досвіду, 100+ успішних проектів, гарантія uptime 99.9%. Замовте налаштування під ключ — ми знаємо, як зробити надійно.







