# One-command demo: watch a release unfold live. # docker compose up --build # Grafana: http://localhost:3000 (dashboard "Print Time: release replay", no login) # Prometheus: http://localhost:9090 (alerts under /alerts) # By default the app replays a synthetic CPI release (no data needed). With real # data in ./data, set PRINTTIME_ARGS, e.g. "replay --window CPI_2025-03-12 --metrics-port 8000 --loop". services: app: build: . command: ${PRINTTIME_ARGS:-replay --synthetic --metrics-port 8000 --loop} ports: - "8000:8000" volumes: - ./data:/app/data:ro - ./reports:/app/reports:ro restart: unless-stopped prometheus: image: prom/prometheus:v3.5.0 command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=1d volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./monitoring/alerts.yml:/etc/prometheus/alerts.yml:ro ports: - "9090:9090" depends_on: - app grafana: image: grafana/grafana:12.1.1 environment: GF_AUTH_ANONYMOUS_ENABLED: "true" GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-admin} GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: /var/lib/grafana/dashboards/printtime.json volumes: - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro ports: - "3000:3000" depends_on: - prometheus