Gatling

Conveniently deploy a bunch of elixir phoenix apps

The main goal of Gatling is to make it very easy, cheap, and convenient to deploy Phoenix apps.

Instructions

Setting up the server

This has been tested on an Ubuntu 16.04 x64 server on Ec2 and Digital Ocean.

Install elixir, nginx, and the Gatling archive on your server

$ ssh server.adderss

Follow instructions here to install elixir

$ sudo apt-get install nginx
$ mix archive.install https://github.com/hashrocket/gatling/raw/master/releases/gatling-0.0.3.ez

Deploying your app

For a brand new project:

SSH into your server and run the following:

$ mix gatling.load {mix project name}

Ensure your elixir project can build a release with Exrm

Add a file to the root of your project named domains and list all domains that will point to this project

In your config/prod.exs change cache_static_manifest to and make sure your port configuration uses an environment variable called PORT(Gatling will set this for you automatically):

config :my_app, MyApp.Endpoint, [
  cache_static_manifest: "public/static/manifest.json",
  http: [port: {:system, "PORT"}],
]

Setup your git remote and push to your server:

$ git remote add production git@<address.to.server>:<project_name>.git`
$ git push production master

SSH back into your server, run your migrations, and ensure you have your secret.exs file(s) installed if needed Set your environment to prod by adding the following to /etc/environment

MIX_ENV=prod

Now for the initial deploy. Run $ mix gatling.deploy {project_name} and Gatling will do the following.

  • Create a exrm release and put all the parts in the right place
  • Find an open port, configure nginx to proxy to your app
  • Create an init.d file so your app will boot if/when your server restarts

Performing hot upgrades to your running application

Once your app is running do the following:

  • Increase the version number of your application. See here for an example to automatically increase the version number along with your commit.
  • Commit your new changes
  • git push path.to.remote:project

And that’s it! You’ll see the new version being deployed.