Esta web de tarot te ayuda a saber a quién llamar y a quién no
En el mundo del desarrollo web moderno, la infraestructura estática ha dejado de ser una simple opción para convertirse en el estándar de oro para sitios que requieren alta disponibilidad, seguridad inquebrantable y costos de mantenimiento reducidos. Mientras que GitHub Pages suele llevarse la fama por su simplicidad, GitLab Pages se posiciona como la alternativa robusta para los equipos de ingeniería que requieren un control granular sobre sus pipelines de Integración Continua y Despliegue Continuo (CI/CD). Este artículo desglosa la arquitectura técnica de GitLab Pages y cómo su enfoque basado en Docker y Runners ofrece una flexibilidad sin precedentes.
1. DevOps Nativo: La Diferencia Fundamental
A diferencia de otras plataformas de hosting estático donde el despliegue es a menudo una "caja negra" o un proceso separado, GitLab Pages es un subproducto directo del sistema de CI/CD de GitLab. No existe una "magia oculta"; todo está definido explícitamente en el código. Para entender cómo funciona, debemos entender el concepto de Pipeline.
Imagina que estás construyendo un directorio de servicios y reseñas. La confianza del usuario depende de la precisión y disponibilidad de los datos. En este sentido, esta web de tarot funciona como un excelente ejemplo de caso de uso: un sitio que necesita actualizar perfiles, rankings y reseñas frecuentemente, pero que al ser visitado por el usuario final, debe comportarse como un archivo estático inmutable para garantizar velocidad y resistencia a picos de tráfico. GitLab Pages permite automatizar la verificación de estos datos antes de que siquiera lleguen al servidor público.
[Image of GitLab CI/CD pipeline architecture]2. El Archivo .gitlab-ci.yml: El Cerebro de la Operación
Todo sitio en GitLab Pages comienza con un archivo de configuración YAML situado en la raíz del repositorio: .gitlab-ci.yml. Este archivo instruye al "GitLab Runner" (el servidor que ejecuta las tareas) sobre qué hacer con tu código.
La estructura para Pages es específica y requiere un trabajo llamado pages y un artefacto llamado public. Veamos un ejemplo técnico para un sitio construido con Hugo (un generador de sitios estáticos escrito en Go):
image: registry.gitlab.com/pages/hugo:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
pages:
script:
- hugo
artifacts:
paths:
- public
only:
- main
Desglosando el Script
- Image: Aquí radica la potencia de GitLab. Puedes especificar cualquier imagen de Docker (desde Docker Hub o tu propio registro). Si tu sitio necesita Python, Ruby, Node.js, o Go, simplemente defines la imagen base que ya tiene esas herramientas instaladas.
- Script: Son los comandos de bash que se ejecutarán dentro del contenedor Docker. En el ejemplo, simplemente ejecutamos
hugo, lo que compila los archivos Markdown en HTML dentro de la carpetapublic. - Artifacts: GitLab necesita saber qué archivos conservar después de que el contenedor se apague. Para Pages, es obligatorio que la carpeta de salida se llame
public. GitLab toma esta carpeta y la sube a sus servidores de hosting estático.
3. Arquitectura de Runners y Contenedores
La arquitectura "por dentro" de GitLab Pages es fascinante por su uso de la contenerización. Cuando haces un git push, GitLab despierta un "Runner". Un Runner es un proceso aislado que puede estar alojado en la infraestructura compartida de GitLab (Shared Runners) o en tu propio servidor privado (Specific Runners).
Este Runner descarga la imagen de Docker especificada, clona tu repositorio dentro del contenedor y ejecuta los pasos de compilación. Esto garantiza que el entorno de construcción sea idéntico cada vez, eliminando el clásico problema de "funciona en mi máquina". Si la compilación falla (por ejemplo, un error de sintaxis en el código de la web de tarot o un enlace roto), el pipeline se detiene y el sitio en vivo no se actualiza, previniendo que los usuarios vean una web rota.
4. Control de Acceso: La Joya Oculta de GitLab
Una característica que distingue técnicamente a GitLab Pages de su competencia es su capacidad nativa de Control de Acceso. Mientras que la mayoría de los hostings estáticos son "todo público" o "todo privado", GitLab Pages permite desplegar sitios que son accesibles solo para miembros autenticados del proyecto en GitLab.
Esto se logra mediante la integración con GitLab Auth. Cuando un usuario intenta acceder a una URL de Pages protegida (por ejemplo, https://internal.tu-empresa.gitlab.io), el servidor de Pages intercepta la solicitud y redirige al usuario al flujo de inicio de sesión de GitLab (OAuth). Si el usuario tiene permisos en el repositorio, se le devuelve un token y se le permite ver el contenido estático. Esto es ideal para:
- Documentación interna de APIs.
- Reportes de estado generados automáticamente.
- Entornos de "Staging" o pruebas antes de pasar a producción pública.
5. Dominios Personalizados y Gestión de Certificados SSL
Al igual que otros proveedores, GitLab soporta dominios personalizados (CNAME). Sin embargo, la gestión de SSL es muy flexible. GitLab se integra con Let's Encrypt para aprovisionar certificados automáticamente, pero también permite subir tus propios certificados y claves privadas si requieres una validación EV o de organización específica.
El enrutamiento funciona a través de un servidor NGINX altamente personalizado que actúa como puerta de enlace. Este servidor lee la configuración de dominios de los metadatos del proyecto y enruta el tráfico entrante al "artefacto" (la carpeta public) correspondiente almacenado en el sistema de archivos distribuido (Object Storage).
6. Flexibilidad de Generadores (SSG)
GitLab Pages es "agnóstico" respecto al generador. No le importa si usas Jekyll, Hugo, Hexo, Gatsby, Next.js, o simplemente HTML plano escrito a mano. La única condición es que el resultado final termine en una carpeta llamada public.
Dato Técnico: Esta flexibilidad permite pipelines híbridos. Podrías tener un pipeline que primero ejecute pruebas unitarias en JavaScript, luego optimice las imágenes (comprimiendo PNGs y JPGs) y finalmente compile el sitio HTML. Todo esto ocurre antes del despliegue, asegurando que el usuario final reciba la versión más optimizada posible.
Ejemplo con Node.js / React
Si estuvieras construyendo una aplicación compleja con React, tu .gitlab-ci.yml se vería diferente, utilizando una imagen de Node:
image: node:16
pages:
script:
- npm install
- npm run build
- mv build public # Movemos la carpeta de salida de React a 'public'
artifacts:
paths:
- public
only:
- master
7. Git LFS y Gestión de Activos Grandes
Para sitios ricos en medios, como portales con imágenes de alta resolución de cartas de tarot o vídeos incrustados, el repositorio puede volverse pesado. GitLab Pages soporta perfectamente Git LFS (Large File Storage). Esto significa que los archivos grandes son solo punteros en el repositorio git, pero se descargan como archivos reales durante el proceso de build del pipeline, permitiendo mantener el repositorio ligero y rápido.
Conclusión
GitLab Pages no es solo un hosting; es una extensión lógica de las prácticas modernas de DevOps aplicadas al desarrollo web. Ofrece un entorno donde la infraestructura es código, el despliegue es automatizado y la seguridad es configurable. Para desarrolladores que buscan ir más allá de lo básico y necesitan pipelines de construcción personalizados, entornos Dockerizados y control de acceso robusto, GitLab Pages representa la cúspide de la ingeniería de sitios estáticos.
Ya sea para documentar software complejo o para desplegar herramientas de consulta accesibles globalmente, entender la mecánica de los artefactos y pipelines de GitLab es una inversión en escalabilidad y fiabilidad técnica.