Saltar al contenido principal

Almacenamiento de archivos: local o S3

Los adjuntos, las imágenes insertadas, las fotos de perfil y las exportaciones de datos se guardan con uno de dos drivers. Los metadatos de los archivos están en la base de datos; los archivos están en disco o en un bucket. Ambos son necesarios para una copia de seguridad completa.

Volumen local (por defecto)​

STORAGE_DRIVER=local
STORAGE_LOCAL_DIR=/data/uploads

El compose.yml de ejemplo monta el volumen uploads en /data/uploads. Los archivos solo se sirven a través de la app, después de comprobar el acceso. No hay nada más que configurar.

Almacenamiento de objetos compatible con S3​

Sirve cualquier API de S3: AWS S3, Cloudflare R2, Hetzner Object Storage, Garage, SeaweedFS y otros. El almacenamiento debe admitir subidas multiparte y URL de descarga prefirmadas.

Para usarlo:

  1. Crea un bucket (privado; no hace falta acceso público).
  2. Crea credenciales que puedan leer, escribir y eliminar objetos en ese bucket, incluidas las subidas multiparte.
  3. Define las variables y reinicia con docker compose up -d:
STORAGE_DRIVER=s3
S3_ENDPOINT=https://s3.eu-central-1.amazonaws.com
S3_REGION=eu-central-1
S3_BUCKET=sol2flow-files
S3_ACCESS_KEY_ID=…
S3_SECRET_ACCESS_KEY=…
S3_FORCE_PATH_STYLE=false
ProveedorS3_ENDPOINTS3_REGIONS3_FORCE_PATH_STYLE
AWS S3vacío, o https://s3.<region>.amazonaws.comla región del bucketfalse
Cloudflare R2https://<account id>.r2.cloudflarestorage.comautotrue
Autoalojado (Garage, SeaweedFS, …)la dirección de la API de S3 del almacenamientosegún tu configuracióntrue

Las descargas van directamente al bucket​

Cuando alguien descarga un archivo, la app comprueba el acceso y luego redirige al navegador a un enlace firmado de corta duración en el bucket. Por eso la dirección de la API del bucket debe ser accesible desde los navegadores de tus usuarios. Si la app llega al almacenamiento con un nombre interno (por ejemplo http://garage:3900), define S3_PUBLIC_ENDPOINT con la dirección pública que usan los navegadores. No hace falta ninguna regla CORS.

Bloques de subida y S3​

Las subidas se envían en bloques (Admin → General → Subidas → Tamaño de bloque, 8 MB por defecto). S3 exige partes de al menos 5 MB (salvo la última), así que en S3 el tamaño de bloque no puede ser inferior a 5 MB. Un archivo puede tener como máximo 10.000 partes.

Limpiar subidas sin terminar​

sol2flow cancela cada día las subidas abandonadas. Como segunda red de seguridad, añade al bucket una regla de ciclo de vida que cancele las subidas multiparte incompletas al cabo de 2 o 3 días.

Cambiar de driver​

Puedes pasar de local a S3 (o al revés) en cualquier momento. Los archivos nuevos van al nuevo almacenamiento; los existentes se leen de donde se guardaron, siempre que ambos sigan configurados y accesibles (mantén el volumen montado y las variables S3_* definidas). Los archivos existentes no se mueven al nuevo almacenamiento.

Límites de subida​

El tamaño máximo de archivo y el tamaño de bloque se definen en Admin → General → Subidas (consulta Ajustes de la instancia). Ten en cuenta el límite de tamaño del proxy cuando aumentes el tamaño de bloque.