quant-web/docker-compose.yml
epistemophiliac 7f7133f535 Add Authentik/OIDC compose env vars and enforce proxy auth.
Document issuer, outpost, and header settings for Coolify, fail closed when AUTH_REQUIRED is true, and add harvester healthcheck per Coolify conventions.
2026-06-19 00:55:12 -04:00

88 lines
3 KiB
YAML

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: