尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
KOKO MLS — API de Valuación de Propiedades API de valuación automatizada de inmuebles en México. Calcula precios estimados de propiedades a partir de comparables obtenidos de portales inmobiliarios (Vivanuncios) y ajusta por tipo de cambio usando el SIE de Banxico. Expone endpoints REST para consultar valuaciones, comparables y métricas de mercado. Stack • Python 3.11, FastAPI, asyncpg • Postgres 15 (con migraciones Alembic) • Redis 7 (rate limit + cache) • Scrapers: Vivanuncios (cada 6h), Banxico SIE (FX diario) • Deploy: Fly.io (Querétaro) Requisitos: Docker Desktop, make, git.檢視完整 README ↗
API de valuación automatizada de inmuebles en México. Calcula precios estimados de propiedades a partir de comparables obtenidos de portales inmobiliarios (Vivanuncios) y ajusta por tipo de cambio usando el SIE de Banxico. Expone endpoints REST para consultar valuaciones, comparables y métricas de mercado.
Requisitos: Docker Desktop, make, git.
Pasos:
cp .env.example .env.local y edita lo necesario (al menos BANXICO_API_TOKEN).make dev (levanta api + postgres + redis + scrapers-worker en docker-compose).make migrate para aplicar migraciones, make seed para datos de referencia (catálogos de colonias, tipos de propiedad, FX inicial).Para detener el stack: make dev-down. Para limpiar volúmenes (destructivo): make dev-clean.
Todas las variables viven en .env.example. En local se cargan desde .env.local; en producción se setean como Fly secrets.
| Variable | Descripción | Default | Requerida en prod |
|---|---|---|---|
ENVIRONMENT | Entorno de ejecución (local, staging, production). | local | Sí |
LOG_LEVEL | Nivel de logging (DEBUG, INFO, WARNING, ERROR). | INFO | Sí |
DATABASE_URL | DSN de Postgres (postgresql+asyncpg://user:pass@host:5432/db). | postgresql+asyncpg://koko:koko@postgres:5432/koko_mls | Sí (inyectada por Fly Postgres) |
REDIS_URL | URL de Redis (redis://host:6379/0). | redis://redis:6379/0 | Sí |
CORS_ORIGINS | Lista de orígenes permitidos, separados por coma. | http://localhost:3000 | Sí |
BANXICO_API_TOKEN | Token del SIE de Banxico para consultar FX. | — | Sí |
VIVANUNCIOS_RATE_LIMIT_RPS | Requests por segundo contra Vivanuncios. | 0.5 | Sí |
SCRAPER_INTERVAL_HOURS | Frecuencia del scraper de comparables. | 6 | Sí |
SENTRY_DSN | DSN de Sentry para reporte de errores. | — | Recomendada |
FLY_API_TOKEN | Token de Fly.io para deploys desde CI. | — | Solo CI |
BACKUP_S3_BUCKET | Bucket S3 destino de backups de Postgres. | — | Sí (en scrapers) |
AWS_ACCESS_KEY_ID | Credencial IAM para subir backups a S3. | — | Sí (en scrapers) |
AWS_SECRET_ACCESS_KEY | Secret de la credencial IAM. | — | Sí (en scrapers) |
AWS_REGION | Región AWS del bucket de backups. | us-east-1 | Sí (en scrapers) |
make migrate-new MSG="add comparables index" → corre alembic revision --autogenerate -m "...".make migrate.make migrate-down.release_command en fly.toml, que invoca infra/migrate.sh antes de promover la nueva versión.Una sola vez (setup inicial):
fly auth login
fly apps create koko-valuation-api --org koko
fly apps create koko-valuation-scrapers --org koko
fly postgres create --name koko-mls-db --region qro
fly redis create --name koko-mls-redis --region qro
fly postgres attach koko-mls-db --app koko-valuation-api
fly secrets set --app koko-valuation-api BANXICO_API_TOKEN=... SENTRY_DSN=... CORS_ORIGINS=... REDIS_URL=...
fly secrets set --app koko-valuation-scrapers (mismas)
fly volumes create koko_api_data --region qro --size 1 --app koko-valuation-api
En cada PR mergeado a main, GitHub Actions corre fly deploy automáticamente (workflow .github/workflows/ci.yml).
Deploy manual: make deploy (despliega API + scrapers). Para uno solo: make deploy-api o make deploy-scrapers.
fly secrets set BANXICO_API_TOKEN=... --app koko-valuation-api
fly secrets set BANXICO_API_TOKEN=... --app koko-valuation-scrapers
fly secrets set SENTRY_DSN=... --app koko-valuation-api.fly secrets set AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... --app koko-valuation-scrapers
fly deploy para forzar reinicio (o fly machine restart).make logs para local, make logs-prod o fly logs --app koko-valuation-api para producción./metrics (Fly los scrapea automáticamente si la sección [metrics] está en fly.toml).SENTRY_DSN.monitoring/grafana-dashboard.json (importar a tu instancia de Grafana).infra/backup.sh corre semanal vía cron en koko-valuation-scrapers (configurado en infra/crontab) y sube un dump de Postgres a S3 (BACKUP_S3_BUCKET).make backup (requiere AWS creds en .env.local)..
├── api/ # FastAPI app (routers, schemas, servicios, deps)
├── db/ # Modelos SQLAlchemy + migraciones Alembic
│ └── alembic/
├── scrapers/ # Workers de Vivanuncios y Banxico
├── tests/ # Pytest (unit + integración)
├── infra/ # Scripts de migrate, seed, backup, crontab
├── monitoring/ # Dashboards Grafana, reglas Prometheus
├── docker-compose.yml # Stack local
├── Dockerfile # Imagen producción (api + scrapers)
├── fly.toml # Config Fly para API
├── fly-scrapers.toml # Config Fly para workers de scrapers
├── .env.example # Plantilla de variables
└── Makefile # Tareas comunes
fly logs --app koko-valuation-api. Suele ser una migración con conflict. Para revertir la última revisión: alembic downgrade -1.VIVANUNCIOS_RATE_LIMIT_RPS (default 0.5 req/s). Si seguís bloqueado, esperá ~30min antes de reintentar.make seed haya corrido y que los scrapers hayan ejecutado al menos un ciclo (make logs-scrapers).BANXICO_API_TOKEN; el scraper de Banxico corre diario y cachea el resultado en Redis.Propietario — KOKO. Todos los derechos reservados.