From 2a11728384a2f01ed723d1ca9132546e6ff76c3f Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Sat, 30 May 2026 07:30:33 +0000 Subject: [PATCH] feat(docker): deploy PORT06 portfolio runner via docker compose Wire the Docker image and compose service for the capital-pool portfolio paper trader (src.portfolio.runner) instead of the single-leg multi_runner: - Dockerfile: copy full scripts/ (runner imports scripts.analysis.* and scripts.portfolios._defs via sleeves.py) and portfolios.yml. - docker-compose.yml: service "portfolio" / container pythagoras-portfolio, command override to src.portfolio.runner, mount portfolios.yml, healthcheck on data/portfolios/ status.json. - .gitignore: ignore portfolio runtime state (data/portfolio_paper, data/portfolios). Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 2 ++ Dockerfile | 6 ++++-- docker-compose.yml | 9 +++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index ff2ffd8..c522fbf 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ data/processed/ *.pth notebooks/.ipynb_checkpoints/ data/paper_trades/ +data/portfolio_paper/ +data/portfolios/ diff --git a/Dockerfile b/Dockerfile index 7317fa6..4886e8b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,9 +8,11 @@ COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev COPY src/ src/ -COPY scripts/strategies/ scripts/strategies/ -COPY strategies.yml strategies.yml +COPY scripts/ scripts/ +COPY strategies.yml portfolios.yml ./ VOLUME /app/data +# Default: paper trader multi-strategia. Il servizio "portfolio" in docker-compose +# sovrascrive il command per il runner a portafoglio (src.portfolio.runner). CMD ["uv", "run", "python", "-m", "src.live.multi_runner"] diff --git a/docker-compose.yml b/docker-compose.yml index 6d28b7b..66864de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,18 @@ services: - paper-trader: + portfolio: build: . - container_name: pythagoras-multi + container_name: pythagoras-portfolio restart: unless-stopped + command: ["uv", "run", "python", "-m", "src.portfolio.runner"] volumes: - ./data:/app/data - - ./strategies.yml:/app/strategies.yml:ro + - ./portfolios.yml:/app/portfolios.yml:ro env_file: - .env environment: - PYTHONUNBUFFERED=1 healthcheck: - test: ["CMD", "python", "-c", "import os; assert any(f.endswith('status.json') for r,d,fs in os.walk('/app/data/paper_trades') for f in fs)"] + test: ["CMD", "python", "-c", "import os; assert any(f.endswith('status.json') for r,d,fs in os.walk('/app/data/portfolios') for f in fs)"] interval: 120s timeout: 10s retries: 3