4 ms·
This is such a fantastic benefit of Golang: spin up a VPS, apply some sensible defaults, cross compile then run your binary. Compare this to deploying python,
by iamcalledrob 3y ago
This is such a fantastic benefit of Golang: spin up a VPS, apply some sensible defaults, cross compile then run your binary.
Compare this to deploying python, node or php... Needless complexity.
If only running (and keeping running) a database server could be this straightforward!
- binarymax 3y agoNowadays you can bundle a node app as a single binary file. It’s an underused feature, maybe it will catch on.
- enva2712 3y agoI saw that deno did this but cool to see node picked it up too. I wish there was an option to run turbofan at build to generate the instructions rather than shipping the entire engine, but i guess that would require static deps and no eval, which can’t really be statically checked with certainty
- binarymax 3y agoThe engine is actually pretty small. Something like 50-100MB if memory serves (when I was using pkg)
- dgellow 3y agoCould you share how that can be done? I spent some time this year trying to pack a node tool into a single fat binary for a specific use case where we wanted a history of versioned executables - i.e a build job that needs to run specific versions of the packed tool in a specific order determined by external factors. I tried Vercel pkg, Vercel ncc, nexe, and a few other tools I can’t remember right now. They all had issues with node v20, some dependencies, or seemed to not be maintained anymore. I ended up relying on esbuild as a compromise to get a fat script containing all sources and dependencies, tarballed with some static files we rely upon we can at least get versioned, reproducible runs (modulo the node env). Still not perfect, a single binary would be preferable
- binarymax 3y agoI’ve used pkg with success for some small apps - curious to know why it didn’t work for you. Now you can use this native feature (not totally stable yet though) which I’ve been meaning to try https://nodejs.org/api/single-executable-applications.html https://nodejs.org/api/single-executable-applications.html
- dgellow 3y agoI don't remember the details, and cannot find my notes on vercel/pkg. But looking at https://github.com/vercel/pkg https://github.com/vercel/pkg right now I see the project has been deprecated in favour of single-executable-applications
- binarymax 3y agoBummer that they deprecated/archived it before the native feature was stable.
- quietbritishjim 3y agoFor Python, you could make a proper deployment binary using Nuitka (in standalone mode – avoid onefile mode for this). I'm not pretending it's as easy as building a Go executable: you may have to do some manual hacking for more unusual packages, and I don't think you can cross compile. I think a key element you're getting at is that Go executables have very few dependencies on OS packages, but with Python you only need the packages used for manylinux [2], which is not too onerous (although good luck finding that list if someone doesn't link it for you in a HN comment...). [1] https://nuitka.net/ https://nuitka.net/ [2] https://peps.python.org/pep-0599/#the-manylinux2014-policy https://peps.python.org/pep-0599/#the-manylinux2014-policy
- sedatk 3y agoYou can build native and self-contained binaries in C# too.
- zilti 3y agoJust pack up your whatever-else as an AppImage. Job done.
- drowsspa 3y agoHow does it deal with the undocumented system dependencies Python libraries often have?
- neonsunset 3y agoHow often the deployment model “copy a single binary to VPS via SSH and run it” is even used nowadays? And with that still, you’d be much better served by using a more expressive and less painful to use language like C#. Especially if the type of use is personal.
- rnewme 3y agoYou can do the same with python tho, from nuitka compiler to LinkedIn shiv or twitters pex (that follow pip 441).