How to Install the Phoenix Framework on CentOS 7

Updated on May 6, 2016
How to Install the Phoenix Framework on CentOS 7 header image

Phoenix is an emerging Elixir-based web development framework. It is designed to provide high development productivity, rich features, and powerful runtime performance.

This tutorial will show you how to install Phoenix on a Vultr CentOS 7 server instance for development purposes.

Prerequisites

Before proceeding, I assume that you have:

  • Deployed a new Vultr CentOS 7 server instance.
  • Logged into this CentOS 7 system as a non-root sudo user.

Step 1: Update the system

sudo yum install epel-release
sudo yum update
sudo reboot

Step 2: Install Erlang

First of all, you need to install Erlang on your system. Phoenix is a framework written in the Elixir programming language, and any Elixir-based application has to be compiled to Erlang byte code before it can be executed.

cd ~
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
sudo yum install erlang

You can confirm your installation of Erlang with:

erl

This command will take you into the Erlang shell. When starting the Erlang shell, you will see the following output.

Erlang/OTP 18 [erts-7.3] [source-d2a6d81] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3  (abort with ^G)
1>

Press Ctrl+C twice to exit the Erlang shell.

Step 3: Install Elixir

Because the version of Elixir in the CentOS 7 system YUM repository is rather dated, you should use the official pre-compiled Elixir archive to install the latest version of Elixir.

Download and unzip the latest Elixir precompiled archive:

cd /usr/bin
sudo mkdir elixir
cd /usr/bin/elixir
sudo wget https://github.com/elixir-lang/elixir/releases/download/v1.2.5/Precompiled.zip
sudo yum install unzip
sudo unzip Precompiled.zip

Elixir is now installed on your system. You can run Elixir commands by specifying the path of each Elixir-related command, such as:

/usr/bin/elixir/bin/elixir -v

This command will tell you the version of Elixir on your system.

As a matter of convenience, you can add Elixir’s bin path (along with to-be-installed node.js bin path) to your PATH environment variable:

sudo vi /etc/profile

Append the following line to the end of the file:

export PATH="$PATH:/usr/bin/elixir/bin:/usr/bin/node-v6.1.0-linux-x64/bin"

Save and quit:

:wq

Reload the profile:

source /etc/profile

From now on, you can run an Elixir-related command without specifying its complete path, such as:

elixir -v

Now, install the Hex package manager by running the mix command in the same fashion:

cd ~
mix local.hex

Answer Y during the installation process.

Step 4: Install Phoenix

Use the following command to install Phoenix:

mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez

Answer Y during the installation process.

Step 5: Install Node.js (optional)

If you want to use brunch.io, the default building tool of Phoenix, to compile static assets (javascript, css, etc.), you need to install Node.js (>= 5.0.0):

cd ~
wget https://nodejs.org/dist/v6.1.0/node-v6.1.0-linux-x64.tar.xz
sudo yum install xz
xz -d node-v6.1.0-linux-x64.tar.xz
tar -xvf node-v6.1.0-linux-x64.tar
sudo mv ~/node-v6.1.0-linux-x64 /usr/bin/

Remember, the Node.js path was added into the PATH environment variable in step 3. You can test the Node.js installation with this command:

node -v

Step 6: Install PostgreSQL

By default, Phoenix uses PostgreSQL to configure applications. On CentOS 7, You can install PostgreSQL using YUM:

sudo yum install -y postgresql-server
sudo postgresql-setup initdb

Start the postgresql service:

sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service

Set a password for the default PostgreSQL user "postgres":

sudo -u postgres psql

In the PostgreSQL shell (after the prompt turns into postgres=#), set a password for "postgres":

\password postgres

Enter the password postgres twice, which is the preferred one of Phoenix.

Finally, use the following command to quit the PostgreSQL shell.

\q

Setup the database user authentication method:

sudo vi /var/lib/pgsql/data/pg_hba.conf

Find the following section:

# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                ident

Modify the authentication method of IPv4 local connections to md5:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Save and quit:

:wq

Restart the postgresql service:

sudo systemctl restart postgresql.service

Step 7: Install inotify-tools

Use the following command to install a required component "inotify-tools":

sudo yum install inotify-tools

Step 8: Create a Phoenix application

Assume that you want to create a Phoenix application in the directory ~/phoenix_project_1:

mix phoenix.new ~/phoenix_project_1

Answer Y during the process to fetch and install dependencies.

This command will create the application directory ~/phoenix_project_1 for you. Get into the directory and create a database:

cd ~/phoenix_project_1
mix ecto.create

Answer Y to install "rebar" during the first database creation.

Fire up your application with the following command:

mix phoenix.server

While keeping the current SSH connection alive, initiate another SSH connection and modify the firewall rules to grant access to your application:

sudo firewall-cmd --zone=public --permanent --add-port=4000/tcp
sudo firewall-cmd --reload

Finally, use a web browser to visit your application from:

http://[your-server-IP]:4000

That concludes our tutorial. Welcome to Phoenix!