CentOS7+nginx+php7+MariaDBの環境構築

今までの開発環境がCentOS6+Apache2.2+php5.x+mysql5.xでした。php7もリリースされてから情報が増えてきたのと、nginxも触ってみたかったので、CentOS7にphp7とnginxを導入してみました。

自分へのメモ代わりと出来るだけシンプルかつ失敗がなさそうな手順にしてみました。

## リポジトリの追加
nginxやphp7はCentOS7のリポジトリに無いのでepelを追加しました。

### epelリポジトリ
インストール後に明示的に指定しないとepelが使用出来ないようにしました。

```:console
$ sudo yum install epel-release
```

「enabled=1」を「enabled=0」にしました。

```:console
# vi /etc/yum.repos.d/epel.repo
```

## webサーバインストール
nginxをインストールします。

## nginx
### インストール
```:console
$ sudo yum --enablerepo=epel install nginx
```

### 設定
* 設定ファイルを作成しました。

```:/etc/nginx/conf.d/centos7.conf
server {
  listen 80;
  server_name centos7;
  root /var/www;
  index index.php index.html index.htm;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
  }
}
```

### 有効化

```:console
$ sudo systemctl enable nginx
```

### サービス起動

```:console
$ sudo systemctl start nginx
$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-05-26 16:25:32 JST; 6min ago
  Process: 1141 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1098 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1090 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1170 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1170 nginx: master process /usr/sbin/nginx
           └─1173 nginx: worker process

May 26 16:25:31 centos70 systemd[1]: Starting The nginx HTTP and reverse proxy server...
May 26 16:25:32 centos70 nginx[1098]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
May 26 16:25:32 centos70 nginx[1098]: nginx: configuration file /etc/nginx/nginx.conf test is successful
May 26 16:25:32 centos70 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
May 26 16:25:32 centos70 systemd[1]: Started The nginx HTTP and reverse proxy server.
```

### 稼働確認
ブラウザで確認してnginxのwelcomeページが表示されることなどで、確認をします。

## php
php7をインストールします。

### インストール

```:console
# yum install --enablerepo=epel,remi-php70 php php-mbstring php-pear php-fpm php-mcrypt php-mysql
```

## php-fpm
nginxにてphpが使用出来るようにするためにphp-fpmをインストールします。phpのextensionなのでその他のextensionと一緒にインストールしても問題ありません。

### インストール

```:console
$ sudo yum --enablerepo=epel,remi,remi-php70 install php70-php-fpm
```

### 設定

```:/etc/php-fpm.d/www.conf
# vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

listen = /var/run/php-fpm.sock
listen.owner = nginx
listen.group = nginx
```

### サービス有効化

```:console
$ sudo systemctl enable php-fpm
```

### サービス起動

```:console
$ sudo systemctl start php-fpm
$ sudo systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-05-26 16:44:29 JST; 9s ago
 Main PID: 4343 (php-fpm)
   Status: "Ready to handle connections"
   CGroup: /system.slice/php-fpm.service
           ├─4343 php-fpm: master process (/etc/php-fpm.conf)
           ├─4345 php-fpm: pool www
           ├─4346 php-fpm: pool www
           ├─4347 php-fpm: pool www
           ├─4348 php-fpm: pool www
           └─4349 php-fpm: pool www

May 26 16:44:28 centos70 systemd[1]: Starting The PHP FastCGI Process Manager...
May 26 16:44:29 centos70 php-fpm[4343]: [26-May-2016 16:44:29] NOTICE: PHP message: PHP Warning:  PHP Sta...ine 0
May 26 16:44:29 centos70 php-fpm[4343]: [26-May-2016 16:44:29] NOTICE: PHP message: PHP Warning:  PHP Sta...ine 0
May 26 16:44:29 centos70 systemd[1]: Started The PHP FastCGI Process Manager.
Hint: Some lines were ellipsized, use -l to show in full.
```

### 稼働確認
* phpのバージョンが7であることを確認します。

```:console
$ php -v
PHP 7.0.7 (cli) (built: May 25 2016 17:27:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
```

* phpinfo()を使ってnginxでphpが稼働するか確認します。

```:phpinfo.php
<?php
    phpinfo();
```

## php-mysqlnd
MariaDBとphpが使用出来るようにするためにphp-mysqlndをインストールします。phpのextensionなのでその他のextensionと一緒にインストールしても問題ありません。

### インストール
```:console
$ sudo yum --enablerepo=epel,remi,remi-php70 install php70-php-mysqlnd
```

### サービス再起動
```:console
$ sudo systemctl restart php-fpm
$ sudo systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-05-30 16:25:08 JST; 6s ago
 Main PID: 5233 (php-fpm)
   Status: "Ready to handle connections"
   CGroup: /system.slice/php-fpm.service
           ├─5233 php-fpm: master process (/etc/php-fpm.conf)
           ├─5234 php-fpm: pool www
           ├─5235 php-fpm: pool www
           ├─5236 php-fpm: pool www
           ├─5237 php-fpm: pool www
           └─5238 php-fpm: pool www

May 30 16:25:08 centos70 systemd[1]: Starting The PHP FastCGI Process Manager...
May 30 16:25:08 centos70 systemd[1]: Started The PHP FastCGI Process Manager.
```

## php extension
### インストール
* extensionの検索をして必要そうなものを見つけます。

```:console
$ yum --enablerepo=epel,remi,remi-php70 search php70
```
* extensionのインストール

```:console
$ sudo yum --enablerepo=epel,remi,remi-php70 install php70-php-mcrypt php70-php-mbstring php70-php-gd
```

## MariaDB
### インストール

```:console
$ sudo yum install mariadb mariadb-server
```

### サービス有効化

```:console
$ sudo systemctl enable mariadb
```

### サービス起動

```:console
$ sudo systemctl start mariadb
$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-05-30 13:37:20 JST; 32min ago
 Main PID: 1228 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           ├─1228 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─1619 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin...

May 30 13:37:16 centos70 systemd[1]: Starting MariaDB database server...
May 30 13:37:18 centos70 mysqld_safe[1228]: 160530 13:37:18 mysqld_safe Logging to '/var/log/mariadb/maria...og'.
May 30 13:37:18 centos70 mysqld_safe[1228]: 160530 13:37:18 mysqld_safe Starting mysqld daemon with databa...ysql
May 30 13:37:20 centos70 systemd[1]: Started MariaDB database server.
May 30 14:09:40 centos70 systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.
```

### adminerのインストール
* [adminer](https://www.adminer.org/)を入れてみました。phpMyAdminより動作が機敏なこと、1ファイルだけで稼働することが特徴です。
* ファイルをダウンロードしてサーバのドキュメントルート配下にアップします。
 無事にデータベースの内部が参照できたらnginxもMariaDBもphpも動いています…。