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

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

これから、PHP7.3と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 -y 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.

※インストール後にブラウザから確認できない場合は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.3のインストール

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.3が使えるか確認

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

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

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

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

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

完了しました!

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

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

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

[root@adan ~]# rpm -qa | grep php
php-mysqlnd-7.3.14-1.el7.remi.x86_64
php73-php-json-7.3.14-1.el7.remi.x86_64
php-pecl-mcrypt-1.0.3-1.el7.remi.7.3.x86_64
php-xmlrpc-7.3.14-1.el7.remi.x86_64
・・・
[root@adan ~]# php -v 
PHP 7.3.14 (cli) (built: Jan 21 2020 09:59:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies

よっしゃ!成功♪

PHP7.3の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

プロに聞いてみる
株式会社adanはエンジニアのキャリアに真剣に向き合っています。
企業の情報エンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。