ckan-datos — plan inicial (CKAN local personal)

Fecha: 2026-09-09. Repo: ~/nef/ckan-datos/ (vacío, no git). Contexto: second-brain + datapub + marvelousdb + DVS resources.

1. Qué sabemos de CKAN

  • CKAN = Comprehensive Knowledge Archive Network, Open Knowledge Foundation.
  • Sirve para: catálogo de datasets → organizaciones → recursos (archivos/APIs), con metadatos (título, licencia, tags, formato), búsqueda facetada, API REST, DataStore + DataPusher para previsualizar CSVs.
  • Stack real: Python (Flask, 2.10/2.11 actual), PostgreSQL + PostGIS, Solr (búsqueda), Redis (colas/cache). Pesado para laptop si lo corres completo.
  • Licencia: AGPLv3. 100% gratuito si lo auto-hospedas. Lo que cobran terceros es hosting gestionado / soporte (ej. CKAN Cloud), no el software.
  • Repo oficial: https://github.com/ckan/ckan + compose de referencia: ckan-docker (db, solr, redis, ckan).

2. Por qué parece “no gratuito”

  • No hay paywall del código. La confusión viene de: demos limitadas, ofertas SaaS, y costo de infra (servidor, dominio, mantenimiento).
  • Para uso personal local: costo = 0, solo disco/RAM + tu tiempo.

3. ¿Se puede en local para uso personal? Sí

  • Vía Docker: ckan/ckan + postgres + solr + redis. ~4 contenedores, ~2-4GB RAM.
  • En macOS (este equipo darwin) funciona con Docker Desktop / OrbStack.
  • Alternativa ligera recomendada para empezar: no levantar CKAN día 1, sino modelar tus datas “estilo-CKAN” en archivos.

4. Lo que ya tienes (inventario nef/second-brain)

  • second-brain: grafo local-first, estado en content/nodes/*.md + content/projects/*.md, derivado a dist/. Nunca se escribe de vuelta. Incluye kind: dataset (usar para puente).
  • second-brain/data/: book-cache, paper-cache, enrich-cache, cursos, puente-cursos.json.
  • datapub/: _raw/, index.csv, transcripts/, tareas.md (27 charlas) — candidato piloto #1.
  • decisions/2026-09-09-capa-recursos-dvs-local.md: 1009 filas resources.json → 495 notas en content/resources/ local-only — candidato piloto #2.
  • marvelousdb decisiones 2026-08-07: sqlite + tmdb-films — candidato piloto #3.
  • Principio local-first: nada de esto debe subir a nodo.ws sin curación.

5. Decisión: CKAN-lite primero, CKAN-full después

No montar CKAN completo en fase 0. Scope down:

Fase 0 — espejo CKAN-lite en este repo (esta semana, sin Docker):

  • datasets/<slug>/datapackage.json (nombre, título, org, licencia, tags, recursos con path/formato) + README.md + datos en data/.
  • 2 pilotos: datapub-catalogo (desde datapub/index.csv), dvs-resources (desde resources.json, solo 495 estudiables).
  • organizaciones.md: second-brain, datapub, marvelousdb, surtido.
  • scripts/validar.py: chequea que todo recurso exista, que datapackage.json sea válido.

Fase 1 — CKAN real en Docker (solo si Fase 0 te sirve):

  • infra/docker-compose.yml basado en ckan-docker, puerto 5000, volúmenes a ./datasets.
  • Cargar los 2 pilotos vía API (ckanapi).
  • Medir: ¿vale el costo RAM/mantenimiento vs CKAN-lite?

Fase 2 — puente second-brain:

  • Script que convierte kind: dataset → datasets/<slug>/datapackage.json. Nunca al revés (regla: no inventar memoria, no escribir al grafo desde aquí).

6. Estructura propuesta para ckan-datos/

ckan-datos/
  README.md (qué es / qué no es: laboratorio, no portal público)
  organizaciones.md
  datasets/
    datapub-catalogo/datapackage.json + README.md + data/index.csv
    dvs-resources/datapackage.json + README.md
  scripts/validar.py
  infra/docker-compose.yml (fase 1, no ahora)

7. Próximo movimiento concreto (quién lo ve esta semana)

  1. git init + README mínimo.
  2. Crear datasets/datapub-catalogo/ copiando datapub/index.csv + datapackage.json manual.
  3. scripts/validar.py de 30 líneas. Si eso se usa 2 veces, pasar a DVS + Docker.

No hacer

  • No importar los 1009 recursos crudos ni libros/eventos excluidos en decisión DVS.
  • No exponer CKAN público sin definir licencias.
  • No tocar second-brain/lib|content/nodes desde aquí.