services: data-seed: build: context: . dockerfile: Dockerfile.harvester exclude_from_hc: true restart: "no" environment: - 'BUGSINK_DSN=${BUGSINK_DSN:-}' - 'APP_ENV=${APP_ENV:-production}' - 'APP_RELEASE=${APP_RELEASE:-quant-web@1.0.0}' - 'CORE_TICKERS=${CORE_TICKERS:-SPY,QQQ,AAPL,MSFT,GOOGL,AMZN,NVDA,META,IWM,TLT}' - 'SEED_YEARS=${SEED_YEARS:-5}' - 'PARQUET_DIR=/data/parquet' - 'TZ=America/New_York' volumes: - 'parquet-data:/data/parquet' entrypoint: ["bash", "-c"] command: - > if [ -f /data/parquet/.seed_complete ]; then echo "Parquet seed already present"; exit 0; fi; python /app/sync.py --seed; touch /data/parquet/.seed_complete; echo "Seed finished"; harvester: build: context: . dockerfile: Dockerfile.harvester restart: unless-stopped depends_on: data-seed: condition: service_completed_successfully environment: - 'BUGSINK_DSN=${BUGSINK_DSN:-}' - 'APP_ENV=${APP_ENV:-production}' - 'APP_RELEASE=${APP_RELEASE:-quant-web@1.0.0}' - 'CORE_TICKERS=${CORE_TICKERS:-SPY,QQQ,AAPL,MSFT,GOOGL,AMZN,NVDA,META,IWM,TLT}' - 'SEED_YEARS=${SEED_YEARS:-5}' - 'PARQUET_DIR=/data/parquet' - 'TZ=America/New_York' volumes: - 'parquet-data:/data/parquet' healthcheck: test: ['CMD-SHELL', 'pgrep -x cron > /dev/null || exit 1'] interval: 60s timeout: 5s start_period: 30s retries: 3 streamlit: build: context: . dockerfile: Dockerfile restart: unless-stopped depends_on: data-seed: condition: service_completed_successfully environment: - SERVICE_URL_STREAMLIT_8501 - 'BUGSINK_DSN=${BUGSINK_DSN:-}' - 'APP_ENV=${APP_ENV:-production}' - 'APP_RELEASE=${APP_RELEASE:-quant-web@1.0.0}' - 'CORE_TICKERS=${CORE_TICKERS:-SPY,QQQ,AAPL,MSFT,GOOGL,AMZN,NVDA,META,IWM,TLT}' - 'PARQUET_DIR=/data/parquet' - 'STRATEGY_DB_PATH=/data/strategies/strategies.db' - 'AUTHENTIK_ISSUER=${AUTHENTIK_ISSUER:-https://auth.aexoradao.com/application/o/quant-web/}' - 'OIDC_ISSUER=${OIDC_ISSUER:-https://auth.aexoradao.com/application/o/quant-web/}' - 'AUTHENTIK_OUTPOST_URL=${AUTHENTIK_OUTPOST_URL:-https://auth.aexoradao.com/outpost.goauthentik.io/auth/traefik}' - 'OIDC_CLIENT_ID=${OIDC_CLIENT_ID:-quant-web}' - 'AUTH_USERNAME_HEADER=${AUTH_USERNAME_HEADER:-X-Forwarded-User}' - 'AUTH_UID_HEADER=${AUTH_UID_HEADER:-X-Authentik-Uid}' - 'AUTH_EMAIL_HEADER=${AUTH_EMAIL_HEADER:-X-Forwarded-Email}' - 'AUTH_REQUIRED=${AUTH_REQUIRED:-true}' - 'DEV_USER=${DEV_USER:-}' volumes: - 'parquet-data:/data/parquet' - 'strategy-data:/data/strategies' healthcheck: test: ['CMD-SHELL', 'curl -sf http://127.0.0.1:8501/_stcore/health || exit 1'] interval: 30s timeout: 5s start_period: 30s retries: 3 volumes: parquet-data: strategy-data: