How to Install the Phoenix Framework on CentOS 7
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!