Deploying on Gigalixir

What we'll need

The only thing we'll need for this guide is a working Phoenix application. For those of us who need a simple application to deploy, please follow the Up and Running guide.

Goals

Our main goal for this guide is to get a Phoenix application running on Gigalixir.

Steps

Let's separate this process into a few steps so we can keep track of where we are.

  • Initialize Git repository
  • Install the Gigalixir CLI
  • Sign up for Gigalixir
  • Create and set up Gigalixir application
  • Provision a database
  • Make our project ready for Gigalixir
  • Deploy time!
  • Useful Gigalixir commands

Initializing Git repository

If you haven't already, we'll need to commit our files git. We can do so by running the following commands in our project directory:

$ git init
$ git add .
$ git commit -m "Initial commit"

Installing the Gigalixir CLI

Follow the instructions here to install the command-line interface for your platform.

Signing up for Gigalixir

We can sign up for an account at gigalixir.com or with the CLI. Let's use the CLI.

$ gigalixir signup

Gigalixir’s free tier does not require a credit card and comes with 1 app instance and 1 PostgreSQL database for free, but please consider upgrading to a paid plan if you are running a production application.

Next, let's login

$ gigalixir login

And verify

$ gigalixir account

Creating and setting up our Gigalixir application

There are three different ways to deploy a Phoenix app on Gigalixir: with mix, with Elixir's releases, or with Distillery. In this guide, we'll be using Mix because it is the easiest to get up and running, but you won't be able to connect a remote observer or hot upgrade. For more information, see Mix vs Distillery vs Elixir Releases. If you want to deploy with another method, follow the Getting Started Guide.

Creating a Gigalixir application

Let's create a Gigalixir application

$ gigalixir create -n "your_app_name"

Note: the app name cannot be changed afterwards. A random name is used if you do not provide one.

Verify the app was created

$ gigalixir apps

Verify that a git remote was created

$ git remote -v

Specifying versions

The buildpacks we use default to Elixir, Erlang, and Node.js versions that are quite old and it's generally a good idea to run the same version in production as you do in development, so let's do that.

$ echo 'elixir_version=1.10.3' > elixir_buildpack.config
$ echo 'erlang_version=22.3' >> elixir_buildpack.config
$ echo 'node_version=12.16.3' > phoenix_static_buildpack.config

If you are using Phoenix v1.6, there is also a mix assets.deploy alias in your mix.exs that you want to invoke post compilation:

$ echo 'hook_post_compile="mix assets.deploy && rm -f _build/esbuild"' >> elixir_buildpack.config

Finally don't forget to commit:

$ git add elixir_buildpack.config phoenix_static_buildpack.config
$ git commit -m "Set Elixir, Erlang, and Node version"

Making our Project ready for Gigalixir

There's nothing we need to do to get our app running on Gigalixir, but for a production app, you probably want to enforce SSL. To do that, see Force SSL

You may also want to use SSL for your database connection. For that, uncomment the line ssl: true in your Repo config.

Provisioning a database

Let's provision a database for our app

$ gigalixir pg:create --free

Verify the database was created

$ gigalixir pg

Verify that a DATABASE_URL and POOL_SIZE were created

$ gigalixir config

Deploy Time!

Our project is now ready to be deployed on Gigalixir.

$ git push gigalixir

Check the status of your deploy and wait until the app is Healthy

$ gigalixir ps

Run migrations

$ gigalixir run mix ecto.migrate

Check your app logs

$ gigalixir logs

If everything looks good, let's take a look at your app running on Gigalixir

$ gigalixir open

Useful Gigalixir Commands

Open a remote console

$ gigalixir account:ssh_keys:add "$(cat ~/.ssh/id_rsa.pub)"
$ gigalixir ps:remote_console

To open a remote observer, see Remote Observer

To set up clustering, see Clustering Nodes

To hot upgrade, see Hot Upgrades

For custom domains, scaling, jobs and other features, see the Gigalixir Documentation

Troubleshooting

See Troubleshooting

Also, don't hesitate to email help@gigalixir.com or request an invitation and join the #gigalixir channel on Slack.