Налаштування 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 | Низька | Дуже висока | Великі проєкти |
Процес роботи: етапи
- Аналіз коду бота — перевіряємо залежності, точки відмови, витоки пам'яті.
- Проектування Docker-образу — оптимізуємо шари, мінімізуємо розмір.
- Налаштування docker-compose — healthcheck, логи, обмеження ресурсів, монтування томів.
- Інтеграція секретів — підключаємо безпечне зберігання API-ключів.
- CI/CD — автоматична збірка та деплой при змінах у репозиторії (GitHub Actions).
- Тестування — перевірка на тестовій мережі, стрес-тест.
- Деплой та документація — запуск на 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% для контейнера. Якщо виникнуть питання — зв'яжіться з нами для консультації.







