¿Cómo alojo esto?
¿Te has preguntado cómo está desplegado este blog? Si no, de igual manera lo voy a decir.
La respuesta corta es una combinación de Astro, Tailwind CSS y Cloudflare Pages. Pero para que esto sea útil, vamos a desglosar la arquitectura y el porqué de estas decisiones.
La Pila Tecnológica
El sitio es completamente estático. No hay bases de datos ni procesos ejecutándose en tiempo real en el servidor; todo se resuelve en el tiempo de compilación (build time).
1. Astro 5
Utilizo Astro como generador de sitios estáticos (SSG). La ventaja principal es su arquitectura de “islas”, que permite enviar el mínimo de JavaScript posible al cliente. El contenido vive en archivos Markdown, lo que separa la redacción de la presentación.
Ejemplo de estructura de contenido:
---
title: "Mi Artículo Técnico"
pubDate: 2026-06-23
description: "Descripción corta para SEO"
tags: ["devops", "astro"]
draft: false
---
Contenido en Markdown aquí...
2. Tailwind CSS 4
Para los estilos uso Tailwind 4. A diferencia de versiones anteriores, la configuración ahora es mucho más directa y se integra nativamente con Vite, permitiendo un flujo de trabajo extremadamente rápido sin archivos de configuración masivos.
3. Cloudflare Pages
El despliegue final ocurre en Cloudflare Pages. Es la elección lógica para contenido estático por tres razones:
- Latencia: El contenido se distribuye en una red global (Edge), sirviéndose desde el nodo más cercano al usuario.
- Seguridad: No hay servidor que parchear ni vulnerabilidades de sistema operativo que monitorear.
- Costo: La capa gratuita es masivamente generosa para este volumen de tráfico.
Flujo de Trabajo y Automatización
No creo archivos a mano cada vez que quiero escribir. Utilizo un script de automatización que valida que el nuevo post cumpla con el esquema de datos esperado (usando Zod en el backend de Astro) y genera el archivo con el formato correcto.
El Pipeline de CI/CD
El flujo de despliegue está dividido en dos etapas para evitar que errores de sintaxis lleguen a producción:
-
Validación (GitLab CI): Cada push dispara un job que intenta compilar el sitio. Si el build falla, el proceso se detiene.
Ejemplo simplificado de validación:
build_validation: script: - pnpm install - pnpm run build only: - branches -
Despliegue (Local/Manual): Una vez validado el código, el despliegue a Cloudflare se realiza mediante la CLI de Wrangler. Prefiero este paso manual para controlar exactamente qué versión es la que se hace pública.
Seguridad y Optimización
En lugar de configurar un servidor Nginx o Apache, la seguridad se maneja de forma declarativa mediante cabeceras HTTP que Cloudflare aplica a cada respuesta.
Ejemplo de endurecimiento de cabeceras:
/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
En cuanto al SEO, la integración @astrojs/sitemap genera automáticamente un índice de URLs en cada build, el cual es referenciado en un archivo robots.txt estándar.
Conclusión
He sacrificado la capacidad de ejecutar código dinámico en el servidor a cambio de una carga operacional cercana a cero. Para un blog técnico, este es el trade-off correcto: priorizar la estabilidad y la velocidad de entrega sobre la flexibilidad de un backend complejo.