From 30add359069505b017ff5b36cf5b8410b4c745c6 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Fri, 15 May 2026 18:02:21 +0000 Subject: [PATCH] refactor(compose): rinomina servizi + Traefik subpath + dual-DB + bind strategies dal package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rinomina servizi (era multi-swarm-paper / multi-swarm-dashboard): - strategy-crypto-paper — paper runner (container + service + image name) - strategy-crypto-gui — NiceGUI dashboard Routing Traefik: - Rule: Host(swarm.\${DOMAIN_NAME}) && PathPrefix(/strategy_crypto_gui) - NESSUN StripPrefix middleware: NiceGUI gestisce root_path internamente - URL prod: https://swarm.tielogic.xyz/strategy_crypto_gui/ - Root del dominio libera per future GUI di altre strategie Env block x-swarm-env aggiornato: - DB_PATH=/app/state/runs.db rimosso - GA_DB_PATH=/app/state/runs.db (universale GA) - STRATEGY_CRYPTO_DB_PATH=/app/state/strategy_crypto.db (paper crypto) - DASHBOARD_ROOT_PATH=/strategy_crypto_gui (passato a ui.run(root_path=...)) Volumi: - bind strategies dal package: ./src/strategy_crypto/strategy_crypto/strategies:/app/strategies:ro - image rinominata: multi-swarm:dev → multi-swarm-coevolutive:dev (allineato a wheel) Entrypoint dashboard: python -m strategy_crypto.frontend.nicegui_app (era multi_swarm.dashboard.nicegui_app) Verifica: docker compose config parse OK; 2 servizi presenti. NOTA OPERATIVA: in produzione aggiornare il file .env reale (non in repo) per allinearsi a GA_DB_PATH/STRATEGY_CRYPTO_DB_PATH/DASHBOARD_ROOT_PATH. Backcompat: DB_PATH legacy ancora letto come alias di GA_DB_PATH. Co-Authored-By: Claude Opus 4.7 (1M context) --- docker-compose.yml | 58 +++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7273350..7008000 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,27 @@ # docker-compose.yml — Multi-Swarm Coevolutive # -# Due servizi che condividono la stessa immagine `multi-swarm:dev`: +# Due servizi della strategia crypto, condividono la stessa immagine +# `multi-swarm-coevolutive:dev` buildata dal Dockerfile root (uv workspace): # -# * multi-swarm-paper — paper-trading runner long-running -# (scripts/run_paper_trading.py) -# * multi-swarm-dashboard — Streamlit dashboard esposta da Traefik -# su https://swarm.${DOMAIN_NAME:-tielogic.xyz} +# * strategy-crypto-paper — paper-trading runner long-running +# (scripts/run_paper_trading.py) +# * strategy-crypto-gui — NiceGUI dashboard esposta da Traefik su +# https://swarm.${DOMAIN_NAME:-tielogic.xyz}/strategy_crypto_gui # # Entrambi joinano la rete external `traefik` cosi' il client Cerbero # risolve direttamente l'host `cerbero-mcp` (porta 9000) senza passare # dal gateway pubblico ne' dal TLS. # +# Pattern N strategie future: aggiungere strategy--paper + strategy--gui +# con PathPrefix(/strategy__gui) e DASHBOARD_ROOT_PATH dedicato. +# # Dati persistenti via bind mount dalla cartella del repo: -# ./data cache OHLCV intermedia -# ./series cache parquet per timeframe/symbol -# ./state contiene runs.db (+ WAL/SHM) -# ./strategies btc_*.json / eth_*.json letti dal paper runner +# ./data cache OHLCV intermedia +# ./series cache parquet per timeframe/symbol +# ./state contiene runs.db (GA) + strategy_crypto.db (paper) + WAL/SHM +# ./src/strategy_crypto/strategy_crypto/strategies JSON freezate (ro) # # Secrets (token Cerbero + OpenRouter): caricati da .env via env_file. -# Le variabili sotto `environment:` sovrascrivono solo i valori che -# devono cambiare dentro il container (URL interno, path container). networks: traefik: @@ -31,15 +33,19 @@ x-swarm-env: &swarm-env # Override: path container per persistenza DATA_DIR: /app/data SERIES_DIR: /app/series - DB_PATH: /app/state/runs.db + # DB separati per dominio: + GA_DB_PATH: /app/state/runs.db + STRATEGY_CRYPTO_DB_PATH: /app/state/strategy_crypto.db + # Subpath sotto cui la dashboard NiceGUI e' esposta da Traefik + DASHBOARD_ROOT_PATH: /strategy_crypto_gui services: - multi-swarm-paper: + strategy-crypto-paper: build: context: . dockerfile: Dockerfile - image: multi-swarm:dev - container_name: multi-swarm-paper + image: multi-swarm-coevolutive:dev + container_name: strategy-crypto-paper restart: unless-stopped networks: [traefik] env_file: .env @@ -49,7 +55,7 @@ services: - ./data:/app/data - ./series:/app/series - ./state:/app/state - - ./strategies:/app/strategies:ro + - ./src/strategy_crypto/strategy_crypto/strategies:/app/strategies:ro # Niente HTTP da controllare: ci affidiamo a `restart: unless-stopped` # e ai log per la liveness del runner. command: @@ -64,26 +70,26 @@ services: labels: - com.centurylinklabs.watchtower.enable=true - multi-swarm-dashboard: - image: multi-swarm:dev + strategy-crypto-gui: + image: multi-swarm-coevolutive:dev build: context: . dockerfile: Dockerfile - container_name: multi-swarm-dashboard + container_name: strategy-crypto-gui restart: unless-stopped networks: [traefik] env_file: .env environment: <<: *swarm-env volumes: - # Dashboard legge solo runs.db: mount in read-only + # Dashboard legge entrambi i DB: state/ in read-only (WAL: vedi nota) - ./state:/app/state:ro - ./data:/app/data:ro - ./series:/app/series:ro entrypoint: - python - -m - - multi_swarm.dashboard.nicegui_app + - strategy_crypto.frontend.nicegui_app command: [] healthcheck: test: @@ -98,9 +104,9 @@ services: labels: - traefik.enable=true - traefik.docker.network=traefik - - "traefik.http.routers.multi-swarm-dashboard.rule=Host(`swarm.${DOMAIN_NAME:-tielogic.xyz}`)" - - traefik.http.routers.multi-swarm-dashboard.tls=true - - traefik.http.routers.multi-swarm-dashboard.entrypoints=websecure - - traefik.http.routers.multi-swarm-dashboard.tls.certresolver=mytlschallenge - - "traefik.http.services.multi-swarm-dashboard.loadbalancer.server.port=${SWARM_DASHBOARD_PORT:-8080}" + - "traefik.http.routers.strategy-crypto-gui.rule=Host(`swarm.${DOMAIN_NAME:-tielogic.xyz}`) && PathPrefix(`/strategy_crypto_gui`)" + - traefik.http.routers.strategy-crypto-gui.tls=true + - traefik.http.routers.strategy-crypto-gui.entrypoints=websecure + - traefik.http.routers.strategy-crypto-gui.tls.certresolver=mytlschallenge + - "traefik.http.services.strategy-crypto-gui.loadbalancer.server.port=${SWARM_DASHBOARD_PORT:-8080}" - com.centurylinklabs.watchtower.enable=true