Bottler (BETA)

Build StatusHex Version

Bottler is a collection of tools that aims to help you generate releases, ship them to your servers, install them there, and get them live on production.

What

Several tools that can be used separately:

You should have public key ssh access to all servers you intend to work with. Erlang runtime should be installed there too. Everything else, including Elixir itself, is included in the release.

By now it’s not able to deal with all the hot code swap bolts, screws and nuts. Someday will be.

Use

Add to your deps like this:

    {:bottler, " >= 0.4.0"}

Or if you want to take a walk on the wild side:

    {:bottler, github: "elpulgardelpanda/bottler"}

On your config:

    config :bottler, :params, [servers: [server1: [ip: "1.1.1.1"],
                                         server2: [ip: "1.1.1.2"]],
                               remote_user: "produser" ]

Then you can use the tasks like mix bottler.release. Take a look at the docs for each task with mix help <task>.

prod environment is used by default. Use like MIX_ENV=other_env mix bottler.taskname to force it to other_env.

You may also want to add <project>/rel and <project>/.bottler to your .gitignore if you don’t want every generated file, including release .tar.gz, get into your repo.

Release

Build a release file. Use like mix bottler.release.

Ship

Ship a release file to configured remote servers. Use like mix bottler.ship.

Install

Install a shipped file on configured remote servers. Use like mix bottler.install.

Restart

Touch tmp/restart on configured remote servers. That expects to have Harakiri or similar software reacting to that. Use like mix bottler.restart.

Deploy

Build a release file, ship it to remote servers, install it, and restart the app. No hot code swap for now.

Use like mix deploy.

Rollback

Simply move the current link to the previous release and restart to apply. It’s also possible to deploy a previous release, but this is quite faster.

Be careful because the previous release may be different on each server. It’s up to you to keep all your servers rollback-able (yeah).

Use like mix bottler.rollback.

Helper Scripts

This generates some helper scripts using project’s current config information, such as target servers. You can run this task repeatedly to force regeneration of these scripts to reflect config changes.

Generated scripts are located under <project>/.bottler/scripts (configurable via scripts_folder). It will also generate links to those scripts on a configurable folder to add them to your system PATH. The configuration param is into_path_folder. Its default value is ~/local/bin.

Use like mix bottler.helper_scripts.

The generated scripts’ list is short by now:

TODOs

Changelog

0.4.0

0.3.0

0.2.0