diff --git a/docs/explanation/architecture.md b/docs/explanation/architecture.md index 3009882..dcccacf 100644 --- a/docs/explanation/architecture.md +++ b/docs/explanation/architecture.md @@ -33,8 +33,8 @@ Equalify Reflow is a monolithic Python application with background task queuing ### Infrastructure - **Redis 5.0+** - Task queues, job state, rate limiting, distributed locks -- **AWS S3** - Current default for object storage (PDFs, pipeline artefacts, results). Pluggable: the provider-abstraction roadmap (in progress) will add a local filesystem option for simpler deployments. -- **Floci** - Lightweight (~72 MB, ~26 ms startup, MIT licensed) local AWS emulator used by the default dev stack. Replaces LocalStack — same wire protocol, same port (4566). Once the filesystem storage provider lands, Floci becomes opt-in rather than required. +- **S3-compatible object storage** - PDFs, pipeline artefacts, and results live in two buckets (temp and results). The storage layer uses boto3 against the S3 API — *not* an AWS-only integration. Any service that speaks the S3 protocol works in production: AWS S3, [MinIO](https://min.io), [Garage](https://garagehq.deuxfleurs.fr/), [Cloudflare R2](https://developers.cloudflare.com/r2/), Backblaze B2, Wasabi, or [Floci](https://github.com/floci-io/floci). Point `AWS_ENDPOINT_URL_S3` at the chosen service and set `S3_PUBLIC_URL` to the public hostname used in client-facing presigned links. See [`docs/how-to/self-host.md`](../how-to/self-host.md) for the full setup. +- **Floci** - Lightweight (~72 MB, ~26 ms startup, MIT licensed) local S3-compatible emulator used by the default dev stack. Replaces LocalStack — same wire protocol, same port (4566). Production deployments swap it for any of the S3-compatible options listed above. - **Docker & Docker Compose** - Containerized services ### Monitoring & Observability diff --git a/src/services/storage_service.py b/src/services/storage_service.py index fafc9ad..c9c3a91 100644 --- a/src/services/storage_service.py +++ b/src/services/storage_service.py @@ -1,4 +1,14 @@ -"""Storage service for S3 operations.""" +"""Object-storage service. + +Talks to any service that implements the S3 API via boto3. AWS S3 is one +option; production deployments also run against MinIO, Garage, Cloudflare +R2, Backblaze B2, Wasabi, etc. Local dev uses Floci. The choice is +controlled by ``AWS_ENDPOINT_URL_S3`` (boto3 reads it directly); this +module is endpoint-agnostic. + +The class and surrounding comments still say "S3" because that is the +name of the protocol the API speaks, not a claim that AWS is required. +""" import asyncio import json