I'm currently still in the free-tier. But I'd be perfectly happy to pay for the product. It's super easy to use, and the happy path of the cli tool is well designed.
The various configs for the fly.toml file could be better documented, as could some of the more advanced cli commands like sftp and ssh into your machine.
I think fly really shines when you design your app intending to run it close to users. If you just want to host an app, there are other hosting products. But fly is particularly good at hosting and scaling into different regions and presenting those regions as a single app. Trying to do the same on AWS is messy.
It's also nice to see them investing in the database problems you get when trying to run at the edge. (Like the db being in one region, which defeats some of the value of running close to your users).
Very difficult to set up basic domains for your apps. An attitude of "you solve it." It's been two weeks and nobody from their support has bothered to help me with this fundamental setting. https://community.fly.io/t/for-your-phoenix-app-how-did-you-... - other threads are similar, with some even saying "use cloudflare"?
_Too_ locked down. You can't just connect to your database from the internet. Should be an option, I don't really care about the security implications of it. Let me choose.
---
I've since moved my app to Render.com and it's been really great for me as an indie startup founder. I focus on my app and not the plumbing. Fly felt too much like plumbing.
It’s almost as if they were intentionally avoiding writing a simple “how to set up your domain with Fly” tutorial on the docs.
And I say this as a somewhat happy Fly customer! I had some gripes with it, and now I don’t — they improve the service every month.
I don’t understand why they don’t try to make this amazing tech more accessible.
I wrote about the experience here: https://onlineornot.com/on-moving-million-uptime-checks-onto...
Btw congrats on the launch of onlineornot.
Apart from RDS, and a few ad-hoc serverless tasks, yep.
Also fly.toml seems to be designed for a single image/app from what i remember. What I mean is, I can't configure redis, background job worker, web worker using a single fly.toml
I wish they would spend more time making fly.toml more like render's monorepo support - https://render.com/docs/monorepo-support
Streaming SQLite is cool but as it stands for all my apps deploying on fly.io is very difficult.
fly.toml is for a single app, but there's nothing stopping you from having multiple fly.toml files in a repo.
> curl -L https://fly.io/install.sh | sh
I suppose perhaps you could read all code you use before installing it, but I expect the number of people who do that rounds down to zero.
If this was a standard package, like the ones you get from apt, brew, npm, maven, pypy, or even a versioned binary, you have the option of verifying the checksum, pinning the version, analyze the package with a SAST thing like snyk, or whatever you are using, etc.
Esp considering today's popularity of such attacks, more and more companies/teams are becoming more security-minded. Thus increases the desire for an installation process to be something more than just running a sh with full privileges.
The product is far less mature than Heroku and the pricing is confusing. For example, it took us 3 days to figure out how to run Redis properly (their integrated UpStash Redis has quite a few bugs. We ended up going with self-host Redis on fly.io). Besides, we have no idea on how the pricing would work when fly.io shows our app as one app but there are actually 3 processes running (web, Sidekiq and Redis).
The good part is it's seems much cheaper. And because it has more edge nodes to choose from, it's also much faster in our case.
On Fly, you provision virtual machines. That's a "Fly app". That's what you pay for.
What you do inside that VM is up to you. Fly doesn't really care if you've made a single dockerfile that starts up a web server, sidekiq, and redis - they'll just charge you for the virtual machine it's running on.
The main advantage is, that I don't have to worry about hosting and the simplicity of deploying Phoenix applications (I don't know how well Fly.io works with other stacks).
The CLI is dead simple, and as with any other 3rd party services: if it works, you're in heaven - if doesn't you're in hell.
The reason I went with Fly.io was the following:
- It's pretty cheap (e.g. <5$ is free), I have been using it for a few months, and just hit the 5$ limit
- It's easy to migrate to a different service, if Fly gets expensive (again for my elixir / phoenix projects)
- The community support is great!
Some improvements Fly.io could make:
- I had an issue with blocked ports on my side and ended up wasting half a day to figure out why certain commands worked and others didn't. Again this is on my side. The error message could be better than saying: "Error tunnel unavailable: failed probing "personal": context deadline exceeded"
- Once in a while the something is down ([1])
- The billing is not very clear (e.g. split by projects could be useful, then instead getting an overall usage)
Not a good impression of the service. I think some of their engineers are excellent and will check back again in a few years to see if it is stable.
Also when building and deploying an image, some non-obvious and undocumented changes are made. My app generates version information based on the git repository state. The build process deletes (or ignores, I don't know, never got an answer to my issue) the fly.toml file in the docker build context, which resulted in uncommitted changes and a "dirty" repository when building the app. My dirty workaround is to `git checkout fly.toml` in my dockerfile. It works but it isn't pretty...
For new projects, I default to SQLite with Litestream. The only non-fly.io component I need is an S3 bucket.
The DX of the CLI and the config file are quiet good. Once an app is live with proper health checks, I find it quiet hard to take the app down by accident. They stage secret changes for instance.
I find the pricing to be straightforward and fair.
A week ago there was an issue with certificates, which they fixed in a few hours.
Fly is great in a lot of ways, magic even, but there are blind spots and you have to learn new methods of keeping everything "in sync".
A lot of my projects are FastAPI/SQLite in a Docker container and Fly seems to complement this well.
Load balancing, geo-replication, canary deployments, and Postgres instances/replicas "just work" out of the box.
Highly recommended!
I found out about fly.io years ago but never used it. I think it looks great, but it could be more simple.