EC2にRails5環境を構築する

# AWSのEC2にRails環境を構築した背景
アドバイザリーを行っている企業から古くなったWindowsアプリを
作り直したいという話をいただきました。
どうせならWebアプリケーションとして再構築してはと提案し、
運用面も検討してAWSとRailsで構築することにしました。

| アプリケーション| version     | 
|:-----------|------------:|
| Ruby       | 2.5.3       |
| Rails      | 5.2.2       |
| Apache     | 2.4         |
| MySQL      | 5.7         |

以下、個人的なメモとして記載しています。
情報は適宜更新していきます。

## 必要なパッケージのインストール
yumをupdateし、必要なパッケージをインストールします。

```
$ sudo yum update -y
$ sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel
```

## Gitのインストールと設定
バージョン管理ツールとしてGitを使用します。

```
$ sudo yum -y install git
$ git config --global user.name "ユーザー名を入力"
$ git config --global user.email "メールアドレスを入力"
```

## 日本時間に合わせる
タイムゾーンを日本時間に変更します。

```
$ date
Fri Sep  7 01:32:06 UTC 2018

$ sudo cp -r /usr/share/zoneinfo/Japan /etc/localtime
```

``` 
$ sudo vim /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=true
```
```
date
Fri Sep  7 10:32:33 JST 2018
```

##rbenvでRubyの指定バージョンをインストール
Githubからrbenvをcloneし、その後rbenvコマンドを呼び出せるように、
環境変数を設定してPATHを通します。

```
$ sudo git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ sudo vim /etc/profile.d/rbenv.sh
```

rbenv.shにPATHを記載します。

```
export RBENV_ROOT="$HOME/.rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
```

ruby-buildをインストールします。

```
$ sudo git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

ユーザをwheelグループに所属させる必要がありますが、
AmazonLinux2では初期設定でwheelグループに入っています。

```
$ sudo usermod -G wheel ec2-user$ grep wheel /etc/group
wheel:x:10:ec2-user
```

wheelグループのユーザがrbenvコマンドを使えるように、ディレクトリの権限を変更します。

```
$ sudo chown -R ec2-user:wheel ~/.rbenv
$ sudo chmod -R 775 ~/.rbenv
```

ディレクトリの状態を確認します。

```
$ ls -la
drwxrwxr-x 10 ec2-user wheel    234 Sep  7 11:48 .rbenv
```

パーミッションはrwxrwxr-x、グループとユーザはwheel:wheelになっていればOKです。
設定した環境変数を読み込むために以下のコマンドを実行します。

```
$ source /etc/profile.d/rbenv.sh
```

```
$ rbenv --version
rbenv 1.1.1-39-g59785f6
```

インストール可能なRubyのバージョンを確認します。

```
$ rbenv install -l
  …
  2.4.3
  2.5.0-dev
  2.5.0-preview1
  2.5.0-rc1
  2.5.0
  2.5.1
  2.5.2
  2.5.3
  2.6.0-dev
  …
```

使いたいバージョンのRubyを指定し、インストールします。

```
$ rbenv install -v 2.5.3
```

rbenvを同期します。

```
$ rbenv rehash
```

rbenvでインストールしたRubyを、システム全てに適用します。

```
$ rbenv global 2.5.3
```

## Rails5のインストール

bundlerとRailsをインストールします。
バージョンを指定しない場合、最新バージョンがインストールされます。

```
$ gem install bundler
$ gem install rails -v 5.2.2
```

gemをインストールするさいに、ドキュメント類が作成されないように.gemrcに追記します。

```
$ printf "install: --no-rdoc --no-ri\nupdate:  --no-rdoc --no-ri\n" >> ~/.gemrc
```

## Apache2.4のインストール

WebサーバーとしてApacheをインストールします。

```
$ yum info httpd
$ sudo yum -y install httpd

$ chkconfig /etc/init.d/httpd
$ sudo chkconfig httpd on
$ sudo service httpd start
```

```
$ yum list | grep httpd24
httpd24.x86_64                       2.4.34-1.82.amzn1             amzn-updates
httpd24-devel.x86_64                 2.4.34-1.82.amzn1             amzn-updates
httpd24-manual.noarch                2.4.34-1.82.amzn1             amzn-updates
httpd24-tools.x86_64                 2.4.34-1.82.amzn1             amzn-updates

$ sudo yum install -y httpd24

$ httpd -version
Server version: Apache/2.4.34 (Amazon)
Server built:   Aug 17 2018 22:22:09
```

Apacheの設定を行います。
Amazon Linux の Apache2.4 では、デフォルトでバーチャルホストが有効になっているので、
以下にファイルを作成するだけで良いです。

```
$ sudo vim /etc/httpd/conf.d/vhost-test.conf

<VirtualHost *:80>
  ServerName piyopiyo.jp
  DocumentRoot /var/rails/piyo/public
  RackEnv production
  <Directory /var/rails/piyo/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

$ sudo service httpd restart
```

## Passengerのインストール
Railsを動かすために、ApacheのプラグインであるPassengerを使います。

```
$ gem install passenger
```

以下を実行すると、足りないパッケージをインストールするように促されます。

```
$ passenger-install-apache2-module
```

指示通りにインストールし、上記のコマンドを再実行します。

```
$ sudo yum install libcurl-devel
$ sudo yum install httpd-devel
$ sudo yum install apr-devel
$ sudo yum install apr-util-devel
```

最後にpassenger.confに追記するテキストが表示されるので、更新します。

```
$ sudo vi /etc/httpd/conf.d/passenger.conf
```

## MySQL
mysql8.0リポジトリの追加（このリポジトリに5.7も含まれています）します。

```
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y
```

削除する場合。

```
$ sudo yum remove mysql80-community-release-el7-1.noarch
```

MySQL5.7をインストールします。

```
#mysql8.0リポジトリの無効化
$ sudo yum-config-manager --disable mysql80-community
#mysql5.7リポジトリの有効化
$ sudo yum-config-manager --enable mysql57-community
#mysql5.7がインストールできるか確認
$ yum info mysql-community-server
#mysqlインストール
$ sudo yum install mysql-community-server -y
$ mysqld --version
mysqld  Ver 5.7.22 for Linux on x86_64 (MySQL Community Server (GPL))
```

MySQLの起動設定を行います。

```
#自動起動設定
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
$ systemctl status mysqld.service
```

rootのパスワードを/var/log/mysqld.logから確認します。

```
A temporary password is generated for root@localhost: hogehoge;
```

MySQLにログインし、rootパスワードを変更します。

```
mysql> set password for root@localhost=password('Hogehoge@9999');
```

gem mysql2のインストールのさいに、mysql-develが必要になります。

```
$ sudo yum install mysql-devel
```

以上で、Rails5環境を構築できました。

## Rails5アプリを作成
DBにMySQLを指定して、Railsアプリを作成します。

```
$ rails new sample -d mysql
```

Gemfileにあるmini_racerのコメントを外します。

```
$ vim Gemfile
gem 'mini_racer', platforms: :ruby
```

PATHを指定して、bundle　installを行います。

```
$ bundle install --path vendor/bundle
```

DBのconfigファイルにDBへの接続情報を記入します。
Apacheの設定で指定したURLにアクセスすると、
Railsのwelcome画面が映っています。