Arquitectura para un CMS Gratuito en Cloudflare (Estilo WordPress)
Arquitectura

Arquitectura para un CMS Gratuito en Cloudflare (Estilo WordPress)

21 Feb, 2026 • 5 min de lectura

¿Te imaginas tener tu propio CMS (sistema de gestión de contenidos) parecido a WordPress, pero sin tener que pagar absolutamente nada por alojamiento web mensual, y además con una velocidad y seguridad insuperables? La buena noticia es que el ecosistema gratuito de Cloudflare hace esto posible.

A continuación, te explico esta “arquitectura para dummies”, los componentes que necesitamos y cómo se comunican entre sí.

Las Piezas del Rompecabezas (¿Qué necesitamos?)

Para replicar un WordPress, necesitamos varias cosas: un lugar donde vivirán las páginas web, un “cerebro” que procese las acciones, un archivo central (base de datos) para los textos y un disco duro para las imágenes. En Cloudflare, usamos estos servicios que tienen generosas capas gratuitas (Free Tier):

  1. Cloudflare Pages (El Escaparate): Aquí alojaremos tu sitio web y también el panel de administración. Es alojamiento estático ultrarrápido (piensa en frameworks como Next.js, Astro o Nuxt).
  2. Cloudflare Workers (El Motor/Cerebro): Estos son pequeños trozos de código que se ejecutan directamente en los servidores de Cloudflare. Hacen el papel del backend (PHP en WordPress). Se encargan de procesar el registro de usuarios, publicar artículos y entregar contenido.
  3. Cloudflare D1 (El Archivador / Base de Datos): Es una base de datos relacional (SQLite) sin servidor. Aquí guardaremos todo el texto: artículos, configuración del sitio, usuarios, contraseñas seguras y comentarios.
  4. Cloudflare R2 (El Almacén de Imágenes): Es donde guardaremos nuestras fotos, videos y archivos pesados. Es equivalente a la carpeta wp-content/uploads de WordPress, pero mejorado y distribuido globalmente.

1. Diagrama de Flujo de Datos (Dataflow)

¿Cómo se mueve la información cuando un visitante entra a tu web o cuando tú, como administrador, publicas un artículo?

graph TD
    %% Trazado de Usuarios y Admin
    Visitante((Visitante))
    Admin((Administrador))

    subgraph "Escudo Cloudflare (CDN & WAF)"
        CDN[Red Global de Cloudflare]
    end

    subgraph "Nube de Cloudflare (Serverless CMS)"
        Pages[Cloudflare Pages<br>Frontend Público + Admin Panel]
        Workers(Cloudflare Workers<br>API / Lógica del CMS)
        D1[(Cloudflare D1<br>Base de Datos SQL)]
        R2[(Cloudflare R2<br>Almacenamiento de Medios)]
    end

    %% Flujo del visitante
    Visitante -->|Visita la web| CDN
    CDN -->|Carga interfaz estática| Pages
    Pages -.->|Pide artículos / datos| Workers
    Workers -.->|Consulta textos y autores| D1
    Workers -.->|Solicita URLs de imágenes| R2
    
    %% Flujo Directo CDN a R2
    CDN --->|Carga imágenes directamente| R2

    %% Flujo del Admin
    Admin -->|Accede al Panel Adminsitrativo| CDN
    Pages <-->|Usuario logueado crea contenido| Workers
    Workers <-->|Guarda nuevo post| D1
    Workers <-->|Sube nueva imagen| R2
    
    classDef cf fill:#f38020,stroke:#d66000,stroke-width:2px,color:white;
    class Pages,Workers,D1,R2,CDN cf;

¿Qué ocurre en el diagrama?

  • Cuando alguien visita tu blog, la red de Cloudflare carga la página visual de Pages. En un instante, Pages habla con el Worker para obtener el último artículo.
  • El Worker extrae el texto de D1 (la base de datos) y se lo devuelve a Pages.
  • Al mismo tiempo, si el artículo lleva una imagen, el lector la descarga casi mágicamente y a toda velocidad directamente desde R2.
  • Como el Administrador, tú subes datos. Cuando das a “Publicar”, Pages manda el texto al Worker, el cual lo guarda cuidadosamente en el D1 y despacha tu foto de portada al R2.

2. Diagrama de Entidad Relación (ERD)

Si Cloudflare D1 es nuestra base de datos (nuestro archivador), necesitamos organizar bien los cajones. A esto se le llama esquema de base de datos. Esto es lo mínimo que necesitamos para que funcione como un sistema de contenido (post, usuarios, y categorías):

erDiagram
    USERS {
        int id PK
        string username
        string email
        string password_hash
        string role "Admin, Autor"
        datetime created_at
    }

    POSTS {
        int id PK
        int author_id FK
        string title
        string slug "url-amigable"
        text content
        string status "Borrador, Publicado"
        datetime published_at
    }

    CATEGORIES {
        int id PK
        string name
        string slug
    }

    MEDIA {
        int id PK
        int post_id FK "opcional"
        string file_name
        string r2_url
        string mime_type "image/png, image/jpeg"
        datetime uploaded_at
    }

    %% Relación de tablas (Posts y Categorías es de Mucho a Mucho)
    POST_CATEGORY {
        int post_id FK
        int category_id FK
    }

    %% Relaciones
    USERS ||--o{ POSTS : escribe
    POSTS ||--o{ POST_CATEGORY : pertenece_a
    CATEGORIES ||--o{ POST_CATEGORY : agrupa
    POSTS ||--o{ MEDIA : contiene

Explicación del modelo de datos:

  1. USERS (Usuarios): La tabla para ti y tus autores. Aquí se guardan las credenciales con seguridad de acceso.
  2. POSTS (Artículos): El núcleo de tu información. Contiene el título, el enlace de “slug”, el texto y el estado del post (¿Borrador o publicado?). Todo post lo debe “escribir” un autor.
  3. CATEGORIES (Categorías): Igual que en WP, las categorías para ordenar los artículos. Usamos una tabla intermedia (POST_CATEGORY) porque un post puede tener varias categorías y viceversa.
  4. MEDIA (Archivos Multimedia): Registra cada imagen subida, apuntando a su dirección pública en Cloudflare R2, para saber si este archivo fue subido para algún post en específico.

Conclusión

Montar un sistema así de forma nativa requiere una curva de aprendizaje inicial para integrar estos sistemas (generalmente usando un “Meta-Framework” como Remix, Next.js, Qwik o Hono), pero el resultado es espectacular:

  • Tienes una plataforma CMS propia que reacciona en milisegundos a nivel mundial.
  • Coste Cero: Las versiones gratuitas de D1, R2, Workers y Pages cubren sin problema proyectos medianos y pequeños con cientos de miles de visitas.
  • Tu control de datos y velocidad se dispara en comparación con un hosting básico tradicional de WordPress.