refactor(compose): rinomina servizi + Traefik subpath + dual-DB + bind strategies dal package
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) <noreply@anthropic.com>
This commit is contained in:
+29
-23
@@ -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
|
||||
# * strategy-crypto-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-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-<asset>-paper + strategy-<asset>-gui
|
||||
# con PathPrefix(/strategy_<asset>_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
|
||||
# ./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
|
||||
|
||||
Reference in New Issue
Block a user