|
We started CallFS after yet another late-night “why did the uploads vanish?” incident. Our small team had stitched together rsync, a fragile NFS mount, and an S3 bucket—none of it observable, all of it waiting to bite us. So we wrote a single-process file service in Go that:
• Speaks the S3 API (so existing tooling works).
• Stores hot data on local disks for speed; cold data can sit in any S3-compatible bucket.
• Exposes Prometheus metrics and JSON logs by default, because “what happened?” shouldn’t be guesswork.
• Ships as a ~25 MB static binary—no external deps, MIT license. Today it’s stable for single-node or side-by-side deployments. Clustering is on the roadmap, replication will follow, but we wanted to share the code early and hear real-world pain points. If storage glue code ever ruined your weekend, we’d love feedback and PRs. |
Let's test that lol.
First, I looked at the docker compose file, seems like an easy way to run it right? Wrong, the docker compose file just runs minio, a real s3 compatible thing: https://github.com/ebogdum/callfs/blob/16e1096095c809f31aa93...
Why check in a docker-compose that only runs someone else's code, not your own project?
Okay, fine, let's run it normally:
Okay, fine, your example config doesn't work with an inscrutable error.But running it without a config flag works, so let's do that:
Let's see if it's really s3 compatible now: "404" is not the response AWS gives to a make bucket request.Reading the actual docs, this is _not_ s3 compatible, not even close. So much for "Speaks the S3 API".
Just use minio, or one of the other actually functioning things in this space.