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に好きなアプリケーションを配置してご自分の好きなようにカスタマイズしまくりましょう。