Files
kuh-no-bowls/docker-compose.yml
wesandClaude Opus 4.8 5c09528df7 Add Open-Meteo hourly weather pipeline + queue/weather view
Backfills knoebels."LZ_open_meteo_hourly" from 2024-05-15 (start of queue
collection) and keeps it current. Imperial units; timestamps stored as naive
America/New_York to line up with the rest of the knoebels schema.

- weather_logger.py: --backfill uses the ERA5 Archive API; default mode does a
  self-healing recent sync via the Forecast API (past_days=7, upsert on conflict)
- docker-compose.yml: add `weather` oneshot service (also align scraper to its
  live `oneshot` profile)
- systemd/knb-weather.{service,timer}: nox user timer, every 6h (linger enabled)
- queries/dm_knb_queue_weather.sql: dm_knb_queue_weather view joining the full
  queue-time series to hourly weather (hour-bucketed), with a WMO code decode

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 10:38:01 -04:00

60 lines
1.5 KiB
YAML

services:
scraper:
build: .
image: kuh-no-bowls:latest
container_name: kuh-no-bowls-scraper
profiles: ["oneshot"]
env_file: .env
environment:
LOG_PATH: /var/log/kuh-no-bowls/kuh-no-bowls.log
TZ: America/New_York
volumes:
- knb_logs:/var/log/kuh-no-bowls
networks:
- services_net
# Hourly Open-Meteo weather -> knoebels."LZ_open_meteo_hourly".
# Oneshot, run from cron. Default mode does the recent sync; pass --backfill
# once to load history: docker compose --profile oneshot run --rm weather --backfill
weather:
build: .
image: kuh-no-bowls:latest
container_name: kuh-no-bowls-weather
profiles: ["oneshot"]
entrypoint: ["python", "-u", "weather_logger.py"]
env_file: .env
environment:
LOG_PATH: /var/log/kuh-no-bowls/weather.log
TZ: America/New_York
volumes:
- knb_logs:/var/log/kuh-no-bowls
networks:
- services_net
dashboard:
build: .
image: kuh-no-bowls:latest
container_name: kuh-no-bowls-dashboard
restart: unless-stopped
env_file: .env
entrypoint: ["streamlit", "run", "app.py", "--server.port=8502", "--server.address=0.0.0.0"]
ports:
- "8502:8502"
volumes:
- ./app.py:/app/app.py:ro
- ./.streamlit:/app/.streamlit:ro
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:8502/_stcore/health"]
interval: 30s
timeout: 5s
retries: 3
networks:
- services_net
volumes:
knb_logs:
networks:
services_net:
external: true