Remove redundant log file creation for MCP services since output is already captured by Docker logs. This simplifies deployment by removing unnecessary volume mounts and file management. Changes: - Remove logs/ directory creation from Dockerfile - Remove logs/ volume mount from docker-compose.yml - Update start_mcp_services.py to send output to DEVNULL - Update documentation to reflect changes (DOCKER.md, docs/DOCKER.md) - Update .env.example to remove logs/ from volume description Users can still view MCP service output via 'docker logs' or 'docker-compose logs -f'. Trading session logs in data/agent_data/ remain unchanged.
8.1 KiB
Docker Deployment Guide
Quick Start
Prerequisites
- Docker Engine 20.10+
- Docker Compose 2.0+
- API keys for OpenAI, Alpha Vantage, and Jina AI
First-Time Setup
-
Clone repository:
git clone https://github.com/Xe138/AI-Trader-Server.git cd AI-Trader-Server -
Configure environment:
cp .env.example .env # Edit .env and add your API keys -
Run with Docker Compose:
docker-compose up
That's it! The container will:
- Fetch latest price data from Alpha Vantage
- Start all MCP services
- Run the trading agent with default configuration
Configuration
Environment Variables
Edit .env file with your credentials:
# Required
OPENAI_API_KEY=sk-...
ALPHAADVANTAGE_API_KEY=...
JINA_API_KEY=...
# Optional (defaults shown)
MATH_HTTP_PORT=8000
SEARCH_HTTP_PORT=8001
TRADE_HTTP_PORT=8002
GETPRICE_HTTP_PORT=8003
AGENT_MAX_STEP=30
Custom Trading Configuration
Simple Method (Recommended):
Create a configs/custom_config.json file - it will be automatically used:
# Copy default config as starting point
cp configs/default_config.json configs/custom_config.json
# Edit your custom config
nano configs/custom_config.json
# Run normally - custom_config.json is automatically detected!
docker-compose up
Priority order:
configs/custom_config.json(if exists) - Highest priority- Command-line argument:
docker-compose run ai-trader-server configs/other.json configs/default_config.json(fallback)
Advanced: Use a different config file name:
docker-compose run ai-trader-server configs/my_special_config.json
Custom Configuration via Volume Mount
The Docker image includes a default configuration at configs/default_config.json. You can override sections of this config by mounting a custom config file.
Volume mount:
volumes:
- ./my-configs:/app/user-configs # Contains config.json
Custom config example (./my-configs/config.json):
{
"models": [
{
"name": "gpt-5",
"basemodel": "openai/gpt-5",
"signature": "gpt-5",
"enabled": true
}
]
}
This overrides only the models section. All other settings (agent_config, log_config, etc.) are inherited from the default config.
Validation: Config is validated at container startup. Invalid configs cause immediate exit with detailed error messages.
Complete config: You can also provide a complete config that replaces all default values:
{
"agent_type": "BaseAgent",
"date_range": {
"init_date": "2025-10-01",
"end_date": "2025-10-31"
},
"models": [...],
"agent_config": {...},
"log_config": {...}
}
Usage Examples
Run in foreground with logs
docker-compose up
Run in background (detached)
docker-compose up -d
docker-compose logs -f # Follow logs
Run with custom config
docker-compose run ai-trader-server configs/custom_config.json
Stop containers
docker-compose down
Rebuild after code changes
docker-compose build
docker-compose up
Data Persistence
Volume Mounts
Docker Compose mounts two volumes for persistent data. By default, these are stored in the project directory:
./data:/app/data- Price data and trading records./configs:/app/configs- Configuration files (allows editing configs without rebuilding)
Custom Volume Location
You can change where data is stored by setting VOLUME_PATH in your .env file:
# Store data in a different location
VOLUME_PATH=/home/user/trading-data
# Or use a relative path
VOLUME_PATH=./volumes
This will store data in:
/home/user/trading-data/data//home/user/trading-data/configs/
Note: The directory structure is automatically created. You'll need to copy your existing configs:
# After changing VOLUME_PATH
mkdir -p /home/user/trading-data/configs
cp configs/custom_config.json /home/user/trading-data/configs/
Reset Data
To reset all trading data:
docker-compose down
rm -rf ${VOLUME_PATH:-.}/data/agent_data/*
docker-compose up
Backup Trading Data
# Backup
tar -czf ai-trader-server-backup-$(date +%Y%m%d).tar.gz data/agent_data/
# Restore
tar -xzf ai-trader-server-backup-YYYYMMDD.tar.gz
Using Pre-built Images
Pull from GitHub Container Registry
docker pull ghcr.io/xe138/ai-trader-server:latest
Run without Docker Compose
docker run --env-file .env \
-v $(pwd)/data:/app/data \
-p 8080:8080 \
ghcr.io/xe138/ai-trader-server:latest
Specific version
docker pull ghcr.io/xe138/ai-trader-server:v1.0.0
Troubleshooting
MCP Services Not Starting
Symptom: Container exits immediately or errors about ports
Solutions:
- View container logs:
docker-compose logs - Check if API port 8080 is already in use:
lsof -i :8080 - Verify MCP services started by checking Docker logs for service startup messages
Missing API Keys
Symptom: Errors about missing environment variables
Solutions:
- Verify
.envfile exists:ls -la .env - Check required variables set:
grep OPENAI_API_KEY .env - Ensure
.envin same directory as docker-compose.yml
Data Fetch Failures
Symptom: Container exits during data preparation step
Solutions:
- Verify Alpha Vantage API key valid
- Check API rate limits (5 requests/minute for free tier)
- View logs:
docker-compose logs | grep "Fetching and merging"
Permission Issues
Symptom: Cannot write to data directory
Solutions:
- Ensure data directory is writable:
chmod -R 755 data - Check volume mount permissions
- May need to create directory first:
mkdir -p data
Container Keeps Restarting
Symptom: Container restarts repeatedly
Solutions:
- View logs to identify error:
docker-compose logs --tail=50 - Disable auto-restart: Comment out
restart: unless-stoppedin docker-compose.yml - Check if main.py exits with error
Advanced Usage
Override Entrypoint
Run bash inside container for debugging:
docker-compose run --entrypoint /bin/bash ai-trader-server
Build Multi-platform Images
For ARM64 (Apple Silicon) and AMD64:
docker buildx build --platform linux/amd64,linux/arm64 -t ai-trader-server .
View Container Resource Usage
docker stats ai-trader-server
Access API Directly
API server exposed on host:
- REST API: http://localhost:8080
MCP services run internally and are not exposed to the host.
Development Workflow
Local Code Changes
- Edit code in project root
- Rebuild image:
docker-compose build - Run updated container:
docker-compose up
Test Different Configurations
Method 1: Use the standard custom_config.json
# Create and edit your config
cp configs/default_config.json configs/custom_config.json
nano configs/custom_config.json
# Run - automatically uses custom_config.json
docker-compose up
Method 2: Test multiple configs with different names
# Create multiple test configs
cp configs/default_config.json configs/conservative.json
cp configs/default_config.json configs/aggressive.json
# Edit each config...
# Test conservative strategy
docker-compose run ai-trader-server configs/conservative.json
# Test aggressive strategy
docker-compose run ai-trader-server configs/aggressive.json
Method 3: Temporarily switch configs
# Temporarily rename your custom config
mv configs/custom_config.json configs/custom_config.json.backup
cp configs/test_strategy.json configs/custom_config.json
# Run with test strategy
docker-compose up
# Restore original
mv configs/custom_config.json.backup configs/custom_config.json
Production Deployment
For production use, consider:
- Use specific version tags instead of
latest - External secrets management (AWS Secrets Manager, etc.)
- Health checks in docker-compose.yml
- Resource limits (CPU/memory)
- Log aggregation (ELK stack, CloudWatch)
- Orchestration (Kubernetes, Docker Swarm)
See design document in docs/plans/2025-10-30-docker-deployment-design.md for architecture details.