Налаштування Docker-контейнера для торгового бота

Налаштування Docker-контейнера для торгового бота Торговий бот, запущений безпосередньо на VPS без ізоляції — це проблеми з залежностями, непередбачуваний рестарт при падінні та відсутність відтворюваності. API-ключі лежать у відкритому вигляді, версії пакетів конфліктують, а при збої відновлення

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

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

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

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

Налаштування Docker-контейнера для торгового бота

Торговий бот, запущений безпосередньо на VPS без ізоляції — це проблеми з залежностями, непередбачуваний рестарт при падінні та відсутність відтворюваності. API-ключі лежать у відкритому вигляді, версії пакетів конфліктують, а при збої відновлення займає години. Ми стикалися з цим у кожному другому проєкті. Docker вирішує все за пару годин налаштування: ізоляція середовища, автоматичний рестарт, безпечна передача ключів, логування, оновлення без downtime. Ми бачимо, як клієнти економлять до 40% на VPS після переходу на Docker. Пропонуємо розгортання під ключ з гарантією стабільності та економією ресурсів.

Чому Docker краще bare-metal для торгового бота?

Запуск на голій VPS без контейнера — ручне керування залежностями, ризик конфліктів версій, довге відновлення після збою. Docker ізолює середовище та дає відтворюваність: образ бота однаково працює на будь-якому сервері. Як зазначено в статті Вікіпедії про Docker, контейнеризація забезпечує ізоляцію та відтворюваність. Порівняємо ключові метрики:

Параметр Bare-metal Docker
Час розгортання нового екземпляра 30-60 хвилин 5-10 хвилин
Відновлення після збою 15-30 хвилин 30 секунд (healthcheck)
Ізоляція залежностей ручна автоматична
Споживання пам'яті ~300 MB (середнє) ~200 MB (образ slim)

Docker скорочує час відновлення з годин до секунд. Для частих редеплоїв це критично. Плюс контейнер споживає менше ресурсів, що знижує вартість VPS — економія становить $50–100 на місяць.

Healthcheck: як налаштувати автоматичний перезапуск

Healthcheck — це перевірка, що бот живий. Якщо він завис, Docker перезапускає контейнер. Ми пишемо heartbeat-файл у контейнері та перевіряємо його свіжість:

healthcheck: test: ["CMD", "bash", "-c", "[ $(($(date +%s) - $(date +%s -r /app/data/heartbeat))) -lt 60 ]"] interval: 30s timeout: 10s retries: 3 start_period: 10s 

Бот пише heartbeat кожні 10 секунд (threading + pathlib). Якщо файл не оновлюється довше 60 секунд — час перезапускати. Параметри: interval 30 секунд, timeout 10 секунд, retries 3, start_period 10 секунд.

Dockerfile і docker-compose

Dockerfile для Python-бота

FROM python:3.12-slim RUN apt-get update && apt-get install -y --no-install-recommends build-essential && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . RUN adduser --disabled-password --gecos '' botuser USER botuser CMD ["python", "-u", "bot.py"] 

Флаг -u вимикає буферизацію stdout — логи видно одразу.

docker-compose з секретами та автозапуском

services: trading-bot: build: . container_name: trading_bot restart: unless-stopped environment: - PYTHONUNBUFFERED=1 - TZ=UTC env_file: - .env.secrets volumes: - ./data:/app/data - ./logs:/app/logs deploy: resources: limits: memory: 512M cpus: '0.5' healthcheck: test: ["CMD", "python", "-c", "import os; os.path.exists('/app/data/heartbeat')"] interval: 30s timeout: 10s retries: 3 start_period: 10s logging: driver: "json-file" options: max-size: "50m" max-file: "5" 

.env.secrets (ніколи не комітити в git):

BINANCE_API_KEY=your_key_here BINANCE_SECRET=your_secret_here TELEGRAM_BOT_TOKEN=notification_token 

Додайте .env.secrets у .gitignore. Для вищої безпеки використовуємо Docker Secrets або HashiCorp Vault — це входить у наш пакет "Безпека".

Порівняння методів зберігання секретів

Метод Простота Безпека Рекомендація
.env файл Висока Низька (ключі у файловій системі) Для тестів
Docker Secrets Середня Висока (секрети лише в пам'яті) Продакшен
HashiCorp Vault Низька Дуже висока Великі проєкти

Процес роботи: етапи

  1. Аналіз коду бота — перевіряємо залежності, точки відмови, витоки пам'яті.
  2. Проектування Docker-образу — оптимізуємо шари, мінімізуємо розмір.
  3. Налаштування docker-compose — healthcheck, логи, обмеження ресурсів, монтування томів.
  4. Інтеграція секретів — підключаємо безпечне зберігання API-ключів.
  5. CI/CD — автоматична збірка та деплой при змінах у репозиторії (GitHub Actions).
  6. Тестування — перевірка на тестовій мережі, стрес-тест.
  7. Деплой та документація — запуск на VPS, інструкція з експлуатації та відновлення.

В одному з проєктів ми перевели бота з bare-metal на Docker — час відновлення скоротився з 20 хвилин до 30 секунд, а витрати на VPS знизилися на 40% завдяки оптимізації пам'яті. Клієнт отримав стабільну роботу без нічних падінь.

Що входить у роботу?

  • Аудит поточного коду та залежностей
  • Збірка Docker-образу з оптимізацією шарів
  • Налаштування docker-compose з healthcheck, логами та обмеженням ресурсів
  • Інтеграція безпечного зберігання ключів (env_file або Docker Secrets)
  • Створення CI/CD для автоматичної збірки та деплою
  • Документація з експлуатації та відновлення
  • Підтримка 7 днів після запуску

Оцінимо ваш проєкт безкоштовно — напишіть нам.

Терміни орієнтовно

Налаштування одного контейнера — від 1 до 3 днів залежно від складності бота. Для complex-рішень з кількома сервісами (бота, БД, черги) — до 5 днів.

Оновлення без повного downtime

docker-compose build trading-bot docker-compose up -d --no-deps trading-bot 

--no-deps не чіпає інші сервіси. Downtime — 5-10 секунд. Для більшості ботів цього достатньо. Якщо потрібен zero-downtime, використовуємо стратегію blue-green (вартість і складність вищі, але можливо).

Наша команда має 5+ років досвіду з Docker у продакшені, понад 50 успішних проєктів. Гарантуємо SLA 99.9% для контейнера. Якщо виникнуть питання — зв'яжіться з нами для консультації.