LAMP 環境構築 PHP 7 MySQL 5.7（後編）

# 概要
前回の記事[LAMP 環境構築 PHP 7 MySQL 5.7（前編）](http://qiita.com/keita-nishimoto/items/5441244604fbc6db7907) の続き。

前回ApacheのVirtualHostの設定まで完了していたかと思うが、今回はMySQL、PHPのインストールを行っていく。

# 環境
[LAMP 環境構築 PHP 7 MySQL 5.7（前編）](http://qiita.com/keita-nishimoto/items/5441244604fbc6db7907)と同じ。

# MySQLのインストール

## MySQL公式のyumリポジトリの追加

```
rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
```

## リポジトリ追加後にyum update

```
yum update
```

※私が試した時はこのyum updateによってmariadb-libsが削除された。

## インストールを実行

```
yum install mysql-community-server
```

## 初回起動を行う
```
systemctl start mysqld.service
```

どうやらMySQL5.7からは初期パスワードが勝手に設定されるように仕様が変更された模様。
初期パスワードは以下の方法で確認出来る。

```
[vagrant@localhost ~]$ sudo cat /var/log/mysqld.log | grep 'temporary password'
2016-07-19T05:13:27.092395Z 1 [Note] A temporary password is generated for root@localhost: Y5q&Vz3Iawet
```

この"Y5q&Vz3Iawet"が今回設定された初期パスワードとなる。

↓初回のセキュリティ設定を行う

```
mysql_secure_installation
```

ここからは対話式のインターフェースになる。
詳しくは[こちらの記事](http://weblabo.oscasierra.net/mysql-57-init-setup/)等を参照。

基本新しいパスワードを入力して後は全部、Y + Enterで良い。

ちなみに初期設定だとパスワードポリシーが「英数字記号混在の8文字以上」となっている。
このパスワードポリシーは後で変更する事が可能。

## 設定ファイルの編集

viで設定ファイルを開く。

```
vi /etc/my.cnf
```

```text:/etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8mb4
skip-character-set-client-handshake
default-storage-engine=innodb
collation-server=utf8mb4_general_ci
innodb_file_per_table=1
default-storage-engine=InnoDB
default_password_lifetime = 0

[mysql]
auto-rehash
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4
```

このあたりの設定は状況に応じて設定して欲しい。
私見だが開発に利用するだけならこの設定で十分だと感じる。

文字コードをutf8mb4に設定、auto-rehash（tabキーでのテーブル名等の補完の有効化）等を行ってある。

MySQL5.7から設定しておくべきパラメータとしてdefault_password_lifetimeがある。

デフォルト設定だと365日（もしかしたら違っているかも）でパスワードを強制変更するようにMySQL側から求められるようになっている。
つまりパスワードに有効期限が設定されるようになったという事。

セキュリティが強化されたと言えばそうだが、これだと本番運用時に突然サービスが止まってしまう事になるので非常に困る。
よってdefault_password_lifetimeを0に設定する事でパスワードの有効期限を無制限にする。

※5.7.11からはデフォルトで0に設定が変更されたようなのでこの設定は不要かもしれない（未確認）

## 設定を反映させる為、MySQLを再起動させる
```
systemctl restart mysqld.service
```

ついでにサービスの自動起動設定も行っておく↓

```
systemctl enable mysqld.service
```

↓自動起動設定の確認

```
[root@ip-172-31-29-90 centos]# systemctl list-unit-files -t service | grep mysqld
mysqld.service                         enabled
mysqld@.service                        disabled
```

## 念の為、文字コードの設定が反映されているか確認する

↓MySQLにログインを行う

```
mysql -u root -p
```

↓以下のSQLを実行し下記のように表示されれば設定の反映が正常に行われている。
```
mysql> show variables like 'character_set%';
```

```
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
```

# PHPのインストール
yumでインストールを行う為には2つのyumリポジトリを追加する必要がある。

## EPELリポジトリ追加

```
yum install epel-release
```

## Remiリポジトリを追加

```
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

## PHPのインストール

```
yum install --enablerepo=remi,remi-php70 php php-devel php-opcache php-mbstring php-mcrypt php-pdo php-gd php-mysqlnd php-pecl-xdebug php-fpm php-xml
```

## php.iniの設定

[こちら](http://qiita.com/knife0125/items/0e1af52255e9879f9332)等を参考に設定ファイルの修正を行っておく。

私は[こちら](https://github.com/keita-nishimoto/playbook_lamp/blob/master/roles/php/templates/php.ini.j2)のように設定した。

開発用途であれば最低限、date.timezone = "Asia/Tokyo"とmbstring.language = Japaneseあたりを設定しておけばよい。

## Apacheの再起動

```
systemctl restart httpd.service
```

## PHPのインストール確認

```
php -v
```

以下のように表示されればインストールが正常に出来ている。

```
PHP 7.0.8 (cli) (built: Jun 22 2016 11:57:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
```

## ブラウザでの表示確認

[前回の記事](http://qiita.com/keita-nishimoto/items/5441244604fbc6db7907)の通りに進めていれば、VirtualHostのドキュメントルートが/home/vagrant/wordpressになっているハズ。

そこでドキュメントルートにindex.phpを以下の内容で追加する。

```php:/home/vagrant/wordpress/index.php
<?php
phpinfo();
```

※[前回の記事](http://qiita.com/keita-nishimoto/items/5441244604fbc6db7907)の通りに進めているとここにはindex.htmlが残っているハズ、このままだと、https://domainname.com にアクセスした際にindex.htmlが優先して読み込まれてしまうので、index.htmlの名前を変えておく。

```
mv index.html index.html.org
```

ブラウザで下記のURLにアクセスする。
https://domainname.com/

すると下記のようにPHPの設定がブラウザ上に表示される。

<img width="969" alt="phpinfo.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/659ed65b-a84a-3f55-488b-5c0ceb191965.png">

# おまけ
ここまでの環境構築をAnsibleとVagrantを使って自動化しておいた。

- [Vagrantfile](https://github.com/keita-nishimoto/lamp_vagrant_provisioning)
- [Ansibleのplaybook](https://github.com/keita-nishimoto/playbook_lamp)


[前回の記事](http://qiita.com/keita-nishimoto/items/5441244604fbc6db7907)と本投稿の内容で説明した環境が構築可能となっている。

使い方に関しては、[Vagrantfile](https://github.com/keita-nishimoto/lamp_vagrant_provisioning)のREADMEを参照して欲しい。