10分で完了!CentOS7系にnginx+php7.1+DBのサーバー環境を作るまで

CentOS7系に、処理速度が早く高負荷に強いWEBサーバーのnginxとphp7.1、MySQLという2018年現在でphpユーザーに最も需要の有りそうな環境を作る手順をご紹介します。

CentOSの初期設定

まずはWEBサーバーを構築する前にCentOSの初期設定を行ってください

CentOS7系の初期設定でもご紹介していますがSELinuxは予期しない挙動をする場合がありますので無効化しておきましょう。
今回はroot権限での作業が多くなりますのでrootになれるユーザーで作業をしてください。

必要になるパッケージを入れる

groupinstallで諸々のパッケージをまるっとインストールします。

// rootで作業をしていきます
$sudo su

# yum groupinstall base development
# yum install epel-release

各種リポジトリを追加する

nginxとphp、MySQLをインストールするためにリポジトリを追加します。

// php7.1をインストールするために必要なremi
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

// nginx
# yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

// MySQL
# yum install https://dev.mysql.com/get/mysql57-community-release-elrpm -q --whatprovides /etc/redhat-release --qf '%{version}\n'-9.noarch.rpm

リポジトリの追加ができたらインストールの準備が完了です。

nginxのインストール

nginxはApacheよりも処理速度が早く高負荷に強いWEBサーバーです。
アクセスが多いサイトや複雑な処理を行うサイトに適しています。

// nginxのインストール
# yum install nginx

// nginx起動
# systemctl start nginx

// 自動起動の設定
# systemctl enable nginx

インストール、起動ができたらとりあえずサーバーのIPアドレスにアクセスしてみましょう。
下の画像のような初期ページが表示されていればOKです。

default.confの編集

nginxの設定はインストール直後は/etc/nginx/nginx.confと/etc/nginx/conf.d/default.confで設定されています。

しっかりとチューニングすることを考えるとnginx.confの編集が必要になりますが、今回はとりあえず使える環境を作るのが目的なのでdefault.confのみ編集していきます。

編集する前にまずはバックアップを取っておきましょう。

バックアップなしで挑んで失敗したときは悲惨です。めんどくさいですが必ずとっておきましょう。

このとき、バックアップファイル名に.confを拡張子につけないように注意しましょう。
.conf拡張子がついてしまうとnginx.confがバックアップファイルまで読み込んでしまい思うように動かない場合があります。

# cp -pi /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default_bk

バックアップが取れたら編集していきます。

# vi /etc/nginx/conf.d/default.conf

あとで追加で編集をしますがとりあえずは簡単に設定します。

server {
    listen       80 default_server;
    server_name  localhost;
    
    root   /usr/share/nginx/html;
    index index.php index;

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

rootに設定している/usr/share/nginx/htmlはDocumentRootで、この配下に設置したファイルを表示できるようになります。

indexではphpを使用する予定なのでindex.phpを設定し、なければindex.htmlを参照するように設定しています。

php7.1をインストール

まずは、パッケージをダウンロードするためにremiリポジトリを有効にしていきます。

# yum install yum-utils
# yum-config-manager --enable remi-php71

リポジトリを有効化したらphpを含めてphp-fpmをはじめとしたphp拡張もまとめてインストールしていきます。

phpとphp拡張パッケージのインストール

nginxでphpを動かすにはphp-fpmが必要です。
その他intlやmysqlなどもあとからインストールするより先にインストールしておいたほうが楽なので一括インストールしていきます。

cakephpなどではintlがなくてcomposerインストールができなくて悩む人を多く見かけるのでなるべく最初にインストールしておきましょう。

# yum install --enablerepo=remi,remi-php71 php php-fpm php-gd php-json php-mysql php-curl php-mbstring php-intl php-mcrypt php-imagick php-xml php-zip php-pecl-apcu php-pecl-zendopcache

何やら聞かれますが基本的にすべて「y」を入力してください。

php.iniを編集する

phpのインストールができたら日本語に最適化するため、php.iniを編集します。

下記の項目を探して編集、もしくは追加を行ってください。
コメントアウトされている場合はコメントアウトを外すことをお忘れなく!

mbstring.language = Japanese
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_charset = none

nginxでphpが動くようにする

ここまでできたらあとはphpをnginxで使えるようにすればOKです。

このままだとコマンドではphpを使用できますがnginx上では使えないというなんとも困った自体になってしまいますので、しっかり使えるように/etc/nginx/conf.d/default.confを編集していきます。

先程編集したdefault.confに追記をします。

# vi /etc/nginx/conf.d/default.conf
server {
    listen       80 default_server;
    server_name  localhost;
    
    root   /usr/share/nginx/html;
    index index.php index;

    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # ここから追記
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

編集が終わったらnginxを再起動しましょう。

# systemctl restart nginx

php-fpmの起動&自動起動設定

nginxの設定が終わってもphp-fpmと呼ばれるFastCGIを起動しなければいけません。
php-fpmは主に高負荷な処理のあるサイトに有効です。

// php-fpmの起動
# systemctl start php-fpm

// 自動起動の設定
# systemctl enable php-fpm

php-fpmが起動できたらちゃんと動いているか確認しましょう。
rootディレクトリにphpinfoを記載したtest.phpを作成します。

# touch /usr/share/nginx/html/test.php; echo "" > /usr/share/nginx/html/test.php

作成したファイルをブラウザで確認しましょう。
http://localhost/test.php

phpinfoが表示されていれば成功です。

phpinfoをいつまでも表示しておくのは危険なので確認が終わったらすぐに削除しましょう

# rm /usr/share/nginx/html/test.php

これでnginx上でphpが使用できるようになりました。

DBのインストール

CentOS7にはデフォルトでMariaDBが入っています。
MariaDBはMySQLとも互換性があり、十分に使えるDBですが人によってはMySQLを使いたいという方もいると思います。

今回はMySQLのインストール方法についてご紹介します。

MariaDBの削除

デフォルトで入っているMariaDBとMySQLの競合を防ぐため、MariaDBを削除します。

// MariaDBのアンインストール
# yum remove mariadb-libs

// 一部残ってしまうファイルの削除
# rm -rf /var/lib/mysql

これでMariaDBが削除できたので準備完了です。

MySQLのインストールと起動

リポジトリは先程既に追加済みなので早速インストールを行います。

今回は記法が若干違ってくるのでmysql-utilitiesのインストールは行いません。
インストールしたい方は下記のコマンドの後部にmysql-utilitiesを付け加えてください。

# yum install mysql-community-devel install mysql-community-server

インストールが完了したらサービスの起動、自動起動設定を行います。

# systemctl start mysqld
# systemctl enable mysqld

設定ファイルを編集する

起動ができたら/etc/my.cnfに少々設定を追記します。
この手順を無視すると最後にパスワードが更新されてから一定期間が経つと、パスワードが使えなくなってアプリケーションが停止するなんてこともあるので忘れずにやっておきましょう。

default_password_lifetime=0
log_timestamps=SYSTEM
explicit_defaults_for_timestamp=1
character-set-server=utf8

この中でも特に重要なのはdefault_password_lifetimeです。
意味はそのままパスワードの有効期限です。デフォルトでは360日に設定されていますので必ず0に設定してください。

rootでログインをする

まずは初期設定のパスワードを調べましょう。

# grep password /var/log/mysqld.log

表示されたパスワードをコピペしてログインします。

# mysql -u root -p

初期設定のままだと少しキケンなのでパスワードを変更します。

mysql> set password for 'root'@'localhost' = password('新しいパスワード');

これでセットアップ完了です。
基本的なnginx+php7.1+DBのサーバー環境が完成しました。

あとはDocumentRootに好きなアプリケーションを配置してご自分の好きなようにカスタマイズしまくりましょう。