Variables usadas — Deploy y configuración (estado_turismo)

Fecha: 2026-09-18
Sesión: deploy de engine (Worker) + ruta-maya (Pages) + generación de rutas reales

Secrets redactados. El valor real vive en spab-retrieval/.env (gitignored) y en ~/.zshrc.


1. Deploy a Cloudflare (shell / entorno)

VariableValor / ubicaciónNotas
CLOUDFLARE_ACCOUNT_ID162ab69a40524314530193e8a3e8f414~/.zshrc:316
CLOUDFLARE_API_TOKEN(secret) → spab-retrieval/.env:33token válido (permisos Workers + Pages)
CLOUDFLARE_API_ID162ab69a40524314530193e8a3e8f414spab-retrieval/.env:32 (es el account id, no un token)

Token viejo (expirado, no usar): ~/.zshrc:317 (cfut_…) → reemplazado por el de .env.

Comandos que usaron estas variables:

# Worker (engine)
cd engine
export CLOUDFLARE_API_TOKEN="<token .env:33>"
npm run deploy            # → https://engine.nef.workers.dev
 
# Pages (ruta-maya)
cd ruta-maya
export CLOUDFLARE_API_TOKEN="<token .env:33>"
wrangler pages project create ruta-maya-staging --production-branch=main
wrangler pages deploy . --project-name=ruta-maya-staging --branch=main --commit-dirty=true

2. Worker engine — variables de runtime (engine/wrangler.jsonc)

{
  "name": "engine",
  "main": "src/index.ts",
  "compatibility_date": "2026-09-16",
  "account_id": "162ab69a40524314530193e8a3e8f414",
  "ai": { "binding": "AI" },
  "observability": { "enabled": true },
  "vars": {
    "MODELO": "@cf/qwen/qwen3-30b-a3b-fp8",
    "OLLAMA_MODEL": "qwen3.5:9b",
    "RAG_ENABLED": "true"
  }
}
VariableValorUso
MODELO@cf/qwen/qwen3-30b-a3b-fp8modelo Workers AI
OLLAMA_MODELqwen3.5:9bmodelo Ollama propio (si OLLAMA_BASE_URL existe)
RAG_ENABLEDtrueactiva retrieval en recomendar()
AIbindingWorkers AI
OLLAMA_BASE_URL(opcional, no seteado)si existe → usa Ollama en vez de Workers AI

Endpoints:

  • GET / → descripción + perfiles + modelo
  • POST / con {"usuario":"sarah"|{...}, "destino":"Bacalar"} → ranking

3. Generación de rutas — variables del script (spab-retrieval/scripts/generar-rutas.mjs)

Inputs:

  • data/destinos.json → 15 destinos con lat/lon, estado, claves
  • data/base/lugares.csv → 558 lugares (Google Places, verificado)

Config RUTAS usada:

const RUTAS = {
  pacifico: {
    destinos: ['puerto-vallarta', 'acapulco', 'puerto-escondido'],
    nombre: 'Ruta Pacífico',
    descripcion: 'Costa del Pacífico mexicano',
    color: '#0EA5E9'
  },
  colonial: {
    destinos: ['cdmx', 'san-miguel-de-allende', 'oaxaca'],
    nombre: 'Ruta Colonial',
    descripcion: 'Ciudades coloniales de México',
    color: '#8B5CF6'
  }
};

Mapeo GIRO_A_CATEGORIA:

{
  'hoteles': 'estancia',
  'restaurantes': 'comida',
  'atracciones': 'patrimonio',
  'tours': 'naturaleza'
}

Derivadas por código:

  • vol = min(n_resenas / 10000, 1.0)
  • price = giro === 'hoteles' ? 3 : 2
  • coordenadas de corredor = orden de destinos[] → [lon, lat]
  • top 10 lugares por destino en la API (de N en el CSV)

Ejecutar:

cd spab-retrieval
node scripts/generar-rutas.mjs

4. spab-retrieval/.env — manifiesto (nombres; valores reales en el archivo, gitignored)

VariableEstadoUso
GOOGLE_CLOUD_API_KEYsecretGoogle Places v1
GOOGLE_PLACES_API_KEYsecretcalificación / sobreprecio
WIKIPEDIA_USER / WIKIPEDIA_PASSsecretcorpus Wikipedia
BOT_USER / BOT_PASSsecretbot datos
OPENSKY_CLIENT_ID / OPENSKY_CLIENT_SECRETsecretvuelos
PLACES_LUGARES_POR_DESTINO20costo lineal por destino
BQ_DATASETestado_turismosumidero BigQuery
GOOGLE_APPLICATION_CREDENTIALSvacíousa ADC local
SPAB_DATA_DIR./dataalmacén
SPAB_RAW_DIR./data/rawcrudos
CRON_SECRETvacíoprotege /api/cron
APIFY_API_KEYsecretscraping
CLOUDFLARE_API_IDaccount id—
CLOUDFLARE_API_TOKENsecretdeploy

5. Rees para no volver a fallar

  • Token necesita permisos: Workers Scripts > Edit, Workers Secrets > Edit, Pages > Edit, Account Settings > Read.
  • Si wrangler login dice “logged in with an API Token”: hay que unset CLOUDFLARE_API_TOKEN o usar el token de .env.
  • Pages requiere crear el proyecto la primera vez (pages project create) antes de pages deploy.