PhoenixServerインストール(CentOS編)


概要

Ubuntu編のインストール手順をアップしたのですが、CentOSのインストール手順もアップしようと思います。

手順サマリー

 1.AWSインスタンスの用意
 2.OSの基本設定/パッケージアップデートとサーバー再起動
 3.各種前提パッケージのインストール
 4.erlang/Elixirのインストール
 5.PostgreSQLの設定
 6.Elixirの初期設定/Phoenixサーバーの起動と設定

1.AWSインスタンスの用意

使用したAMIは以下です。

画像だとOSのバージョンが分からないのですが、CentOS Linux release 7.6.1810 (Core)です。
インスタンスタイプはUbuntuのインストール時と異なりt2.largeを指定しています。
理由ですが、途中でElixirをソースコンパイルしたのですが、
その際にメモリが不足している旨のエラーが出力されたためです(汗

2.OSの基本設定/パッケージアップデートとサーバー再起動

ほぼほぼ、Ubuntuの時と変わらないです。

1.ホスト名の設定
2.selinuxの無効化
3.sudoユーザーの作成(パスワード設定含む/rootも一緒に設定)

ホスト名の設定
hostnamectl set-hostname <MyHostName>
selinuxの無効化
cp -p /etc/selinux/config /etc/selinux/config.org
vi /etc/selinux/config
config編集内容
1
2     # This file controls the state of SELinux on the system.
3     # SELINUX= can take one of these three values:
4     #     enforcing - SELinux security policy is enforced.
5     #     permissive - SELinux prints warnings instead of enforcing.
6     #     disabled - No SELinux policy is loaded.
7     # SELINUX=enforcing
追加   SELINUX=Disabled
8     # SELINUXTYPE= can take one of three values:
9     #     targeted - Targeted processes are protected,
10    #     minimum - Modification of targeted policy. Only selected processes are protected.
11    #     mls - Multi Level Security protection.
12     SELINUXTYPE=targeted
sudoユーザーの作成
useradd work01
passwd work01
ユーザーをwheelグループへ追加
usermod work01 -g wheel

Ubuntuの時と同様にここまで終了したら、パッケージを最新化して、再起動します。

パッケージの最新化と再起動
yum update -y
reboot

サーバーが起動してきたら、以下のコマンドを実行し、実行結果がDisabledと表示されることを確認します。

Selinuxの有効化確認
$ getenforce
Disabled

3.各種前提パッケージのインストール

この後の導入手順でepelリポジトリが必要になるので追加します。

epelリポジトリの追加
sudo yum install epel-release -y
リポジトリの最新化
sudo yum -y update && sudo yum -y upgrade
PostgreSQLのインストール
sudo yum install postgresql-server postgresql postgresql-contrib -y
inotify-toolsのインストール
yum install inotify-tools -y
各種Erlang用の依存パッケージなど必要なパッケージインストール
sudo yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git -y
wxbaseライブラリの追加
sudo yum install wxBase.x86_64 -y
wgetの追加
sudo yum install wget -y

4.erlang/Elixirのインストール

erlangインストール用のリポジトリが用意されていますのでそちらを落とします。

Erlangリポジトリダウンロード
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
Erlangリポジトリの追加/必要パッケージのインストール
sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

ちなみに私はこのタイミングで1回rebootを実行しました。

Erlangのインストール
sudo yum install esl-erlang -y

ここまででErlangのインストールに成功したので、次はElixirのインストールを行います。

まずはElixirを配置するためのディレクトリを作成します。

Elixir用ディレクトリの作成
sudo mkdir /opt/elixir

GitからElixirの最新版リポジトリをクローンします。

Elixirリポジトリのクローン
sudo git clone https://github.com/elixir-lang/elixir.git /opt/elixir

クローンが完了したら、ディレクトリを移動して、Elixirをソースコンパイルします。

ディレクトリ移動/ソースコンパイル
cd /opt/elixir
sudo make clean test

上記のコマンドを実行するとコンパイル後にElixirの各種コマンドに対するテストが行われます。
それが完了したら、以下のコマンドでシンボリックリンクを作成して、パスが通るようにします。

Elixir用のシンボリックリンク作成
sudo ln -s /opt/elixir/bin/iex /usr/local/bin/iex
sudo ln -s /opt/elixir/bin/mix /usr/local/bin/mix
sudo ln -s /opt/elixir/bin/elixir /usr/local/bin/elixir
sudo ln -s /opt/elixir/bin/elixirc /usr/local/bin/elixirc

Elixirが導入されたことを確認するため、以下のコマンドを実行します。

Elixirのバージョン確認
elixir -v

バージョンが表示されればElixirのインストールに成功してます。OKです。

5.PostgreSQLの設定

Ubuntuの時と同様にpostgresユーザーのパスワードを設定したいところなのですが、
CentOSの場合、起動するまでに少し手間が必要でしたので、記載しておきます。

PostgreSQLの初期化
postgresql-setup initdb

上記を実行しないとPostgreSQLのサービスを起動できませんでした。
あと、Ubuntuの時と違う手順になるのですが、PostgreSQLのローカル認証メソッドを
Identからmd5に変更しておきます。

/var/lib/pgsql/data/pg_hba.confファイルの変更
 81   # IPv4 local connections:
 82   #host    all             all             127.0.0.1/32            ident
 追加   host    all             all             127.0.0.1/32            md5
 83   # IPv6 local connections:
 84   #host    all             all             ::1/128                 ident
 追加   host    all             all             ::1/128                 md5
PostgreSQLのサービス起動
sudo systemctl start postgresql
sudo systemctl enable postgresql

以下のコマンドを実行して、PostgreSQLのサービスが起動していることを確認します。

postgresqlサービスの状態確認
sudo systemctl status postgresql

サービスが確認した後、改めて、postgresユーザーのパスワードを変更します。

Postgresユーザーのパスワード変更
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '<YourPassword>';"

Ubuntuの時と同様にALTERROLEが表示されれば、パスワードが変更されたことを意味します。

6.Elixirの初期設定/Phoenixサーバーの起動と設定

こちらの手順はほぼUbuntuの時と同じになります。
ここまでの手順でElixirをコンパイルしたフォルダにいると思いますので、
別のフォルダに移動しておきます。(私の場合、work01ユーザーのホームに移動しています)

ディレクトリの移動
cd
Hexのインストール
mix local.hex

唯一、Ubuntuと違う点なのですが、Elixirをシンボリックリンク作成でパスを通したため、
sudoを使用するとコマンドが見つからなくなりますので、mixを実行する際はsudo不要です。

Hexのインストールが完了したら、次にPhoenixをダウンロードし、ビルドします。

Phoenixのインストール
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez

Phoenixのプロジェクトを作成します。

Phoenixプロジェクト作成
mix phx.new <YourProjectName>

プロジェクトのディレクトリに移動して、DB作成のタスクを実行します。

ディレクトリ移動
cd <YourProjectName>/
DB作成
mix ecto.create

これはUbuntuの時も同じでしたが、やはり、"plug_cowboy dependency missing"
問題が発生しますので、予め解消しておきます。

設定ファイルの編集
sudo cp -p <YourProjectName>/mix.exs <YourProjectName>/mix.exs.org
sudo vi <YourProjectName>/mix.exs
編集内容
 31   # Specifies your project dependencies.
 32   #
 33   # Type `mix help deps` for examples and options.
 34   defp deps do
 35     [
 36        {:phoenix, "~> 1.3.4"},
 37        {:phoenix_pubsub, "~> 1.0"},
 38        {:phoenix_ecto, "~> 3.2"},
 39        {:postgrex, ">= 0.0.0"},
 40        {:phoenix_html, "~> 2.10"},
 41        {:phoenix_live_reload, "~> 1.0", only: :dev},
 42        {:gettext, "~> 0.11"},
 43        {:cowboy, "~> 1.0"},
 追加       {:plug_cowboy, "~> 1.0"}
 45        ]
 46        end

設定の編集が終わったら、ライブラリの読み込みを実施します。

deps.getコマンド
mix deps.get

そして、ここでUbuntuの時と同様に、node.jsとnpmコマンドのインストール、
アセットのダウンロードまで実施しておきます。

node.jsインストール
sudo yum install nodejs -y
npmインストール
sudo yum install npm -y
アセットのダウンロード
cd assets && npm install

そして、ここまでが終わったら、以下のコマンドでPhoenixを起動します。
注意ですが、アセットをダウンロードするためにassetsフォルダに移動しているため、
以下のコマンドはcd ..で階層上がってから実行してくださいね。

Phoenixの起動
mix phx.server

セキュリティグループはもう大丈夫だと思いますので割愛します。
Webブラウザから4000番でアクセスするとPhoenixサーバーが起動していることを確認できます。