# Docker Compose environment — copy to project root: # cp docker/.env.example .env # --- PostgreSQL --- DB_USER=newdashboard DB_PASSWORD=change_this_to_a_strong_password DB_NAME=newdashboard # --- Django --- SECRET_KEY=change-me-in-production-use-a-long-random-string DEBUG=false ALLOWED_HOSTS=localhost,127.0.0.1,api,frontend,dashboard.local CSRF_TRUSTED_ORIGINS=http://localhost,http://127.0.0.1,http://dashboard.local CORS_ALLOWED_ORIGINS=http://localhost,http://127.0.0.1,http://dashboard.local # Production admin (bootstrap_admin — no demo data) BOOTSTRAP_ADMIN_USER=admin BOOTSTRAP_ADMIN_PASSWORD=Pr04dm1n # Optional production staff (leave BOOTSTRAP_STAFF_USER empty to skip) BOOTSTRAP_STAFF_USER=staff BOOTSTRAP_STAFF_PASSWORD=change_me # Optional: fixed API key for scripts (hashed at rest) BOOTSTRAP_API_KEY= # karung-web-admin on the Docker host KARUNG_WEB_ADMIN_BASE_URL=http://host.docker.internal:5000 KARUNG_WEB_ADMIN_TIMEOUT_SECONDS=30 KARUNG_WEB_ADMIN_SYNC_ENABLED=false # Dashboard publish cutoff (WIB): day D visible from 17:00 on day D DASHBOARD_PUBLISH_HOUR=17 DASHBOARD_PUBLISH_MINUTE=0 # IoT panel — real-time sync every 10 min (excluded from publish cutoff) IOT_SYNC_ENABLED=true IOT_API_BASE_URL=https://dashboard.cpsp.id/api/iot/flocks IOT_SYNC_LOOKBACK_MINUTES=20 IOT_SYNC_MAX_PAGES=10 IOT_FLOCK_ID_MAP={} # Chicken counting edge vision API (counting + mortality + weight; not gated by publish cutoff) CHICKEN_COUNTING_EDGE_BASE_URL=http://192.168.192.106:8090 CHICKEN_COUNTING_EDGE_TIMEOUT_SECONDS=30 CHICKEN_COUNTING_EDGE_COUNTING_SYNC_ENABLED=true CHICKEN_COUNTING_EDGE_MORTALITY_SYNC_ENABLED=true CHICKEN_COUNTING_EDGE_WEIGHT_SYNC_ENABLED=true