bitwalker

bitwalker

Leader

General discussions and wiki for Elixir deployment tools - feel free to edit in any useful info.

Tools

Relx

The primary tool for building releases of Erlang applications. Can work with Elixir applications as well with some additional effort. Does not auto-generate appups for hot upgrades/downgrades. Natively supported in erlang.mk, rebar2, and rebar3.

Elixir Release Manager (exrm)

Now deprecated in favor of Distillery, this has been the predominant tool for building releases of Elixir applications. It is Mix-only, auto-generates hot upgrades/downgrades, and ultimately is an automation wrapper around Relx.

Distillery

The latest iteration of release tooling for Elixir applications, it is written entirely in Elixir, and is tightly integrated with Mix, allowing it to further simplify the process of building releases. It is a replacement for exrm, and while similar, it’s ergonomics are significantly better, is more extensible, and is considerably faster than exrm.

Edeliver

Based on Deliver, Edeliver builds on Distillery/Exrm/Relx’s release generation and offers much more complete automation of the entire deployment process, from building releases, generating upgrades, deploying to one or more hosts, and more.

Gatling

Similar to Edeliver. Supports Distillery.

Bootleg

Simple deployment and server automation for Elixir. Bootleg is a simple set of commands that attempt to simplify building and deploying elixir applications. The goal of the project is to provide an extensible framework that can support many different deploy scenarios with one common set of commands.

Blog Posts

Talks

Showing Posts 1 to 10

AstonJ

AstonJ

What about using tools (that are popular in other languages) that we may already be familiar with, such as Capistrano or Mina? I’m interested in hearing what others are using…

Linuus

Linuus

I’m also interested in edeliver. Are there any more in-depth writeups about it somewhere? The Platafromatec one is quite scarce. I’m not 100% sure how I want to handle ENV variables.

In another project I worked on we did it like this:

  • Put production specific variables as ENV variables on our CI system (Travis)
  • If test fails, do nothing.
  • If test passes:
    • run mix release and so on with MIX_ENV=staging (staging.exs had mostly hard coded configs)
    • run mix release and so on with MIX_ENV=prod (prod.exs used System.get_env etc to get the ENV vars)
    • Upload both prod and staging releases to S3

When deploying we used capistrano and when running cap staging deploy it looked for a staging release built for the current commit, if it found one it uploaded it to the server and started it. If there were no release it had probably failed on our CI so the script printed an error message and bailed.

The nice thing about this was that the releases was built with the correct environment configs directly on our CI system (no need to worry about the ENV vars on the hosts). The downside would be that we didn’t deploy the EXACT same release on staging and prod.

Handling secrets is always an annoyance…

With edeliver you can link different configs (eg. sys.config) but then you need to install this on your servers somehow. Also, each developer needs the config if he/she needs to add a config and deploy it.

How do you manage that?

gregvaughn

gregvaughn

I enjoyed this talk at EmpEx about edeliver https://www.youtube.com/watch?v=H686MDn4Lo8

Linuus

Linuus

Seems like a great talk! Thanks!

uranther

uranther

I added How We Deploy Elixir Apps which was linked from Elixir Radar.

ckhrysze

ckhrysze

Not strictly deployment per se, but exrm seems relevant here, but thus far not mentioned directly (I haven’t watched the linked talk yet).

I’m working on a ci pipeline for a new app now, and wanting a way to save and share what I’ve learned is what brought me to this thread. I’ll edit the lead post with a few of my findings, but wanted to share a bit of my process.

I have recently history with python and boto3 as well as aws, so thats the platform I’m targeting. My first pass has been fairly simple scripts using the python fabric tool. I’d like to make an elixir based process via mix tasks at some point, but haven’t had time to see what is already out there nor to write my own.

OvermindDL1

OvermindDL1

Oh that looks fascinating, and it looks like it should fix the couple of annoyances that exrm had (thanks to relx). ‘edeliver’ has major issues for us here (since we use both windows and linux and its windows support was… well, crap…) so we’ve ignored it.

Morganjackson

Morganjackson

swennemans

swennemans

A few links I came across:
Serving Phoenix and Continuous Deployment

How I Built My Own Heroku for Phoenix Apps: Part 1

The second link introduces a deplyment tool, called Gatling

Where Next? Top

Trending in Wikis Top

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews