b2dc2dacd7
- Delete temp files: _tmp_analysis.py, nul, dashboard_screenshot.png - Move ea/ to archive/ea/ (deprecated) - Move 12 Docker helper scripts (.bat/.sh) to docker/scripts/ - Move 5 Docker docs to docker/docs/ - Move .env.docker.example, requirements-docker.txt to docker/ - Update all scripts with cd to project root for correct path resolution - Update all doc references to new paths - Update .gitignore with bot.pid, bot_output.log, *.png patterns - Update CLAUDE.md, README.md directory trees Root reduced from ~40 files to 12 essential files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
438 lines
9.6 KiB
Markdown
438 lines
9.6 KiB
Markdown
# XAUBot AI - Docker Setup Guide
|
|
|
|
Complete guide to running the XAUBot AI trading system with Docker.
|
|
|
|
## 📋 Prerequisites
|
|
|
|
- Docker Engine 20.10+
|
|
- Docker Compose 2.0+
|
|
- 4GB+ RAM available
|
|
- MetaTrader 5 account credentials
|
|
|
|
## 🏗️ Architecture
|
|
|
|
The Docker setup includes 4 services:
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Host Machine │
|
|
├─────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ Dashboard │─────▶│ Trading API │ │
|
|
│ │ Next.js │ │ FastAPI │ │
|
|
│ │ Port: 3000 │ │ Port: 8000 │ │
|
|
│ └──────────────┘ └──────┬───────┘ │
|
|
│ │ │
|
|
│ ┌──────▼───────┐ │
|
|
│ │ PostgreSQL │ │
|
|
│ │ Port: 5432 │ │
|
|
│ └──────────────┘ │
|
|
│ │
|
|
│ ┌──────────────┐ (Optional - Profile: admin) │
|
|
│ │ pgAdmin │ │
|
|
│ │ Port: 5050 │ │
|
|
│ └──────────────┘ │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Services
|
|
|
|
1. **postgres** - PostgreSQL 16 database for trade logging
|
|
2. **trading-api** - Python FastAPI backend serving trading data
|
|
3. **dashboard** - Next.js web interface for monitoring
|
|
4. **pgadmin** - Database management UI (optional, admin profile)
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### 1. Clone & Setup
|
|
|
|
```bash
|
|
cd "Smart Automatic Trading BOT + AI"
|
|
|
|
# Copy environment template
|
|
cp docker/.env.docker.example .env
|
|
```
|
|
|
|
### 2. Configure Environment
|
|
|
|
Edit `.env` file with your credentials:
|
|
|
|
```bash
|
|
# Required
|
|
MT5_LOGIN=your_login
|
|
MT5_PASSWORD=your_password
|
|
MT5_SERVER=your_server
|
|
MT5_PATH=/path/to/mt5
|
|
|
|
# Optional - adjust ports if needed
|
|
API_PORT=8000
|
|
DASHBOARD_PORT=3000
|
|
DB_PORT=5432
|
|
```
|
|
|
|
### 3. Start Services
|
|
|
|
**Option A: All services (without pgAdmin)**
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
**Option B: All services including pgAdmin**
|
|
```bash
|
|
docker-compose --profile admin up -d
|
|
```
|
|
|
|
**Option C: Specific services only**
|
|
```bash
|
|
# Just database and API
|
|
docker-compose up -d postgres trading-api
|
|
|
|
# Add dashboard
|
|
docker-compose up -d dashboard
|
|
```
|
|
|
|
### 4. Access Services
|
|
|
|
- **Dashboard**: http://localhost:3000
|
|
- **Trading API**: http://localhost:8000
|
|
- **API Docs**: http://localhost:8000/docs
|
|
- **pgAdmin**: http://localhost:5050 (if using admin profile)
|
|
- **PostgreSQL**: localhost:5432
|
|
|
|
## 📊 Service Management
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
# All services
|
|
docker-compose logs -f
|
|
|
|
# Specific service
|
|
docker-compose logs -f dashboard
|
|
docker-compose logs -f trading-api
|
|
docker-compose logs -f postgres
|
|
|
|
# Last 50 lines
|
|
docker-compose logs --tail=50 trading-api
|
|
```
|
|
|
|
### Check Status
|
|
|
|
```bash
|
|
# List running containers
|
|
docker-compose ps
|
|
|
|
# Check health
|
|
docker-compose ps --format json | jq '.[].Health'
|
|
|
|
# Detailed status
|
|
docker inspect trading_bot_api
|
|
```
|
|
|
|
### Restart Services
|
|
|
|
```bash
|
|
# Restart all
|
|
docker-compose restart
|
|
|
|
# Restart specific service
|
|
docker-compose restart trading-api
|
|
docker-compose restart dashboard
|
|
```
|
|
|
|
### Stop Services
|
|
|
|
```bash
|
|
# Stop all (keeps data)
|
|
docker-compose stop
|
|
|
|
# Stop and remove containers (keeps data)
|
|
docker-compose down
|
|
|
|
# Stop and remove everything including volumes (⚠️ deletes data!)
|
|
docker-compose down -v
|
|
```
|
|
|
|
## 🔧 Development & Debugging
|
|
|
|
### Access Container Shell
|
|
|
|
```bash
|
|
# Trading API container
|
|
docker exec -it trading_bot_api bash
|
|
|
|
# Dashboard container
|
|
docker exec -it trading_bot_dashboard sh
|
|
|
|
# Database
|
|
docker exec -it trading_bot_db psql -U trading_bot -d trading_db
|
|
```
|
|
|
|
### Rebuild After Code Changes
|
|
|
|
```bash
|
|
# Rebuild all
|
|
docker-compose build
|
|
|
|
# Rebuild specific service
|
|
docker-compose build trading-api
|
|
docker-compose build dashboard
|
|
|
|
# Rebuild and restart
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
### View Resource Usage
|
|
|
|
```bash
|
|
# CPU, Memory, Network
|
|
docker stats
|
|
|
|
# Specific container
|
|
docker stats trading_bot_api
|
|
```
|
|
|
|
## 🗄️ Database Management
|
|
|
|
### Connect to PostgreSQL
|
|
|
|
```bash
|
|
# Via Docker
|
|
docker exec -it trading_bot_db psql -U trading_bot -d trading_db
|
|
|
|
# Via host (if port exposed)
|
|
psql -h localhost -p 5432 -U trading_bot -d trading_db
|
|
```
|
|
|
|
### Backup Database
|
|
|
|
```bash
|
|
# Create backup
|
|
docker exec trading_bot_db pg_dump -U trading_bot trading_db > backup_$(date +%Y%m%d).sql
|
|
|
|
# Restore backup
|
|
docker exec -i trading_bot_db psql -U trading_bot -d trading_db < backup_20260206.sql
|
|
```
|
|
|
|
### Using pgAdmin
|
|
|
|
1. Start with admin profile:
|
|
```bash
|
|
docker-compose --profile admin up -d
|
|
```
|
|
|
|
2. Open http://localhost:5050
|
|
|
|
3. Login:
|
|
- Email: admin@trading.local
|
|
- Password: admin123
|
|
|
|
4. Add Server:
|
|
- Host: postgres
|
|
- Port: 5432
|
|
- Database: trading_db
|
|
- Username: trading_bot
|
|
- Password: trading_bot_2026
|
|
|
|
## 🔍 Troubleshooting
|
|
|
|
### Container Won't Start
|
|
|
|
```bash
|
|
# Check logs
|
|
docker-compose logs trading-api
|
|
|
|
# Check events
|
|
docker events --filter container=trading_bot_api
|
|
|
|
# Inspect container
|
|
docker inspect trading_bot_api
|
|
```
|
|
|
|
### Port Already in Use
|
|
|
|
```bash
|
|
# Find what's using the port
|
|
netstat -ano | findstr :3000
|
|
netstat -ano | findstr :8000
|
|
|
|
# Change port in .env
|
|
DASHBOARD_PORT=3001
|
|
API_PORT=8001
|
|
|
|
# Restart
|
|
docker-compose down
|
|
docker-compose up -d
|
|
```
|
|
|
|
### API Can't Connect to MT5
|
|
|
|
1. Check MT5 credentials in `.env`
|
|
2. Ensure MT5 terminal is running (if running on host)
|
|
3. Check container logs:
|
|
```bash
|
|
docker-compose logs trading-api | grep MT5
|
|
```
|
|
|
|
### Dashboard Shows Connection Error
|
|
|
|
1. Check if API is healthy:
|
|
```bash
|
|
curl http://localhost:8000/api/health
|
|
```
|
|
|
|
2. Check API logs:
|
|
```bash
|
|
docker-compose logs trading-api
|
|
```
|
|
|
|
3. Verify API_URL in dashboard:
|
|
```bash
|
|
docker exec -it trading_bot_dashboard env | grep API
|
|
```
|
|
|
|
### Database Connection Issues
|
|
|
|
```bash
|
|
# Check if postgres is healthy
|
|
docker-compose ps postgres
|
|
|
|
# Test connection
|
|
docker exec -it trading_bot_db pg_isready -U trading_bot
|
|
|
|
# Check logs
|
|
docker-compose logs postgres
|
|
```
|
|
|
|
## 🔐 Security Best Practices
|
|
|
|
1. **Change Default Passwords**
|
|
```bash
|
|
# In .env
|
|
DB_PASSWORD=strong_password_here
|
|
PGADMIN_PASSWORD=another_strong_password
|
|
```
|
|
|
|
2. **Don't Expose Unnecessary Ports**
|
|
```yaml
|
|
# In docker-compose.yml, comment out if not needed:
|
|
# ports:
|
|
# - "5432:5432" # Only if you need external DB access
|
|
```
|
|
|
|
3. **Use Secrets for Production**
|
|
```bash
|
|
# Use Docker secrets instead of .env
|
|
docker secret create mt5_password password.txt
|
|
```
|
|
|
|
4. **Restrict Network Access**
|
|
```bash
|
|
# Only expose dashboard port
|
|
docker-compose up -d postgres trading-api
|
|
# Then separately: docker-compose up -d dashboard
|
|
```
|
|
|
|
## 📈 Performance Tuning
|
|
|
|
### Allocate More Resources
|
|
|
|
```yaml
|
|
# In docker-compose.yml
|
|
services:
|
|
trading-api:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '2.0'
|
|
memory: 2G
|
|
reservations:
|
|
cpus: '1.0'
|
|
memory: 1G
|
|
```
|
|
|
|
### Optimize Database
|
|
|
|
```bash
|
|
# Connect to DB
|
|
docker exec -it trading_bot_db psql -U trading_bot -d trading_db
|
|
|
|
# Run vacuum
|
|
VACUUM ANALYZE;
|
|
|
|
# Check table sizes
|
|
SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
|
|
FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
|
|
```
|
|
|
|
## 🔄 Updates & Maintenance
|
|
|
|
### Update Images
|
|
|
|
```bash
|
|
# Pull latest base images
|
|
docker-compose pull
|
|
|
|
# Rebuild
|
|
docker-compose build --no-cache
|
|
|
|
# Restart
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Clean Up
|
|
|
|
```bash
|
|
# Remove unused images
|
|
docker image prune -a
|
|
|
|
# Remove unused volumes (⚠️ careful!)
|
|
docker volume prune
|
|
|
|
# Remove everything unused
|
|
docker system prune -a --volumes
|
|
```
|
|
|
|
## 📝 Environment Variables Reference
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `MT5_LOGIN` | - | MT5 account login |
|
|
| `MT5_PASSWORD` | - | MT5 account password |
|
|
| `MT5_SERVER` | - | MT5 server name |
|
|
| `MT5_PATH` | - | Path to MT5 terminal |
|
|
| `SYMBOL` | XAUUSD | Trading symbol |
|
|
| `CAPITAL` | 10000 | Trading capital |
|
|
| `API_PORT` | 8000 | API port on host |
|
|
| `DASHBOARD_PORT` | 3000 | Dashboard port on host |
|
|
| `DB_PORT` | 5432 | Database port on host |
|
|
| `DB_USER` | trading_bot | Database username |
|
|
| `DB_PASSWORD` | trading_bot_2026 | Database password |
|
|
| `DB_NAME` | trading_db | Database name |
|
|
| `TELEGRAM_BOT_TOKEN` | - | Telegram bot token (optional) |
|
|
| `TELEGRAM_CHAT_ID` | - | Telegram chat ID (optional) |
|
|
|
|
## 📚 Additional Resources
|
|
|
|
- **Docker Docs**: https://docs.docker.com
|
|
- **Docker Compose**: https://docs.docker.com/compose
|
|
- **FastAPI**: https://fastapi.tiangolo.com
|
|
- **Next.js**: https://nextjs.org
|
|
|
|
## 🆘 Getting Help
|
|
|
|
If you encounter issues:
|
|
|
|
1. Check logs: `docker-compose logs -f`
|
|
2. Verify services: `docker-compose ps`
|
|
3. Check health: `curl http://localhost:8000/api/health`
|
|
4. Review this guide's troubleshooting section
|
|
5. Open an issue on GitHub
|
|
|
|
---
|
|
|
|
**Last Updated:** Feb 6, 2026
|