Настройка 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