Por qué sacar los archivos del disco de la aplicación
Los contenedores de aplicación deberían ser sin estado para poder redesplegarse, escalarse, y hacer rollback sin perder las subidas de usuarios. Cuando avatares, fotos de producto, facturas, y video se escriben en el filesystem del contenedor, cada reinicio arriesga perdida de datos y cada réplica tiene un conjunto distinto de archivos. Object Storage resuelve esto dándole a todas las réplicas un lugar compartido, duradero, para leer y escribir. Tu app se mantiene desechable mientras los datos viven de forma independiente.
Genuinamente compatible con S3, no una imitación
El servicio habla la API de S3, así que las herramientas que ya usas siguen funcionando: el aws-cli, boto3, el AWS SDK for JavaScript, los drivers de filesystem S3 de Laravel y Symfony, rclone, y s3cmd hablan todos con el una vez que defines la URL de endpoint y el par de claves. Las subidas multipart para archivos grandes, los metadatos de objeto, y el manejo de content-type se comportan como los desarrolladores de S3 esperan. Eso significa que migrar una app que ya usa S3 suele ser un cambio de configuración en lugar de una reescritura de código.
Buckets, access keys, y radio de impacto
Organizas los datos en buckets y controlas el acceso con pares de access key ID y secret key que puedes rotar o revocar en cualquier momento. Mantener una clave por app o por bucket limita el radio de impacto: si una clave se filtra en un log o un bundle de cliente, revocas ese par y lo vuelves a acuñar sin tocar ningún otro servicio. El panel lista que claves existen para que puedas auditar y retirar las que ya no se usan.
Storage y CDN trabajando como uno solo
Como Object Storage y el CDN edge son la misma plataforma, puedes servir objetos del bucket a través de caché sin conectar un origin separado. Un bucket público o una ruta edge firmada se convierte en un camino de descarga rápido donde los archivos populares se cachean cerca de los usuarios y nunca golpean el storage repetidamente. Cuando reemplazas un archivo bajo una clave existente, un purge dirigido desde el panel o cdnctl refresca el edge para que nadie reciba una copia desactualizada.
Conectar storage a container apps
En lugar de pegar credenciales en tu Dockerfile o comitearlas a un repositorio, conectas un bucket a una Container App y la plataforma entrega el endpoint y las claves como variables de entorno, opcionalmente bajo un prefijo para que múltiples buckets se mantengan distintos. Tu código lee nombres de env estándar en tiempo de ejecución, los secrets nunca aparecen en la imagen, y rotar una clave actualiza la conexion en lugar de forzar un rebuild. Esto mantiene intacta la separación twelve-factor entre configuración y código.
Backups y datos fríos
Object Storage es un hogar natural para dumps de base de datos, backups de aplicación, y exportaciones de archivo que quieres fuera del servidor principal pero aún poder restaurar rápido. Como el acceso es por clave y con alcance limitado, un job de backup puede tener una clave de flujo de trabajo de solo escritura separada de las claves que usa tu app en vivo. Scripteado a través de cdnctl en un job nocturno, las subidas y las limpiezas de retención corren desatendidas, y mantienes un límite de uso en el bucket para que los archivos no crezcan sin que nadie lo note.
Cómo configurarlo, paso a paso
Crea un bucket
En el panel abre Object Storage y elige Create Bucket. Dale un nombre seguro para DNS (letras minúsculas, números, y guiones) y decide si los objetos deben ser privados por defecto o de lectura pública. Privado es la elección correcta para backups y originales que firmarás o proxearas; lectura pública encaja con assets que planeas servir directamente a través del CDN.
Genera un par de access keys
Abre la pestaña Access Keys y genera una clave. Obtienes un access key ID y una secret key; la secret se muestra solo una vez, así que cópiala de inmediato a tu gestor de secrets. Limita la clave al bucket que necesita en lugar de reutilizar una clave maestra en todos los proyectos, para que una fuga pueda contenerse revocando un solo par.
Apunta un cliente S3 al endpoint
Configura cualquier SDK de S3 o el aws-cli con la URL de endpoint de cdn.com.tr mostrada en la página del bucket, direccionamiento path-style, y tu par de claves. Por ejemplo: aws --endpoint-url <endpoint> s3 cp ./poster.jpg s3://my-media/posters/. No se requiere un cliente a medida porque la API habla el protocolo S3.
Conecta el bucket a una container app
En una Container App elige Bind Object Storage y selecciona el bucket. La plataforma inyecta el endpoint, la region, el access key, y el secret como variables de entorno (con un prefijo opcional como ASSETS_) para que tu código los lea del entorno en lugar de hardcodear credenciales en la imagen o el repositorio.
Ponlo detrás del CDN
Conecta un dominio o usa la ruta edge del bucket para que los objetos se sirvan desde caché en ubicaciones edge. Define headers de caché al subir, y usa purge desde el panel o cdnctl cuando sobrescribas un archivo bajo la misma clave para que los espectadores reciban la nueva versión.
Define límites y automatiza con cdnctl
Aplica un límite de uso en el bucket para protegerte de un crecimiento descontrolado, y scriptea tareas rutinarias con cdnctl para que las subidas de backup y las limpiezas se ejecuten desde CI sin abrir el panel. Rota claves periódicamente desde la misma pestaña de Access Keys.
Escenarios de ejemplo
Un sitio de e-commerce almacena cada imagen de producto y subida original en un bucket, sirve las derivadas a través del CDN, y mantiene los contenedores de app sin estado para que los deploys nunca toquen los archivos de usuario.
Una container app escalada a varias réplicas escribe las subidas de usuario en un bucket, así que cada instancia lee los mismos archivos y un reinicio o evento de escalado nunca pierde datos.
Un job de cron o CI usa una clave con alcance limitado y cdnctl para subir dumps de base de datos comprimidos a un bucket privado cada noche, con un límite de uso y limpieza de retención manteniendo el costo predecible.
Un equipo que ya usa AWS S3 reapunta el endpoint y las claves de su SDK a cdn.com.tr, usa rclone para copiar los objetos, y lanza sin reescribir el código de storage.
Preguntas frecuentes
Qué herramientas y SDKs de S3 realmente funcionan contra el?
Los comunes: aws-cli, boto3, el AWS SDK for JavaScript, rclone, s3cmd, y los drivers de filesystem S3 en Laravel y Symfony. Define la URL de endpoint desde la página del bucket, usa direccionamiento path-style, y proporciona tu access key y secret. Las subidas multipart para objetos grandes son compatibles.
Puedo servir archivos del bucket directamente al público a través del CDN?
Si. Haz que el bucket o el objeto sean de lectura pública, o usa la ruta edge del bucket, y conecta un dominio. Los objetos entonces se cachean en ubicaciones edge para que las descargas repetidas se sirvan desde caché en lugar de golpear el storage cada vez.
Qué pasa cuando sobrescribo un archivo bajo la misma clave?
El storage toma el objeto nuevo de inmediato, pero el edge puede seguir reteniendo la versión anterior hasta que su caché expire. Ejecuta un purge para esa ruta desde el panel o con cdnctl justo después de la subida para que los espectadores reciban el archivo nuevo.
Si un access key se filtra, que hago?
Revoca ese par de claves desde la pestaña Access Keys y genera uno nuevo. Como deberías limitar el alcance de las claves por bucket o por app, revocar un par no interrumpe tus otros servicios. Actualiza la conexion o tu almacen de secrets con el nuevo secret.
Tengo que hardcodear credenciales en mi imagen de contenedor?
No, y no deberías. Conecta el bucket a la Container App y el endpoint, la region, el access key, y el secret llegan como variables de entorno, opcionalmente bajo un prefijo. Tu código los lee en tiempo de ejecución, así que los secrets se mantienen fuera de la imagen y del repositorio.
Cómo evito que el storage crezca sin límite?
Define un límite de uso en el bucket para que no se dispare sin ser notado, y para buckets de backup scriptea una limpieza de retención con cdnctl para que los dumps viejos se poden en un horario. El panel muestra el uso actual por bucket para que puedas rastrearlo.