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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Налаштування Docker-контейнера для торгового бота
Простий
~1 день
Часті запитання

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

Етапи блокчейн-розробки

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

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

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

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

Dockerfile для Python-бота

FROM python:3.12-slim

# Системні залежності (якщо потрібні C-розширення типу ta-lib)
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 . .

# Не запускати від root
RUN adduser --disabled-password --gecos '' botuser
USER botuser

CMD ["python", "-u", "bot.py"]

Флаг -u в Python відключає буферизацію stdout — логи видні одразу, не після flush.

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

services:
  trading-bot:
    build: .
    container_name: trading_bot
    restart: unless-stopped  # рестарт при падінні, але не при ручній зупинці

    environment:
      - PYTHONUNBUFFERED=1
      - TZ=UTC

    # Секрети через env_file, не хардкодимо у compose
    env_file:
      - .env.secrets

    volumes:
      - ./data:/app/data          # персистентні дані бота
      - ./logs:/app/logs          # логи поза контейнером

    # Обмеження ресурсів
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'

    # Health check — Docker перезапустить якщо бот зависнув
    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_file достатньо при умові закритого репозиторію.

Health check через heartbeat файл

Бот пише timestamp у файл кожні N секунд. Docker перевіряє свіжість файлу:

# У боті — heartbeat кожні 10 сек
import threading
import time
import pathlib

def heartbeat_loop():
    while True:
        pathlib.Path('/app/data/heartbeat').touch()
        time.sleep(10)

threading.Thread(target=heartbeat_loop, daemon=True).start()
# healthcheck команда перевіряє що файл змінено < 60 сек тому
test: ["CMD", "bash", "-c", "[ $(($(date +%s) - $(date +%s -r /app/data/heartbeat))) -lt 60 ]"]

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

# Пересборка та заміна контейнера
docker-compose build trading-bot
docker-compose up -d --no-deps trading-bot

--no-deps не трогає інші сервіси. Контейнер зупиняється, новий стартує — downtime 5-10 секунд. Для торгового бота це звичайно прийнятно.

Корисні команди

# Запуск
docker-compose up -d

# Логи у реальному часі
docker-compose logs -f trading-bot

# Стан
docker-compose ps

# Вхід у контейнер для відладки
docker-compose exec trading-bot bash

# Рестарт
docker-compose restart trading-bot