--- type: Resumen title: "Estudio — Cloudflare (Workers + D1 + AI)" description: "Estudio de cloudflare publicado como sitio: scripts minimalistas para implementarlo y cómo se conecta con el OKF." resource: "https://gerardoesquivia.com/cloudflare/" status: publicado tags: [estudio, cloudflare, scripts-minimalistas, documentacion, okf] timestamp: 2026-10-04 creator: "Gerardo Esquivia Zapata" grafo: datos --- # Estudio — Cloudflare (Workers + D1 + AI) > **Sitio publicado:** https://gerardoesquivia.com/cloudflare/ > **Nota generada del sitio** para que el estudio regrese al OKF (REGLA del ciclo: > la documentación no está completa hasta estar publicada **Y** registrada). ## Cómo usarla Los **scripts minimalistas** de abajo se copian y funcionan. Esa es la parte que vale: la prosa se lee y se olvida; un script se pega y arranca. --- ## 1 · Worker mínimo Desplegar una función serverless en el edge con un comando. ### ⚡ Script minimalista ``` # 1. Crear el proyecto y publicar npm create cloudflare@latest mi-app cd mi-app npx wrangler dev # local npx wrangler deploy # edge ``` ``` // 2. Worker mínimo (src/index.ts) export default { async fetch(request) { return new Response("Hola desde Cloudflare Workers 🚀"); }, }; ``` ### 🔁 Cómo funciona - npm create cloudflare@latest genera el esqueleto del Worker. - Un Worker = función fetch(request) que devuelve un Response. - wrangler deploy lo publica en el edge sin servidores. 💡 Sin fríos (cold starts): el código corre cerca del usuario en 300+ ciudades. ## 2 · D1 (SQL serverless) + Workers AI Base de datos global y modelos de IA con un comando. ### ⚡ Script minimalista ``` # 3. Base de datos D1 (SQL global) npx wrangler d1 create mi-base npx wrangler d1 execute mi-base --command "CREATE TABLE tareas (id INTEGER PRIMARY KEY, texto TEXT)" # 4. Modelos de IA disponibles npx wrangler ai models ``` ### 🔑 Conceptos clave | Concepto | Qué es | | --- | --- | | wrangler | CLI (dev, deploy, d1, ai, r2) | | Worker | Función fetch → Response en el edge | | D1 | SQL serverless global (compatible SQLite) | | Workers AI | Inferencia de IA con una llamada de API | ## 3 · Grafo animado — el flujo en el edge El token 🟠 recorre el flujo. Clic en el gráfico reinicia la animación. Iniciando… ## 4 · Referencia y regla de librerías | Comando | Qué hace | | --- | --- | | npm create cloudflare@latest | Crea un Worker | | npx wrangler dev / deploy | Local / publicar en el edge | | npx wrangler d1 create/execute | Base de datos SQL serverless | | npx wrangler ai models | Modelos de Workers AI | 📦 Regla de librerías (local primero): revisar C:\Users\TUF\Documents\librerías\local\. Herramienta: wrangler (npm). Docs: https://developers.cloudflare.com/. 📱 Escanéalo para abrir la documentación https://gerardoesquivia.com/cloudflare/ Cloudflare · Documentación mínima (Workers + D1 + AI) · OKF de Gerardo Esquivia Zapata · 2026-08-29 --- type: Resumen title: "⚡ Cloudflare — Edge serverless (Resumen minimalista)" description: "Resumen minimalista de Cloudflare: Workers (serverless), D1 (SQL global) y Workers AI, con scripts listos para implementar." fuente: "https://developers.cloudflare.com/" sitio: "https://gerardoesquivia.com/cloudflare/" tags: [resumen, cloudflare, workers, edge, okf] timestamp: 2026-08-29 creator: "Gerardo Esquivia Zapata" --- # ⚡ Cloudflare — Resumen (para OKF) > **Para qué:** desplegar código serverless en el edge (300+ ciudades) y bases de datos SQL globales. > **Cómo:** `npm create cloudflare@latest mi-app`; Worker = `fetch(request) → Response`; `npx wrangler deploy`; D1 con `npx wrangler d1 create/execute`; IA con `npx wrangler ai models`. ## 🛠️ Scripts minimalistas ```bash npm create cloudflare@latest mi-app cd mi-app npx wrangler dev # local npx wrangler deploy # publicar ``` ```ts export default { async fetch(request) { return new Response("Hola desde Cloudflare Workers 🚀"); }, }; ``` ```bash npx wrangler d1 create mi-base npx wrangler d1 execute mi-base --command "CREATE TABLE tareas (id INTEGER PRIMARY KEY, texto TEXT)" npx wrangler ai models ``` ## 🔑 Conceptos clave | Concepto | Qué es | |---|---| | `wrangler` | CLI (dev, deploy, d1, ai, r2) | | `Worker` | Función `fetch → Response` en el edge | | `D1` | SQL serverless global (SQLite) | | `Workers AI` | Inferencia de IA con una llamada | ## 🔗 Fuente https://developers.cloudflare.com/ · Sitio: https://gerardoesquivia.com/cloudflare/ ## 📥 Cómo agregar esto a tu OKF (para el agente) 1. Guarda este archivo en tu vault (ej. `📋 Proyectos/`). 2. El frontmatter ya es OKF: no modifiques `type` ni `creator`. 3. Implementa directo: copia los comandos y ajusta nombres. No necesitas investigar más. function descargarMD(){const md=document.getElementById('md-resumen').textContent.trim();const b=new Blob([md],{type:'text/markdown;charset=utf-8'});const u=URL.createObjectURL(b);const a=document.createElement('a');a.href=u;a.download='resumen-cloudflare.md';document.body.appendChild(a);a.click();a.remove();URL.revokeObjectURL(u);} (function(){const nodes=[{id:"req",label:"Request",sub:"usuario",x:120,y:210},{id:"wk",label:"Worker",sub:"edge",x:390,y:210},{id:"svc",label:"D1 / AI",sub:"servicio",x:640,y:210},{id:"res",label:"Response",sub:"respuesta",x:860,y:210}];const edges=[{from:"req",to:"wk",label:"fetch"},{from:"wk",to:"svc",label:"bindings"},{from:"svc",to:"wk",label:"dato"},{from:"wk",to:"res",label:"Response"},{from:"res",to:"req",label:"entrega"}];const pos=Object.fromEntries(nodes.map(n=>[n.id,{x:n.x,y:n.y}]));const svg=document.getElementById("grafo");const NS="http://www.w3.org/2000/svg";function el(t,a){const e=document.createElementNS(NS,t);for(const k in a)e.setAttribute(k,a[k]);return e;}const edgePaths=[],edgeArrows=[]; edges.forEach((ed)=>{const a=pos[ed.from],b=pos[ed.to];let d,mid;if(ed.from==="res"){d=`M ${a.x} ${a.y} C ${(a.x+b.x)/2} 400, ${(a.x+b.x)/2} 400, ${b.x} ${b.y}`;mid={x:(a.x+b.x)/2,y:380};}else{const mx=(a.x+b.x)/2;d=`M ${a.x} ${a.y} C ${mx} ${a.y}, ${mx} ${b.y}, ${b.x} ${b.y}`;mid={x:mx,y:(a.y+b.y)/2};}const p=el("path",{class:"edge",d});svg.appendChild(p);edgePaths.push(p);const ang=Math.atan2(b.y-mid.y,b.x-mid.x);const tx=b.x-18*Math.cos(ang),ty=b.y-18*Math.sin(ang);const ar=el("path",{class:"arrow",d:`M ${tx} ${ty} l 8 -4 l -8 -4 z`,transform:`rotate(${ang*180/Math.PI} ${tx} ${ty})`});svg.appendChild(ar);edgeArrows.push(ar);}); const nodeGroups={};nodes.forEach(n=>{const g=el("g",{class:"node"});g.appendChild(el("rect",{x:n.x-85,y:n.y-29,width:170,height:58}));const t=el("text",{class:"t",x:n.x,y:n.y-4,"text-anchor":"middle"});t.textContent=n.label;const s=el("text",{class:"s",x:n.x,y:n.y+16,"text-anchor":"middle"});s.textContent=n.sub;g.appendChild(t);g.appendChild(s);svg.appendChild(g);nodeGroups[n.id]=g;}); const travel=el("circle",{class:"travel",r:6,opacity:0});svg.appendChild(travel);const caption=document.getElementById("caption");const N=edges.length;let i=0,raf=null; function clearActive(){nodes.forEach(n=>nodeGroups[n.id].classList.remove("active"));edgePaths.forEach(p=>p.classList.remove("active"));edgeArrows.forEach(a=>a.classList.remove("active"));} function animateEdge(idx){const ed=edges[idx];clearActive();edgePaths[idx].classList.add("active");edgeArrows[idx].classList.add("active");nodeGroups[ed.from].classList.add("active");caption.innerHTML=`Paso ${idx+1}/${N}: ${ed.from} → ${ed.to} (${ed.label})`;const path=edgePaths[idx],len=path.getTotalLength();const t0=performance.now(),dur=800;function step(now){let p=(now-t0)/dur;if(p>1)p=1;const pt=path.getPointAtLength(p*len);travel.setAttribute("cx",pt.x);travel.setAttribute("cy",pt.y);travel.setAttribute("opacity",1);if(panimateEdge(i),300);}}raf=requestAnimationFrame(step);} function start(){cancelAnimationFrame(raf);i=0;animateEdge(0);}svg.addEventListener("click",start);start(); })(); --- ## Cómo se conecta con el OKF - **Sitio:** https://gerardoesquivia.com/cloudflare/ - **Nota:** esta (bajada del sitio, para consulta del agente) - **Fuente:** https://gerardoesquivia.com/cloudflare/ ## Aprendizajes - Los scripts minimalistas son el activo: **el ejemplo más corto que demuestra el uso**. - Este estudio forma parte del ciclo: **estudiar → publicar → registrar en el OKF**.