TradingAgents/DOCKER.md

6.5 KiB

Running TradingAgents with Docker

Docker provides an isolated, reproducible environment for running TradingAgents.

🚀 Quick Start

1. Prerequisites

2. Build and Run

# Build the container
docker-compose build

# Start TradingAgents web interface
docker-compose up

# Access at http://localhost:8000

That's it! The web interface will be available at http://localhost:8000

📦 What's Included

The Docker container includes:

  • Python 3.11
  • All TradingAgents dependencies
  • Web interface (Chainlit)
  • Portfolio management
  • Backtesting framework
  • Broker integrations (Alpaca)
  • All data providers configured

🔧 Configuration

Environment Variables

Create a .env file with your API keys:

# Copy example
cp .env.example .env

# Edit with your keys
nano .env

Required variables:

  • OPENAI_API_KEY or ANTHROPIC_API_KEY - For LLM
  • ALPHA_VANTAGE_API_KEY - For market data
  • ALPACA_API_KEY and ALPACA_SECRET_KEY - For paper trading (optional)

Data Persistence

The following directories are mounted as volumes to persist data:

volumes:
  - ./data:/app/data                    # Market data cache
  - ./eval_results:/app/eval_results    # Analysis results
  - ./portfolio_data:/app/portfolio_data # Portfolio state

🎯 Usage

Web Interface (Default)

# Start web interface
docker-compose up

# Access at http://localhost:8000

Run Python Scripts

# Run a specific script
docker-compose run tradingagents python examples/portfolio_example.py

# Run tests
docker-compose run tradingagents pytest tests/ -v

# Open Python shell
docker-compose run tradingagents python

Interactive Shell

# Open bash in container
docker-compose run tradingagents bash

# Then run any commands
python examples/paper_trading_alpaca.py
pytest tests/

🔬 Optional Services

Jupyter Notebook

For interactive analysis and development:

# Start with Jupyter
docker-compose --profile jupyter up

# Access Jupyter at http://localhost:8888

🛠️ Docker Commands Reference

Building

# Build/rebuild images
docker-compose build

# Build without cache
docker-compose build --no-cache

# Build specific service
docker-compose build tradingagents

Running

# Start in foreground
docker-compose up

# Start in background (detached)
docker-compose up -d

# View logs
docker-compose logs -f

# Stop services
docker-compose down

# Stop and remove volumes
docker-compose down -v

Maintenance

# View running containers
docker-compose ps

# Restart services
docker-compose restart

# Remove stopped containers
docker-compose rm

# Prune unused images/volumes
docker system prune -a

🐛 Troubleshooting

Port Already in Use

If port 8000 is already in use:

# Edit docker-compose.yml
ports:
  - "8001:8000"  # Change 8000 to 8001 (or any free port)

Permission Issues

If you encounter permission errors:

# Fix ownership of data directories
sudo chown -R $USER:$USER data/ eval_results/ portfolio_data/

Container Won't Start

Check logs for errors:

docker-compose logs tradingagents

Common issues:

  • Missing .env file
  • Invalid API keys
  • Port conflicts

Out of Memory

Increase Docker memory limit:

  • Docker Desktop: Settings → Resources → Memory → Increase limit
  • Linux: Edit /etc/docker/daemon.json

Clean Restart

Complete reset:

# Stop everything
docker-compose down -v

# Remove images
docker rmi tradingagents:latest

# Rebuild
docker-compose build --no-cache

# Start fresh
docker-compose up

📊 Production Deployment

Security Considerations

  1. Never commit .env - Already in .gitignore
  2. Use secrets management - Docker secrets or vault
  3. Network security - Use reverse proxy (nginx)
  4. Rate limiting - Configure Chainlit auth
  5. HTTPS - Use SSL certificates

Example Production Setup

# docker-compose.prod.yml
version: '3.8'

services:
  tradingagents:
    build: .
    restart: always
    env_file:
      - .env.prod
    environment:
      - CHAINLIT_AUTH_SECRET=${CHAINLIT_AUTH_SECRET}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.tradingagents.rule=Host(`trading.yourdomain.com`)"
      - "traefik.http.routers.tradingagents.tls=true"

Monitoring

Add monitoring with Prometheus/Grafana:

# Add to docker-compose.yml
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"

🌐 Cloud Deployment

AWS ECS

# Build for AWS
docker build -t tradingagents:latest .

# Tag for ECR
docker tag tradingagents:latest YOUR_ECR_REPO/tradingagents:latest

# Push to ECR
docker push YOUR_ECR_REPO/tradingagents:latest

Google Cloud Run

# Build for Cloud Run
gcloud builds submit --tag gcr.io/YOUR_PROJECT/tradingagents

# Deploy
gcloud run deploy tradingagents \
  --image gcr.io/YOUR_PROJECT/tradingagents \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Digital Ocean

# Use Docker Compose on droplet
doctl compute droplet create tradingagents \
  --image docker-20-04 \
  --size s-2vcpu-4gb \
  --region nyc1

# SSH and setup
ssh root@YOUR_DROPLET_IP
git clone YOUR_REPO
cd TradingAgents
docker-compose up -d

💡 Tips

  1. Development Mode: Mount code as volume to see changes without rebuild

    volumes:
      - ./tradingagents:/app/tradingagents
    
  2. Multiple Environments: Use different compose files

    docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
    
  3. Resource Limits: Prevent runaway containers

    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
    
  4. Health Checks: Monitor container health

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 3
    

📚 Resources