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) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-05-30 07:30:33 +00:00
parent 7b2e0049eb
commit 2a11728384
3 changed files with 11 additions and 6 deletions
+2
View File
@@ -17,3 +17,5 @@ data/processed/
*.pth *.pth
notebooks/.ipynb_checkpoints/ notebooks/.ipynb_checkpoints/
data/paper_trades/ data/paper_trades/
data/portfolio_paper/
data/portfolios/
+4 -2
View File
@@ -8,9 +8,11 @@ COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev RUN uv sync --frozen --no-dev
COPY src/ src/ COPY src/ src/
COPY scripts/strategies/ scripts/strategies/ COPY scripts/ scripts/
COPY strategies.yml strategies.yml COPY strategies.yml portfolios.yml ./
VOLUME /app/data 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"] CMD ["uv", "run", "python", "-m", "src.live.multi_runner"]
+5 -4
View File
@@ -1,17 +1,18 @@
services: services:
paper-trader: portfolio:
build: . build: .
container_name: pythagoras-multi container_name: pythagoras-portfolio
restart: unless-stopped restart: unless-stopped
command: ["uv", "run", "python", "-m", "src.portfolio.runner"]
volumes: volumes:
- ./data:/app/data - ./data:/app/data
- ./strategies.yml:/app/strategies.yml:ro - ./portfolios.yml:/app/portfolios.yml:ro
env_file: env_file:
- .env - .env
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
healthcheck: 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 interval: 120s
timeout: 10s timeout: 10s
retries: 3 retries: 3