さくらのクラウド CentOS7へPHP7+MySQL5.7+Apache2.4のインストール&設定

2017年の12月時点での最新のPHPをインストールしていきます。さくらクラウドでのCPU2コア、メモリ4GBでの作成です。

これから、PHP7.1とMySQL5.7とApache2.4をインストールをしていきます。普段は、ソースコードからコンパイルしてビルドしてとやっているのですが、今回はyumを使ってインストールをしてみたいと思います。
今回の初めての試みが、「epel」と「remi」というリポジトリを追加して、PHPをインストールしてみました。インストール作業自体はすぐに終わると思うので、少しepelやremiってなんぞやと言うところに触れてみたいと思います。

そもそもリポジトリとはなに?

Linuxのリポジトリとは、ソフトウェアやアプリケーションパッケージを管理しているマーケットです、
iPhoneのApp StoreやAndroidのGooglePlayをイメージするとわかりやすいかもです。

epelとremiって何?メリットは?

epelもremiもそれぞれのレポジトリを指すようです、2つともインストールしておく理由は、どちらかいいほうを取るためです。
epelにない場合はremiから、remiより最新のバージョンが使われている場合はepelからと言う保険的な感じらしいです。違ってたらごめんなさい。
そもそもCentOSには、公式のリポジトリが用意されていて、通常のyumコマンドで利用可能です、ですが、CentOSのリポジトリは、保守的で最新のソフトウェアやバージョンの更新が行われないので、CentOSにepelやremiというパッケージをインストールして、各リポジトリにある最新のソフトウェアを使おうということです。
実は、非公式なepelとremiリポジトリなんですが、epelのパッケージもremiのパッケージも公式のリポジトリからインストール出来るという点で少し安心して使っています。
例えで言うと、iPhoneで、AppStoreからGooglePlayをインストールして、Androidのアプリを使っちゃおうって感じです。

まずは、CentOS自体をアップデートしましょう。

[root@adan ~]# yum update

CentOSは保守的で、最新のソフトウェアやソースコードが反映されるの遅いので、
EPELとremiレポジトリの追加し、最新を使えるようにします。

[root@adan ~]# yum install epel-release
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: ftp.jaist.ac.jp
パッケージ epel-release-7-11.noarch はインストール済みか最新バージョンです
何もしません

ん!?入ってるぞ・・・さくらクラウドでは、デフォルトで入ってるらしいです。。。
続きまして、remiをインストール

[root@adan ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
http://rpms.famillecollet.com/enterprise/remi-release-7.rpm を取得中
警告: /var/tmp/rpm-tmp.exexDG: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 00f97f56: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:remi-release-7.3-2.el7.remi      ################################# [100%]

上手く行ったっぽいです。

インストール後には、epelリポジトリを優先的に使うような設定が有効になっています。
なので、yum updateコマンドを実行すると公式パッケージがEPELリポジトリのパッケージで上書きされてしまいます、なにぶん非公式なものなので、必要なときにだけ、epelリポジトリを使うようにしましょう。

epelの無効設定は、設定ファイルを開いて、

[root@adan ~]# vi /etc/yum.repos.d/epel.repo
[epel]の部分のenable=1を、enable=0 書き換えてるのみです。

remiの場合は、下記

[root@adan ~]# vi /etc/yum.repos.d/remi.repo
[remi]の部分のenable=1を、enable=0 書き換えてるのみです。

それでは、本題のPHPとMySQLとApacheのインストール作業に進みたいと思います。

Apache(アパッチ)のインストール

Apacheは、公式サイトのバージョンが最新に近い状態であったので、公式サイトからのインストールを行います。

[root@adan ~]# yum -y install httpd

インストールを完了後に、Apacheのバージョンを表示させて、インストールの確認をしましょう。

[root@adan ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr 20 2018 18:10:38

アパッチが起動しているか、OS再起動後も自動起動になってるかの確認

[root@adan ~]# systemctl is-enabled httpd
disabled

アパッチをOS再起動後も自動で起動するように設定

[root@adan ~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@adan ~]# systemctl is-enabled httpd
enabled

※インストール後にブラウザから確認できない場合はCentOS7のfirewalldの設定が必要かも♪
CentOS7のfirewalldにhttpとhttpsサービスを許可(Apacheへの外部からのアクセスを許可)する

MySQL5.7のインストール

MySQL開発元のOracleが公開しているyumリポジトリーを利用してインストールする

既存のMySQLとかは全部アンインストールしておく

[root@adan ~]# yum remove mysql* 

まずは、リポジトリの登録

[root@adan ~]# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

インストールを開始

[root@adan ~]# yum install -y mysql-community-server

インストールにしばらく時間はかかりましたが。無事完了でございます。

[root@adan ~]# mysql --version
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper

MySQL起動する

[root@adan ~]# systemctl start mysqld.service

MySQL5.7は、初期パスワードがログに出力されるとのことなので、mysqld.logの中をgrepで検索

[root@adan ~]# grep password /var/log/mysqld.log

次に、mysql_secure_installationを使って初期設定をしていきましょう。対話形式でわかりやすので。

[root@adan ~]# /usr/bin/mysql_secure_installation
下記順番に聞かれます。※新しいルートのパスワードは、大文字、小文字、数字、記号の全てが入っている必要があるので注意
Enter password for user root: //さっきログに吐かれていた初期パスワードを入力
Set root password? //ルートのパスワード変更する? Yでパスワード設定
Remove anonymous users? //誰でもログイン出来る状態だけど消す? Yで消しとく
Disallow root login remotely? //リモートからrootログインを許可しませんか? Yでしない
Remove test database and access to it? //テストデータベース消すよ? Yで消す
Reload privilege tables now? //設定をすぐに反映するか? Yで反映
All done!

MySQLへログインする

[root@adan ~]# mysql -u root -p

MySQL 5.7 からユーザーのパスワードの有効期限がデフォルトで360日になりました。 360日するとパスワードの変更を促されてログインできなくなります。
なんと、MySQL5.7から360日後にパスワードの変更を促されログインできないようになってるらしい。
そんなありがた迷惑機能をOFFにしておきましょう。

[root@adan ~]# vi /etc/my.cnf
//下記を追加(ついでにデフォルトの文字コードをUTF-8にしておく)
character-set-server=utf8
default_password_lifetime=0

[root@adan ~]# systemctl restart mysqld.service

その他諸々やっておいたほうがいい設定はありますが、とりあえずこんな所で。

MySQLの自動起動の設定もONにしておく

[root@adan ~]# systemctl enable mysqld.service
[root@adan ~]# systemctl is-enabled mysqld.service
enabled

PHP7.2のインストール

11年ぶりのメジャーアップデートらしく、にわかに盛り上がっていますねぇ。php6は開発途中でダメになったらしいです。
聞くところによると、新バージョンのZendエンジンを搭載、PHP5.6に比べて2倍以上のパフォーマンス向上、メモリ使用量を削減し、
ソースファイルのパースに抽象構文木を採用、スカラー型宣言、戻り値の型宣言、null合体演算子の追加、などなど、
各種の改良と新機能を搭載したらしいが、よくわからんが良くなったらしい♪

つづいて、PHPがインストールされているかをチェックします

[root@adan ~]# rpm -qa | grep php

インストールされている場合は、

[root@adan ~]# yum remove php-* 

で、アンインストールしておきましよう。

また、libmcryptを入れておかないと、php-mcryptがインストールできないので、前もって入れておく。

[root@adan ~]# yum --enablerepo=epel install libmcrypt 

インストールのその前に、PHP7.2が使えるか確認

[root@adan ~]# yum info --enablerepo=remi,remi-php72 php

//phpパケージ一覧を確認して、オプションとしてつける
[root@adan ~]# yum search --enablerepo=remi,remi-php72 php

下記、お待ちかねのPHP7.2インストールです。

[root@adan ~]# yum -y install --enablerepo=epel,remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

・・・省略・・・
・・・省略・・・

完了しました!
[root@adan ~]# 

注意:「–enablerepo=epel,remi」と、epelを入れてあげないと、エラーで勧めませんでした。

エラー: パッケージ: php-7.2.7-1.el7.remi.x86_64 (remi-php72)
             要求: libargon2.so.0()(64bit)

無事インストールできたか確認

[root@adan ~]# rpm -qa | grep php
php-mysqlnd-7.2.7-1.el7.remi.x86_64
php-json-7.2.7-1.el7.remi.x86_64
php-pecl-mysql-1.0.0-0.17.20160812git230a828.el7.remi.7.2.x86_64
php-cli-7.2.7-1.el7.remi.x86_64
php-xmlrpc-7.2.7-1.el7.remi.x86_64
php-mbstring-7.2.7-1.el7.remi.x86_64
・・・
[root@adan ~]# php -v
PHP 7.2.7 (cli) (built: Jun 20 2018 08:21:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

よっしゃ!成功♪

PHP7.2のphp.iniの設定を変更しておく

[root@adan ~]# vi /etc/php.ini
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_charset = none

Apacheの再起動をお忘れなく

# systemctl restart httpd.service