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.