diff --git a/.env.example b/.env.example index 8ddd19f..bfc61bc 100644 --- a/.env.example +++ b/.env.example @@ -35,7 +35,7 @@ MAX_SIMULATION_DAYS=30 AUTO_DOWNLOAD_PRICE_DATA=true # Data Volume Configuration -# Base directory for all persistent data (will contain data/, logs/, configs/ subdirectories) +# Base directory for all persistent data (will contain data/ and configs/ subdirectories) # Use relative paths (./volumes) or absolute paths (/home/user/ai-trader-volumes) # Defaults to current directory (.) if not set VOLUME_PATH=. diff --git a/DOCKER.md b/DOCKER.md index 2e2c1c3..99940e6 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -154,10 +154,9 @@ docker-compose up ### Volume Mounts -Docker Compose mounts three volumes for persistent data. By default, these are stored in the project directory: +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 -- `./logs:/app/logs` - MCP service logs - `./configs:/app/configs` - Configuration files (allows editing configs without rebuilding) ### Custom Volume Location @@ -174,7 +173,6 @@ VOLUME_PATH=./volumes This will store data in: - `/home/user/trading-data/data/` -- `/home/user/trading-data/logs/` - `/home/user/trading-data/configs/` **Note:** The directory structure is automatically created. You'll need to copy your existing configs: @@ -190,7 +188,7 @@ To reset all trading data: ```bash docker-compose down -rm -rf ${VOLUME_PATH:-.}/data/agent_data/* ${VOLUME_PATH:-.}/logs/* +rm -rf ${VOLUME_PATH:-.}/data/agent_data/* docker-compose up ``` @@ -217,8 +215,7 @@ docker pull ghcr.io/xe138/ai-trader-server:latest ```bash docker run --env-file .env \ -v $(pwd)/data:/app/data \ - -v $(pwd)/logs:/app/logs \ - -p 8000-8003:8000-8003 \ + -p 8080:8080 \ ghcr.io/xe138/ai-trader-server:latest ``` @@ -234,9 +231,9 @@ docker pull ghcr.io/xe138/ai-trader-server:v1.0.0 **Symptom:** Container exits immediately or errors about ports **Solutions:** -- Check ports 8000-8003 not already in use: `lsof -i :8000-8003` - View container logs: `docker-compose logs` -- Check MCP service logs: `cat logs/math.log` +- 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 @@ -258,12 +255,12 @@ docker pull ghcr.io/xe138/ai-trader-server:v1.0.0 ### Permission Issues -**Symptom:** Cannot write to data or logs directories +**Symptom:** Cannot write to data directory **Solutions:** -- Ensure directories writable: `chmod -R 755 data logs` +- Ensure data directory is writable: `chmod -R 755 data` - Check volume mount permissions -- May need to create directories first: `mkdir -p data logs` +- May need to create directory first: `mkdir -p data` ### Container Keeps Restarting @@ -298,13 +295,12 @@ docker buildx build --platform linux/amd64,linux/arm64 -t ai-trader-server . docker stats ai-trader-server ``` -### Access MCP Services Directly +### Access API Directly -Services exposed on host: -- Math: http://localhost:8000 -- Search: http://localhost:8001 -- Trade: http://localhost:8002 -- Price: http://localhost:8003 +API server exposed on host: +- REST API: http://localhost:8080 + +MCP services run internally and are not exposed to the host. ## Development Workflow diff --git a/Dockerfile b/Dockerfile index bb3d711..f875e2d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ WORKDIR /app COPY . . # Create necessary directories -RUN mkdir -p data logs data/agent_data +RUN mkdir -p data data/agent_data # Make entrypoint executable RUN chmod +x entrypoint.sh diff --git a/agent_tools/start_mcp_services.py b/agent_tools/start_mcp_services.py index ed20048..cad9f7d 100755 --- a/agent_tools/start_mcp_services.py +++ b/agent_tools/start_mcp_services.py @@ -52,10 +52,6 @@ class MCPServiceManager: } } - # Create logs directory - self.log_dir = Path('logs') - self.log_dir.mkdir(exist_ok=True) - # Set signal handlers signal.signal(signal.SIGINT, self.signal_handler) signal.signal(signal.SIGTERM, self.signal_handler) @@ -77,27 +73,23 @@ class MCPServiceManager: return False try: - # Start service process - log_file = self.log_dir / f"{service_id}.log" - # Set PYTHONPATH to /app so services can import from tools module env = os.environ.copy() env['PYTHONPATH'] = str(Path.cwd()) - with open(log_file, 'w') as f: - process = subprocess.Popen( - [sys.executable, str(script_path)], - stdout=f, - stderr=subprocess.STDOUT, - cwd=Path.cwd(), # Use current working directory (/app) - env=env # Pass environment with PYTHONPATH - ) - + # Start service process (output goes to Docker logs) + process = subprocess.Popen( + [sys.executable, str(script_path)], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + cwd=Path.cwd(), # Use current working directory (/app) + env=env # Pass environment with PYTHONPATH + ) + self.services[service_id] = { 'process': process, 'name': service_name, - 'port': port, - 'log_file': log_file + 'port': port } print(f"āœ… {service_name} service started (PID: {process.pid}, Port: {port})") @@ -167,15 +159,14 @@ class MCPServiceManager: print(f"āœ… {service['name']} service running normally") else: print(f"āŒ {service['name']} service failed to start") - print(f" Please check logs: {service['log_file']}") + print(f" Check Docker logs for details: docker logs ai-trader-server") def print_service_info(self): """Print service information""" print("\nšŸ“‹ Service information:") for service_id, service in self.services.items(): print(f" - {service['name']}: http://localhost:{service['port']} (PID: {service['process'].pid})") - - print(f"\nšŸ“ Log files location: {self.log_dir.absolute()}") + print("\nšŸ›‘ Press Ctrl+C to stop all services") def keep_alive(self): diff --git a/docker-compose.yml b/docker-compose.yml index 3343d51..27cf7c3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,6 @@ services: container_name: ai-trader-server volumes: - ${VOLUME_PATH:-.}/data:/app/data - - ${VOLUME_PATH:-.}/logs:/app/logs # User configs mounted to /app/user-configs (default config baked into image) - ${VOLUME_PATH:-.}/configs:/app/user-configs environment: diff --git a/docs/DOCKER.md b/docs/DOCKER.md index 297eadc..5162a61 100644 --- a/docs/DOCKER.md +++ b/docs/DOCKER.md @@ -112,10 +112,9 @@ docker-compose up ### Volume Mounts -Docker Compose mounts three volumes for persistent data. By default, these are stored in the project directory: +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 -- `./logs:/app/logs` - MCP service logs - `./configs:/app/configs` - Configuration files (allows editing configs without rebuilding) ### Custom Volume Location @@ -132,7 +131,6 @@ VOLUME_PATH=./volumes This will store data in: - `/home/user/trading-data/data/` -- `/home/user/trading-data/logs/` - `/home/user/trading-data/configs/` **Note:** The directory structure is automatically created. You'll need to copy your existing configs: @@ -148,7 +146,7 @@ To reset all trading data: ```bash docker-compose down -rm -rf ${VOLUME_PATH:-.}/data/agent_data/* ${VOLUME_PATH:-.}/logs/* +rm -rf ${VOLUME_PATH:-.}/data/agent_data/* docker-compose up ``` @@ -175,8 +173,7 @@ docker pull ghcr.io/xe138/ai-trader-server:latest ```bash docker run --env-file .env \ -v $(pwd)/data:/app/data \ - -v $(pwd)/logs:/app/logs \ - -p 8000-8003:8000-8003 \ + -p 8080:8080 \ ghcr.io/xe138/ai-trader-server:latest ``` @@ -192,9 +189,9 @@ docker pull ghcr.io/xe138/ai-trader-server:v1.0.0 **Symptom:** Container exits immediately or errors about ports **Solutions:** -- Check ports 8000-8003 not already in use: `lsof -i :8000-8003` - View container logs: `docker-compose logs` -- Check MCP service logs: `cat logs/math.log` +- 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 @@ -216,12 +213,12 @@ docker pull ghcr.io/xe138/ai-trader-server:v1.0.0 ### Permission Issues -**Symptom:** Cannot write to data or logs directories +**Symptom:** Cannot write to data directory **Solutions:** -- Ensure directories writable: `chmod -R 755 data logs` +- Ensure data directory is writable: `chmod -R 755 data` - Check volume mount permissions -- May need to create directories first: `mkdir -p data logs` +- May need to create directory first: `mkdir -p data` ### Container Keeps Restarting @@ -256,13 +253,12 @@ docker buildx build --platform linux/amd64,linux/arm64 -t ai-trader-server . docker stats ai-trader-server ``` -### Access MCP Services Directly +### Access API Directly -Services exposed on host: -- Math: http://localhost:8000 -- Search: http://localhost:8001 -- Trade: http://localhost:8002 -- Price: http://localhost:8003 +API server exposed on host: +- REST API: http://localhost:8080 + +MCP services run internally and are not exposed to the host. ## Development Workflow