If I was to launch a SAAS product with a self-host option, what would be the best way to distribute it to customers?<p>Examples of things I'm concerned about are ease of installation, ease of deploying updates, ease of scaling for customers...
If your web app is not too complex.<p>I really like to build self contained binary in Go.<p>All the code compile to a single binary file without any external dependencies. I put all my static files (html, css, js, imgs) inside this binary file using "bindata". If I really need a database, I'll use sqlite as a default (this could be configured to something else).<p>For updates, if you do not compress the binary file (upx), you can make a binary patch with "bsdiff"/"bspatch" (<a href="http://www.daemonology.net/bsdiff/" rel="nofollow">http://www.daemonology.net/bsdiff/</a>).
There is a Go library to do it dynamically <a href="https://github.com/kr/binarydist" rel="nofollow">https://github.com/kr/binarydist</a>. So your app could be 50Mb, but updating it would be as simple as downloading a 400Kb patch and applying it (software can do it).<p>For schema migration, I like <a href="https://github.com/rubenv/sql-migrate" rel="nofollow">https://github.com/rubenv/sql-migrate</a> which can be used as a library.
Therefore, the migration can be part of the binary patch in an update.<p>So in the end, you only distribute a native executable file for whatever platform your customer is using.
I asked a similar question on two occasions:<p><a href="https://news.ycombinator.com/item?id=16250959" rel="nofollow">https://news.ycombinator.com/item?id=16250959</a><p><a href="https://news.ycombinator.com/item?id=14781420" rel="nofollow">https://news.ycombinator.com/item?id=14781420</a><p>The short answer is that no, there is no simple way to get users to self-host your software. Perhaps developers prefer it that way? It certainly helps keep the SaaS model going.<p>Remember that what a developer deems 'simple' matches no known definition of the word amongst ordinary users.
Take a look at how Koken handles their install routine. I found it very clean. You place a file in the root of your server, then load this in a browser. It checks permissions and technical requirements, then proceeds with the full download and installation if everything checks-out.<p><a href="http://koken.me/" rel="nofollow">http://koken.me/</a><p>Updates are handled similarly -- the software alerts the admin to an available update within the admin console, and you can choose when to download and apply the patch.
<a href="https://www.packer.io/" rel="nofollow">https://www.packer.io/</a> - allows you to create images for a lot of platforms.
<a href="https://devcenter.heroku.com/articles/heroku-button" rel="nofollow">https://devcenter.heroku.com/articles/heroku-button</a> is pretty good if you can "Heroku-ize" the product. Easy installation, updates, scaling for sure.
use Amazon's AWS, Google Cloud, Microsoft Azure or DigitalOcean
you can run one or more instance and pay per use. it is easy to scale if you need.<p>other option is some cheep VPS hosting (~50$/y) but later you maybe need to migrate everything.