Feedback on my first time use

Hello,

I couldn’t find a direct email address so I’m posting my feedback here. I’ve seen fly.io feature on multiple sites on multiple occcasions and I today I figured I would give it a spin. My first idea was to transfer one of my hobby projects, a rather simple nodejs app to fly.io from Heroku.

My initial impression of the website and brand was that it looks really thought out and welcoming. Creating an account was simple (login with Github). I navigated my way to the docs where I found the first peculiarity. The “Speedrun” article didn’t state anything about nodejs in the listing of “launch knows about these kinds of apps” but instead opted to go through lesser known libraries/frames.

I ran flyctl launch at the root of my repo. I really liked the automatic region selection (based on my profile?).

After selecting a region the launcher failed and stated that I need to add a payment method. You could ask for it in the registration process to avoid a failing 1st deploy. I of course went ahead and added the credit card, but after adding it the UI page showed something along the lines of “no valid card”. Don’t know what happened but the message disappeared after a few moments, perhaps after going to the other section and adding my billing address. If this is the case, perhaps combine the two?

On the 2nd flyctl launch the deploy failed :

==> Validating app configuration
--> Validating app configuration done
Services
TCP 80/443 ⇢ 8080
Error failed building options: agent: failed to start


The agent failed to start with the following error log:



A copy of this log has been saved at

This seemed to be a first-run issue as a few minutes later I think the “builder” was birthed correctly in the background and the deploy command (3rd attempt) got further. The pulls proceeded and the command failed at determining the nodejs version:

[Heroku Node.js Engine Buildpack]

[Checking Node.js version]
Detected Node.js version range: >=18.0.0 <19.0.0-0

[Error: Node.js engine version error]
Couldn't resolve Node.js version: >=18.0.0 <19.0.0-0
ERROR: failed to build: exit status 43
Error executing lifecycle: failed with status code: 51

This is strange as the declarations for package.json engines and .nvmrc are 18. At this point I decided to delete the app and reach out to you. The app deletion failed from the UI :

image

A not-a-feelgood-moment was when I found this in the “speedrun” documentation:

If launch fails, don’t stress. This is a complicated process. Post the command output in the community forum and get help!

That’s certainly an unfortunate first experience :frowning:

I can’t comment on the internal Fly things - the billing etc. Sounds like you make some good points though.

What I can (maybe) help with is getting your NodeJS app up and running on Fly. I note you use the buildpack approach. That’s understandable, coming from Heroku. However I’ve always favoured the Dockerfile approach to build/deploy. Maybe because it’s the default, or I like the control :slight_smile: And I note some issues on the github for the NodeJS example.

I’m not an expert in Docker by any means however in my experience you can get pretty far by just adding a Dockerfile and appropriate .dockerignore to include/exclude files as desired.

If you take a look at my hello-world NodeJS app, it’s ready to run on Fly and has such example files in: GitHub - gregmsanderson/fly-hello-nodejs: A sample NodeJS app using a Dockerfile

The Dockerfile doesn’t even need to be as long as this one. I just used the node user that image comes with. But you could even skip that:

Your app may be more complicated and so you may need to use the buildpack approach. But if not, maybe take a look at adding a Dockerfile and .dockerignore instead. And you should be up and running in seconds/minutes :slight_smile:

The default launcher for Node apps uses the Heroku-20 stack, and only currently supports up to 17.x. You might be trying to run a newer version of Node than Heroku’s current buildpack release supports. This is also the same default stack currently used on Heroku.

If you need to run the latest 18.x Node, I would either wait for Heroku’s next release of their nodejs buildpack (heroku/buildpacks-nodejs) which should support the newer version, or follow @greg’s advice and roll your own Dockerfile for more direct control of your Node installation.