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.adderssFollow 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.ezDeploying 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
exrmrelease and put all the parts in the right place - Find an open port, configure nginx to proxy to your app
-
Create an
init.dfile 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/server/project
And that's it! You'll see the new version being deployed.