CKAN web real en local (Fase 1 hecha)

Fecha: 2026-09-11. Pide: “genera el uso de ckan web”.

Decisión: CKAN 2.11 en Docker, solo local

infra/docker-compose.yml: db (postgis 15) + solr (ckan/ckan-solr:2.11-solr9) + redis 7 + ckan (ckan/ckan-base:2.11).

Hallazgos (caros, no repetir):

  • ckan-base solo publica amd64 → platform: linux/amd64 (emulación en Apple Silicon, lento pero sirve).
  • Puerto 5000 ocupado por AirPlay en macOS → CKAN en :5001 (CKAN_SITE_URL acorde).
  • recline_view ya no existe en 2.11 → plugins: image_view text_view datastore.
  • Faltaba CKAN_SQLALCHEMY_URL explícito en el compose.
  • Hay que crear BD datastore + rol datastore_ro + datastore set-permissions a mano (el prerun no lo hace solo).
  • Credenciales dev en infra/.env (gitignored, ver .env.example).

Carga

scripts/push_ckan.py (stdlib+requests, sin ckanapi): crea org twitter-archivo, purga y recrea los 2 datasets desde datasets/*/datapackage.json, sube 6 CSVs. Ojo: la API necesita JSON, no form-data, para payloads anidados.

cd infra
docker compose up -d
TOKEN=$(docker compose exec -T ckan ckan -c /srv/app/ckan.ini user token add admin ckan-datos | tail -1)
CKAN_URL=http://localhost:5001 CKAN_TOKEN=$TOKEN python3 ../scripts/push_ckan.py

Estado

http://localhost:5001 — 2 datasets, 6 recursos, búsqueda Solr OK. DataStore cargado (scripts/load_datastore.py, 6/6 recursos con tipos int/text)

  • vista datatables_view por recurso: tablas estilo INEGI/Banxico (ordenar, filtrar, paginar) + dumps multiformato vía datastore_dump. Sin datapusher (innecesario: CSVs chicos, carga directa por API). El portal de Vercel (ckan-datos.vercel.app) sigue como espejo público lite.