I’m been trying out distillery, edeliver, bootleg, and am currently looking at gigalixir… for simple client work like (mostly) static sites, semi-complex apps, and my own multi-tenant app in development… and I’m wondering what you would recommend.
My preference is to avoid containers like docker, if possible (gigalixir being the exception), but I’m open to being persuaded to use them.
This is also to answer my curiosity about what a startup would choose today for hosting.
You will (or should) be using Distillery (eg. proper releases), at least under the covers, for almost any deployment flow… Unless you’re deploying to a Heroku-like platform, or if you use Docker I guess.
As for the specifics, I think that comes down to what you’re experienced with, and what scale you work at.
Distillery on its own, along with some scripting, will do nicely for most scenarios if you don’t want extra dependencies. I’ve also used Edeliver, which was convenient in many ways, and Bootleg seems similar.
If I had a few sites to manage though, with databases etc, I’d go for Puppet to manage the infrastructure, and probably build .deb packages with Distillery that could then be deployed to an internal repo, to be upgraded automatically once Puppet runs again on the application server.
Naturally something like Chef, Ansible or SaltStack would work equally well; Puppet is just what I know best for this type of scenario.
In the end, when starting out at least, just pick something that seems easy to get started with, learn it, and use it.
EDIT: I’m not representing a startup, but whether you’re running a startup or not shouldn’t really have much to do with your deployment tools… Rather it depends on what skill sets are available, and the scale of your environment.
I would have to disagree with @AstonJ on that.
Using dedicated servers or a VPS brings a whole host of problems and responsibilites that you might not want to deal with. While spinning up an Ubuntu VPS and then slapping on a Docker image on DigitalOcean might be easy, securing the system and keeping it up to date is no simple task. Especially if you’re working on your own or with a small team, the money you save from using a VPS or dedicated server over a PaaS is probably not worth your time.
Most Linux distros are pretty secure by default there are also additional things you can do by following online guides; disable root login, passwordless login, change ssh port, install additional security like fail2ban (if you want to) etc
Is it more work? Perhaps… but I think it’s worth it. For me the added complexities (and overhead) of things like Docker are off-putting (the only time I have ever lost data in over 10 years of hosting sites was with a Docker site).
The funny thing is, years ago the most expensive ‘best’ options were in fact dedicated servers or co-locating your own servers in a datacenter
I’ve been using Gigalixir and I recommend it, if only because it installs and configures your SSL cert for you using Let’s Encrypt, which saves me a few hours for a deploy.
The founder, who sometimes pokes his head around here, has also been super helpful with any problems I run into.
Gigalixir is also not a container – it uses Distillery under the hood, which means you get hot code upgrades, while exposing a Heroku like api.
However, unlike Heroku, it doesn’t restart your app and wipe your disk storage every 24 hours, which is better for long running processes and persisting local state to disk with ets/dts, which has saved me a Redis deployment / S3 solution.
We use Heroku. Our goals are to minimise any time spent on deployment/infrastructure and Heroku satisfies this 100%.
Buildpacks for automatically building phoenix/elixir apps
Easily setup with CI tools (e.g. CircleCI) and GitHub
Review apps make testing deployed versions of the code super quick
Let’s Encrypt built-in
I think the only downside of Heroku is that it becomes expensive at scale, but that’s not a problem most startups have to worry about for a while. Yes, you can get a cheaper dedicated machine, but if you spend a few extra setting up the above you’ve already cost yourself more than the difference in price.
Take a look at Nanobox.io, I’ve used them for various projects and they are amazing. They have Slack setup with different rooms per language, staff is always there to help. I like that I can use any number of cloud providers and are not stuck on AWS.
Aside from features, the biggest difference you’ll notice during setup is that Gigalixir uses Distillery while Heroku uses Mix. This means a little extra setup, but then you get remote console, remote observer, hot upgrades, clustering, smaller slug sizes which mean faster deploys, and all the other benefits of distillery.
eDeliver is more suited for people familiar with devops and don’t mind spending time managing their own infrastructure and dealing with fires. You’ll also have to set up your own monitoring, firewalls, load balancing, TLS encryption, log aggregation, etc. It is cheaper though so makes sense if you have a lot of machines.