Sitios estáticos (S3 / disco)
Qué hace
Sección titulada «Qué hace»Sirve un sitio 100% estático —HTML, CSS, JS, imágenes, una aplicación de una sola página compilada— directamente desde un almacenamiento de objetos compatible con S3 o desde disco local, sin necesidad de un servidor de origen HTTP. Tero Services trae el objeto del almacenamiento, lo cachea en el borde y lo entrega manteniendo TLS, WAF, geo-bloqueo y el resto de los controles.
El modelo es el de una red de distribución de contenido (estilo CloudFront): definís un origen (el almacenamiento) y una o varias rutas que sirven desde él. La primera solicitud trae el objeto; las siguientes se sirven desde la caché de borde con latencia mínima.
Cuándo usarlo
Sección titulada «Cuándo usarlo»- Páginas de aterrizaje, sitios institucionales y documentación generada estáticamente (Astro, Hugo, Jekyll, etc.).
- Aplicaciones de una sola página (React, Vue, Svelte, Angular) compiladas a archivos estáticos.
- El frontend estático de una aplicación cuyo backend vive en otra ruta (
/api/*→ servidor de origen,/→ sitio estático). - Cuando querés desacoplar el contenido del cómputo: publicás subiendo archivos al bucket, sin servidores que mantener.
Orígenes de almacenamiento
Sección titulada «Orígenes de almacenamiento»Un origen es un proveedor de almacenamiento reutilizable: se da de alta una vez y lo referencian todas las rutas que sirven desde él. Hay dos tipos.
Compatible con S3
Sección titulada «Compatible con S3»Cualquier almacenamiento de objetos que hable el protocolo S3. Probados y soportados:
| Proveedor | Notas |
|---|---|
| Amazon S3 | Servicio de AWS. Región estándar. |
| Cloudflare R2 | Sin cargos de egreso; endpoint propio. |
| Backblaze B2 | Endpoint compatible con S3. |
| Wasabi | Almacenamiento de bajo costo compatible con S3. |
| DigitalOcean Spaces | Endpoint regional compatible con S3. |
| Garage | Auto-alojado, liviano, ideal en la misma red. |
| MinIO | Auto-alojado, alto rendimiento. |
| Ceph (RADOS Gateway) | Almacenamiento de objetos a escala. |
Las credenciales (clave de acceso + secreto) se guardan cifradas en reposo y nunca se devuelven por la API ni aparecen en registros.
Disco local
Sección titulada «Disco local»Almacenamiento en disco gestionado por Host Admin; cada bucket es una carpeta. No requiere credenciales ni endpoint. Pensado para servir sitios y landings con cero dependencias externas. El acceso queda acotado al área asignada (no puede salir de ella).
Opciones de configuración
Sección titulada «Opciones de configuración»La configuración se divide en tres niveles: el origen, la ruta que sirve desde ese origen, y la caché de borde.
Opciones del origen
Sección titulada «Opciones del origen»| Opción | Aplica a | Descripción |
|---|---|---|
| Endpoint | S3 | URL del servicio (por ejemplo, https://s3.amazonaws.com o el endpoint de R2/MinIO). |
| Región | S3 | Región del bucket (por ejemplo, us-east-1, auto). |
| Estilo de path | S3 | path-style (endpoint/bucket/key) o virtual-hosted (bucket.endpoint/key). Garage/MinIO suelen usar path-style. |
| Permitir HTTP | S3 | Habilita endpoints sin TLS (solo para almacenamiento en red interna de confianza). |
| Credenciales | S3 | Clave de acceso + secreto, cifradas en reposo. |
| Área de disco | Disco | Espacio asignado y gestionado por Host Admin; cada bucket es una carpeta dentro de él. |
Opciones de la ruta
Sección titulada «Opciones de la ruta»| Opción | Descripción | Por defecto |
|---|---|---|
| Bucket | Bucket (o subdirectorio, en disco) de donde se sirve. | — |
| Prefijo | Subcarpeta dentro del bucket que actúa como raíz del sitio. | (raíz) |
| Documento índice | Archivo servido cuando la URL termina en /. | index.html |
| Fallback de aplicación de una sola página | Si está activo, las rutas que no mapean a un archivo devuelven el índice, para que el enrutador del cliente tome control. | desactivado |
| Documento de error | Página servida ante un 404 (por ejemplo, 404.html). | — |
| Tiempo de vida (TTL) | Cuánto vive el contenido en la caché de borde antes de revalidar. | configurable |
| Encabezados de respuesta | Encabezados adicionales a inyectar (por ejemplo, Cache-Control, X-Frame-Options, CORS). | — |
Comportamiento de la caché de borde
Sección titulada «Comportamiento de la caché de borde»| Comportamiento | Descripción |
|---|---|
| Tiempo de vida (TTL) | Cuánto vive el contenido antes de revalidar (definido por ruta). |
| Compresión | El contenido comprimible se entrega comprimido con Brotli cuando el visitante lo acepta. |
| Servir contenido vencido ante error | Si el almacenamiento no responde, puede seguir sirviéndose la última copia válida en lugar de devolver un error. |
Caché de borde
Sección titulada «Caché de borde»El contenido se cachea en el borde para minimizar las idas al almacenamiento: la primera solicitud trae el objeto; las siguientes se sirven desde la caché con latencia mínima. El contenido comprimible (texto, JS, JSON, SVG, WASM) se entrega comprimido con Brotli respetando Accept-Encoding: br; los binarios se sirven tal cual.
Invalidación y purga
Sección titulada «Invalidación y purga»- Tiempo de vida (TTL). Cada objeto expira según el TTL de la ruta.
- Revalidación por ETag. Antes de servir contenido vencido, el borde consulta al almacenamiento con
If-None-Match; si no cambió, responde304y renueva la frescura sin volver a transferir el objeto. - Purga manual. Se solicita al equipo el vaciado de paths específicos de una ruta (
{ "paths": ["/index.html", "/assets/app.js"] }) o el vaciado total de la ruta. La purga global está reservada a administración.
Seguridad
Sección titulada «Seguridad»- La entrega al visitante usa la misma postura TLS que el resto de las rutas.
- Las credenciales de los orígenes S3 viajan y se guardan cifradas; nunca se exponen.
- El mapeo de path a objeto rechaza el traversal (
../), tanto en S3 como en disco local.
Limitaciones
Sección titulada «Limitaciones»- El sitio debe ser estático: no hay ejecución del lado servidor en esta capacidad. Para PHP, ver Alojamiento PHP; para lógica liviana, Funciones Lambda.
- La caché de borde no es una red de distribución global con presencia en múltiples regiones; está optimizada como entrada en la región del servicio.
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»- ¿Puedo servir el frontend estático y la API bajo el mismo dominio? Sí: una ruta
/sirve el sitio desde el origen y otra ruta/api/*proxya a tu servidor de origen. Ver Casos de uso. - ¿Cómo publico una versión nueva? Subís los archivos al bucket (o a la carpeta, en disco local). Al expirar el TTL —o ante una purga— el borde toma la versión nueva. El versionado por hash en el nombre del archivo evita esperas.
- ¿Puedo usar un bucket privado? Sí: ese es el modo recomendado. Tero Services accede con sus credenciales; los visitantes nunca acceden al bucket directamente.
- ¿Sirve para una aplicación de una sola página con rutas del lado del cliente? Sí, activando el fallback de aplicación de una sola página.