The Perfect Object Storage

Me: Will this stuff be hosted in AWS?

$Customer: No, we are going to host on infrastructure of $PopularTLCOperator!

$PopularTLCOperator: Yes, come to us!

Me: Fine. Do you have an Object Storage?

$PopularTLCOperator: Errr... Nope...

In this way I started my review of existing solutions for DIY files storage and management. And of course I began looking for something interoperable with AWS S3 API, the de-facto standard for that kind of activities, supported by the Flysystem abstraction layer included in Laravel.

First option: Swift, the object storage included in OpenStack. Excluded after ten minutes spent trying to figure out where to start from the documentation.

Second option: Ceph, a popular distributed storage with many interfaces including the S3 one. Excluded after an evening spent in installing it, configuring it, and observing random behaviours after a mere restart.

Third option: Minio, a bare minimal application permitting to access a given local folder via S3 API. Essential. Limited. But easy to run. As I began to try it in combination with my Laravel application, I obtained only a list of "Bucket not found" errors despite the local web interface displayed it correctly.

A step before desperation, a scrolled up the Flysystem configuration file. And I've been enlighted by the section labelled "FTP". I installed the good old ProFTPD on the storage server, quickly configured it, reconfigured the client side, tried it, and worked as expected.

Of course "FTP server" != "object storage", but since all upload operations are mediated by my backend, and the few external requests can be catched by a minimal web application looking for cookies and fetching from the filesystem, it appears to be the best option.

Quick, dirty, and runnable even on my usual hell schedule.