Elixir deployments on AWS
medium.com
medium.com
update: Ah, Didn't realize it was already released. How quickly things progress! Thanks for the update, folks.
Elixir deploys are currently functional, but we're working with the Elixir community to really fine-tune the process (including hot-code-reloads).
DigitalOcean has been supported for a few months now. AWS support was just released yesterday.
The $99 you pay to Nanobox is for the use of the Nanobox Dashboard to manage your application on your host (Nanobox Desktop is free).
Even down to the boxfile.
For what it's worth though, that doesn't mean you shouldn't use nginx. It's easier to configure, very fast, faster than Cowboy for static file serving and small enough that it's usually a good idea to setup nginx as a reverse proxy in front of cowboy. Just let it handle the static files and ssl.
Cowboy can do all of these things, but one of the many lessons of Elixir is that just because you can doesn't mean you should. :-)
At that point it just becomes a matter of "do I want to configure nginx or cowboy?"
If you have SSL at the load balancer and you're using a CDN for assets then it's less compelling. If you're looking to deploy a full encapsulated binary (server and all) then avoiding nginx makes sense.
That's basically it though.
I like Nginx very much, by the way - I was very happy when I switched from Apache to Nginx and I never looked back. Nginx is still my default choice for serving static files, as a frontend for Python (and similar) applications, as a (reverse) proxy, etc. However, I don't feel the need for it when working with Erlang or Elixir, exactly because of Cowboy.
Cowboy is not as fast, but it still is quite performant, even for static files handling. I don't have the numbers, and I can't seem to find a relevant comparison (there's one against Node.js and Tornadoweb here: http://www.ostinelli.net/a-comparison-between-misultin-mochi...) right now, unfortunately.
However, upgrading and management of Cowboy are either on the same level as Nginx or simpler. The upgrade process has two steps: change version in mixfile and re-fetch deps, done. I know that it's one step more than plain apt-get, but it's not that complicated, either.
As for management, Cowboy has an advantage that you can configure it in a Turing complete language (with clear semantics - recall if or allow/deny semantics in Nginx config), not only by initial configuration but also by writing handlers, where you can do arbitrary processing. It's also runtime configurable and hot-swappable (you can reload Nginx config, you can't (AFAIK) replace the currently running nginx with newer version "in place", you need to restart it).
On the other hand, Cowboy has much less built-in functionalities, which is why I said it's not good for example for being a plain proxy - you'd need to write your own handler module for that, while in Nginx it's a one proxy_pass directive and it will be faster to boot. However, when you have an Elixir app and you want to just serve some static assets in addition to the app itself I think it's completely fine to rely on Cowboy for this.
Of course, the advantage of Turing-complete language disappears if you use OpenResty. It allows you to write your app inside Nginx in Lua. I used it in a few cases and it was quite pleasant experience, however, then the Elixir backend becomes unnecessary...
So, to summarize: I think that you don't need Nginx if you use Erlang/Elixir for your backend and that you gain almost nothing if you do include it.
Do heroku's custom buildpacks not allow you to prevent restarting the dyno?
On deploy, the containers are all being replaced.