# =================================================================================== # AgroVisión — variables de entorno (PLANTILLA) # =================================================================================== # Copia este archivo a `.env` para desarrollo local: cp .env.example .env # # REGLAS DE SEGURIDAD: # - `.env.example` (versionado) lleva SOLO placeholders vacíos. NUNCA secretos reales. # - `.env` (en .gitignore) lleva tus valores reales para local. No se versiona. # - En PRODUCCIÓN, define los secretos en el panel de cada plataforma # (Render, ShinyApps.io, Supabase), no en archivos. # =================================================================================== # ----------------------------------------------------------------------------------- # 1) General # ----------------------------------------------------------------------------------- APP_ENV=development # development | production LOG_LEVEL=info # ----------------------------------------------------------------------------------- # 2) UI (Shiny) <-> Backend (FastAPI) # ----------------------------------------------------------------------------------- SHINY_HOST=127.0.0.1 SHINY_PORT=8001 API_HOST=127.0.0.1 API_PORT=8000 API_BASE_URL=http://127.0.0.1:8000 # En prod: URL pública del backend en Render ALLOWED_ORIGINS=http://127.0.0.1:8001,http://localhost:8001,https://.shinyapps.io CONFIDENCE_THRESHOLD=0.25 MAX_UPLOAD_MB=50 # ----------------------------------------------------------------------------------- # 3) Despliegue -> Hugging Face Spaces (SDK Docker) [VÍA ACTIVA — ver docs/ejecucion.md §5] # HF construye el Dockerfile de la raíz (gateway FastAPI: UI / + API /api). # Token (write) en: https://huggingface.co/settings/tokens # Crea el Space (una vez, web): https://huggingface.co/new-space -> SDK "Docker". # Deploy: .\scripts\deploy_hf.ps1 # ----------------------------------------------------------------------------------- HF_SPACE_ID= # /, p. ej. alexprieto/agrovision # (HF_TOKEN se define en la sección 5; sirve tanto para el Space como para el modelo.) # ----------------------------------------------------------------------------------- # 3b) Alternativas de despliegue (opcionales): # - Render (Docker, free): backend/Dockerfile + render.yaml. API en dashboard.render.com/u/settings # - Posit Connect (de pago): rsconnect deploy fastapi (scripts/deploy_prod.ps1). # OJO: shinyapps.io NO hospeda FastAPI (solo Shiny); estas vars solo aplican a Posit Connect. # ----------------------------------------------------------------------------------- RENDER_API_KEY= RENDER_SERVICE_ID= SHINYAPPS_ACCOUNT= SHINYAPPS_TOKEN= SHINYAPPS_SECRET= # ----------------------------------------------------------------------------------- # 5) Modelo de conteo + Hugging Face Hub # Token HF en: https://huggingface.co/settings/tokens (write si vas a publicar) # ----------------------------------------------------------------------------------- COUNTING_ENABLED=false # true para activar el conteo (mock o real) MODEL_BACKEND=mock # mock (datos falsos para probar) | onnx (modelo real) MODEL_PATH=/app/models/agrovision-plantcount-v2.0.0.onnx MODEL_VERSION=2.0.0 MODEL_ARCHITECTURE=yolo26n # yolo26n | rfdetr_nano (define el adaptador de decode) HF_MODEL_REPO=/agrovision-plantcount HF_TOKEN= # ----------------------------------------------------------------------------------- # 6) Telemetría de UI (Fase 9) # Los eventos siempre se loguean en stdout y se guardan en un buffer en memoria # (GET /api/events/recent). EVENTS_PERSIST=true además los persiste en la tabla # `events` de Supabase (best-effort; requiere DATABASE_URL). Nunca contiene secretos. # ----------------------------------------------------------------------------------- EVENTS_PERSIST=false # true para volcar la telemetría a la tabla events # ----------------------------------------------------------------------------------- # 7) Seguridad / hardening # Rate limiting en memoria sobre /api (anti-abuso/DDoS). 0 = desactivado. # ----------------------------------------------------------------------------------- RATE_LIMIT_PER_MIN=120 # peticiones/min por IP a /api (0 desactiva) # ----------------------------------------------------------------------------------- # 6) Supabase (BD PostGIS + Storage + Queues) — PLATAFORMA COMPLETA # Project Settings -> API / Database. SERVICE_ROLE es SECRETO (solo backend, nunca UI). # ----------------------------------------------------------------------------------- SUPABASE_URL= # https://.supabase.co SUPABASE_ANON_KEY= SUPABASE_SERVICE_ROLE_KEY= SUPABASE_STORAGE_BUCKET=drone-images DATABASE_URL= # postgresql+asyncpg://postgres:@:5432/postgres # ----------------------------------------------------------------------------------- # 7) Groq — modelo BYOK ("Trae tu propia llave") # En PRODUCCIÓN estas llaves NO se guardan en el servidor: el usuario las inyecta # por sesión (cabeceras X-User-*) y se descartan. Las DEV_* de abajo son SOLO para # pruebas locales sin el flujo BYOK. # - Groq (agente RAG / Llama 3): https://console.groq.com/keys # ----------------------------------------------------------------------------------- DEV_GROQ_API_KEY= # ----------------------------------------------------------------------------------- # 8) APIs satelitales — modelo BYOK ("Trae tu propia llave") # En PRODUCCIÓN estas llaves NO se guardan en el servidor: el usuario las inyecta # por sesión (cabeceras X-User-*) y se descartan. Las DEV_* de abajo son SOLO para # pruebas locales sin el flujo BYOK. # - Copernicus CDSE (Sentinel-2): https://dataspace.copernicus.eu/ # - Open-Meteo: sin llave. NASA POWER: acceso público por coordenadas. # ----------------------------------------------------------------------------------- DEV_COPERNICUS_CLIENT_ID= DEV_COPERNICUS_CLIENT_SECRET=