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