I'm curious to know what people here use to deploy, and where are you hosting your apps.
Personally I'm looking for an experience as similar as possible to Heroku, any recommendations?
[0] https://digitalocean.uservoice.com/forums/136585-digitalocea...
Contained developer environments, simple command line deploys to VPS, and a free tier that can handle most hobbyist application needs.
I deploy Rails & Elixir / Phoenix apps with Nanobox
Deployment is done via SFTP by pressing the publish button in Visual Studio. This will deploy to the inactive server. I then manually trigger tests on GhostInspector (this could be automated via API) to make sure I didn't break anything. Then I run a custom script to make the load balancer redirect traffic to the upgraded server.
Solo founder, small bootstrapped business generating 50k/month with 1000 paying customers. Hosting costs are under $500. I could double the number of clients without needing to upgrade the hardware. I looked into moving to AWS or Azure, but can't justify paying 4x more for the same performance.
I run a kind of similar setup sans Visual Studio, so I'm very interested in understanding your setup a little better.
kubectl apply -f for simple deployments, Helm for more complex ones.
But these days I run simple docker in digital ocean and Azure with deployments managed via my CI.
[1] - http://dokku.viewdocs.io/dokku/
[2] - https://www.digitalocean.com/products/one-click-apps/dokku/
But some services provide a good subset of heroku functionality on your own servers for a flat fee which is where I think the sweet spot is now.
App Services are cheap and easy to manage, if you write efficient code they have plenty of horsepower for medium sized websites.
AWS's Elastic Beanstalk doesn't have any UX to speak of (just a few options to fiddle and some weak logging support). It's a very raw service, much like the rest of AWS (rock-solid infrastructure to bring-your-own stuff). They take care of infrastructure but developer pleasantries are entirely up to you.
App Engine is significantly better on the UX front - you get error reporting, metrics, logging, etc all in a single cohesive web app. In my experience I hit some hard to debug / resolve quirks, but that is very much a ymmv situation. It can be tricky to figure out how to configure the right pieces / permissions in their new app engine variant (docker-based). I wouldn't use the classic variant at this point, it's pretty heavy on the vendor lock-in front. It's great if you need the specific capability of classic app engine but that's most likely not what you need.
If you're using Heroku's hosted postgres, know that GCloud's postgres support is still "beta". AWS RDS on the other hand has very good postgres support.
In both cases, deploys aren't just a git push, but use a custom CLI (`eb deploy` and `gcloud something something`). They're also both pretty typically tough to get to the first successful deploy with - for example Elastic Beanstalk will spend quite a while attempting to recover from deployment errors, and if you've never deployed a successful version it's very bad at that, and it also blocks deployments while it attempts to recover. So you end up stuck while it attempts to recover from a problem it will never recover from for a bit (this has been a problem for literally every beanstalk service I've ever deployed, heh).
You can also go something like the hosted Kubernetes route. Currently GCloud is king here, but naturally that's a command-line only UX unless you deploy your own kubernetes UI service (unfamiliar with options there)
Unfamiliar with Azure's offerings.
It's not fancy like dokku (or even Docker Compose), but it's composed of very minor pieces that are easy to debug and extend.
Not knowing if Docker Compose has executed successfully, and if I'm on the newest image or not, grew to be an extra todo in my checklist when debugging my applications.
I am working on turning this into an app that others can use too. It's still a ways away from real production use, but I am close to a closed beta. If you're interested, check it out:
[1]: https://flynn.io
Lately we've been moving small services to cloud functions in order to shut down Heroku dynos and it's been great so far.
We're in the middle of piloting a switch to Nomad (https://www.hashicorp.com/products/nomad), replacing much of the custom deployment system with it, though still running on bare-metal servers. It's an absolutely fabulous bit of software that really hits the use-cases for an organisation of our size, so I'm excited to see how that works out.
For side-projects where things like HA aren't much of a concern, I've settled on some minimal shell scripts to deploy tarballs over SSH. It's actually pretty neat – CI builds a project, and runs a small script to copy the results to a server and restart the services. It's always worth considering the simple solutions if you don't need the more advanced features!
Our team built this entire process ~2 years ago, when we started using k8s. We would probably use some off-the-shelf parts today, but practically nothing existed back then.
[0] https://appuio.ch/en/public.html [1] https://www.openshift.org/ [2] https://community.appuio.ch/
Things like dokku, etc are great at providing the UX and generally really solid.
However, much of the benefit of Heroku is that they handle some/much of the underlying sysadmin tasks you'd otherwise need to worry about. It's easy to discount that as it's mostly invisible until there's a serious problem.
A middle ground between putting dokku onto a VPS is perhaps Amazon's Elastic Beanstalk service combined with Amazon RDS which provides you a big chunk of the functionality (albeit in a less slick wrapper).
Then I realized Heroku really isn't that expensive anymore, and I dropped it all and started building my projects on Heroku again.
In general all my deploys are done using Travis CI.
Personal projects: Github pages (mostly react apps, e.g. [1, 2]), GAE (python backends, e.g. [1]), Google Spreadsheet (data backend, e.g. [2]), Firebase (e.g., [3]).
- [0] https://www.robinwieruch.de/deploy-applications-digital-ocea...
We were big Heroku users as well, so carried over a number of Heroku patterns. For example, configuring everything with ENV vars, lightweight load balancing, grouping apps into several deployable targets, etc.
It’s certainly not better than Heroku in most ways, though there was no plausible way for us to continue running our workload on Heroku.
(Edited: typo)
I don't entirely understand your point though; is our level of abstraction too low? With Heroku (preference of the OP) all of this, the containerization, the orchestration, the deploy tool, is abstracted away. Is that what you'd prefer?
haproxy in front loadbalancing and doing routing
tinc mesh for a ghetto private cloud with dirt cheap boxes
consul k/v store used for runtime configuration
For more heavier stuff I use cloudformation and to deploy docker images to ECS
The AWS-Stuff was a steep learning curve in the last months but worth it.
For a quick demo, on a DMZ raspberry pi.