The Future of

Deployment

in

Elixir

Deployment is hard,

 

we have unique environments,

we have unique requirements,

we have more important things to do

 

Our tools are supposed to help tame this chaos, not feed it

  • No consensus
  • Difficult tooling
  • Lack of good documentation
  • Lack of documented experiences

Good deployments,

 

are highly automated,
are reproducible,
require minimal or no downtime,
are easy to troubleshoot,
can be rolled back as easily as they are deployed,
 
And in order to for us to achieve these goals, we must
learn to master

 

Releases.

Self-contained

releases contain everything needed to run themselves

 

Reproducible

releases are artifacts you can store and redeploy as needed

Purpose-built

releases were designed to solve this problem

 

Consistent

deployment to different environments is the same

But the tooling is awful

...and I should know

 

I wrote one of them

So I started from scratch and wrote Distillery,

 

pure Elixir,

small core, a la Plug

extremely configurable/extendable

first-class support for umbrella projects

emphasis on better UX

 

but there is still work to be done...

Windows support

Better runtime configuration tooling

Prevent errors

Native dependencies (NIFs)

Releasing to a cluster

but most importantly,

we need to make releases easy to understand

 

to put it simply: make it easy,

or it's easy to get wrong

 

Documentation

guides, tutorials, practical experiences

Improve our tools

intuitive defaults

guide the user instead of expecting direction

informative warnings/errors, a la Elm

prevent invalid configuration

Build on existing tools

Distillery builds on systools, Mix

Edeliver builds on Distillery

Tools which work together benefit from each other

Some practical experiences

Questions?

elixirconf2016

By Paul Schoenfelder

elixirconf2016

My presentation on deployment in Elixir for ElixirConf 2016

  • 1,599