デプロイ方法②(EC2環境構築/Linux/MySQL設定)

※デプロイの方法の手順②　今後の自分のメモ用に

#EC2インスタンスの環境構築
#####設定用のツールをインストール
最初にyumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。

####yumコマンド
Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。

####パッケージ
LinuxOS下における、ある役割/機能をもったプログラムの集合です。ソフトウェアとも、ライブラリとも呼べます。
あくまでもLinuxOSでは、ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ、ということです

####パッケージをアップデート
```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update
```

その他環境構築に必要なパッケージを諸々インストール

```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
 
```

####-yコマンドについて
-y はyumコマンドのオプションです。yum install などのコマンドでは、本当にインストールして良いのか [y/n]のようにYes or Noが問われます。この場合はYキーを押してEnterキーを押せば正常どおりインストールが行われます。しかし、初見であったり誤ってYキー以外を押してしまう場合もあります。 ここでは確実にインストールするために、予めオプションで-yを設定する事で全ての問いにYesで自動的に答えるように設定してコマンドを実行しましょう。

もし誤ってオプションを忘れてしまうと下記のような問いが発生しますので、Yキーを押し次にEnterキーを押してインストールを完了して下さい。

```
総ダウンロード容量: 120 M
Is this ok [y/d/N]: 
```

#Node.jsをインストール
EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。

####Node.js
サーバーサイドで動くJavaScriptのパッケージです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejs
```

こちらも確認画面が出てきた場合は、「y」→returnキーで確定してください。

これでNode.jsのインストールは完了です。

#rbenvとruby-buildをインストール

rbenvとruby-buildをインストールします。Macの環境構築の際にも利用しましたが、改めて簡単に説明しておきます。
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールになります。これらはRubyをインストールする前に、インストールする必要があります。
ruby-buildはrbenvのプラグインであり、ruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができます。
rbenvを使用することでrubyのバージョンを切り替えることできます。

```bash
#rbenvのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
#パスを通す
[ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
#rbenvを呼び出すための記述
[ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#.bash_profileの読み込み
[ec2-user@ip-172-31-25-189 ~]$ source .bash_profile
#ruby-buildのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
#rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  
```

1つ目のコマンドは、gitからrbenvをクローンしています。
2つ目と3つ目のコマンドは、パスを通す際に必要なコマンドです。パスを通すとは、どのディレクトリからもアプリケーションを呼び出せる状態にするということです。
そして、4つ目のコマンドで、設定したパスを読み込んでいます。
5つ目のコマンドは、gitからruby-buildをクローンしています。
最後のコマンドは、使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。

これでrbenvとruby-buildのインストールは完了

#Rubyをインストール
インストールするRubyのバージョン、自身のアプリケーションで使っているRubyのバージョンによって適宜変更してください。

```bash
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1
[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  #rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ ruby -v # バージョンを確認
```

1つ目のコマンドで、Rubyの2.5.1のバージョンをインストールしています。Rubyのインストールには時間がかかります。ターミナルに「Installing ruby-2.5.1...」といった表示が出たまま止まって見えますが、そのまま待ちましょう。
2つ目のコマンドは、EC2インスタンス内で使用するRubyのバージョンを決めるものになります。
3行目では再びRehashを行っています。
最後にruby -vコマンドを打ち込み、バージョンを確認しましょう。

EC2インスタンス内の環境構築が完了

#MySQLの設定

###データベースの種類
一口にデータベースと言っても、いくつかの種類があります。以下にその種類を示します。

・階層型データベース
・ネットワーク型データベース
・リレーショナルデータベース
この中で最も利用されているのが、リレーショナルデータベースです。
エクセルの表のような形で情報を整理し、管理することができます。そして、このリレーショナルデータベースを管理するソフトウェアはリレーショナル・データ・ベース・マネジメント・システム(RDBMS)と呼ばれます。

そんなRDBMSの中でも代表的なものの一つが、MySQLです。

####MySQL
MySQLは、Oracle社が開発・提供をしているRDBMSです。データベースの作成、編集、削除などを行うことができます。オープンソースソフトウェアとして公開されており、誰でも無償で利用することができます。
Ruby on Railsと合わせ利用することができ、本カリキュラムでは一貫してMySQLを利用しています。

[Oracle社のMySQL紹介ページ](https://www.oracle.com/mysql/)
[MySQL公式ページ](https://www.mysql.com/)


![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551425/7467ee53-5a9e-5d1d-e6e9-0af7ad2a8776.png)


一つのEC2インスタンスに、Railsをはじめ必要なソフトをすべてインストールしています。MySQLもそのうちの一つです。上の図で「データベースサーバー」と書かれているものが、MySQLに当たります。MySQLのようなソフトはデータベースの管理を行うため、そのように呼ばれることもあります。


#MySQLをインストール

Amazon Linuxを利用している場合、MySQLは yum コマンドからインストールすることができます。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56
```
これは、MySQLのバージョン5.6をインストールすることを意味します。

#MySQLを起動

MySQLを起動するために service コマンドを利用します。これは、Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld start
```
mysql ではなく mysqld であることに注意しましょう。「d」はLinuxの用語で「サーバ」を意味する「デーモン(daemon)」の頭文字です。


起動できたか確認する

```
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld status
mysqld (pid  15692) is running...
```
「running」と表示されれば、MySQLの起動は成功

#MySQLのrootパスワードの設定

yum でインストールしたMySQLには、デフォルトで root というユーザーでアクセス出来るようになっていますが、パスワードは設定されていません。

そこで、以下のコマンドでパスワードを設定しましょう。'設定したいパスワード'の部分については、例えばpassword0000という文字列を設定するとしたら、 'password0000'と記載しましょう。
０から始まるpasswordは読み込んでくれないケースが多いので、避けましょう！
（例えば、’0331higuchi’など）

```
[ec2-user@ip-172-31-25-189 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行してください'
```

このパスワードは、後ほどRailsからアクセスする時にも利用するので記憶しておいてください。

この時、Warning: Using a password on the command line interface can be insecure.と警告がでることがありますが、ここでは無視していただいて問題ありません。

#MySQLへの接続確認

設定したパスワードが使えるか確認

```
[ec2-user@ip-172-31-25-189 ~]$ mysql -u root -p
```

Enter password: とパスワードを入力するように表示されるので、先程設定したパスワードを入力して、Enterしてください。以下のように表示されれば、MySQLの設定は終了です。

```bash
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

次の作業のために、Ctrl + c でMySQLから抜けておきましょう。