CentOS7にApache2.4+PHP7+mysql5.7のLAMP環境構築

CentOS7にApache2.4、PHP7、MySQL5.7をインストールしてLAMP環境を構築する手順をまとめています。特にWordPressを使用する場合はPHP5とPHP7で大違いです。WordPress用のLAMP環境を構築する場合は参考にしていただければと思います。

目次

1. Apache2.4のインストール

Apache2.4をインストールしていきます。

インストール

CentOS7では、デフォルトでyumを使用すると、Apache2.4がインストールされます。

# yum -y install httpd

インストールされているかの確認は以下で行えます。

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   May 12 2016 10:27:23

httpd サービスの自動起動設定

httpdのサービスの自動起動設定を行います。

# systemctl enable httpd

httpd サービスを開始

httpdサービスを開始します。

# systemctl restart httpd

2. iptablesの設定

外からアクセスできるようにhttpポートの穴あけを行います。

# firewall-cmd --add-service=http --permanent 
# firewall-cmd --reload 

3. MySQL5.7のインストール

MySQL5.7をインストールしていきます。

競合が起きないようにmariaDB削除

競合が起きないようにmariaDB削除します。

# yum -y remove mariadb-libs
# rm -Rf /var/lib/mysql/

yumのリポジトリを追加

CentOS7にMySQL5.7をyumでインストールするにはリポジトリの追加が必要です。

# yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

追加されたかの確認

MySQL5.7のリポジトリが追加されていることを確認します。

# yum list | grep mysql
・・・略・・・
mysql-community-server.x86_64              5.7.13-1.el7                @mysql57-community
・・・

インストール

mysql-community-serverをyumでインストールします。

# yum -y install mysql-community-server

インストールされたかの確認

MySQL5.7がインストールされていることを確認します。

# mysqld --version
mysqld  Ver 5.7.13 for Linux on x86_64 (MySQL Community Server (GPL))

サービスの自動起動設定

mysqldのサービスの自動起動の設定を行います。

# systemctl enable mysqld.service

MySQLの起動

mysqldのサービスを起動します。

# systemctl restart mysqld.service

初期パスワードを探す

初期パスワードがあり、ログより探す必要があります。

# grep password /var/log/mysqld.log
2016-07-06T02:58:35.498209Z 1 [Note] A temporary password is generated for root@localhost: <MySQL5.7の初期パスワード>

初期設定

以下のコマンドで初期設定を行います。パスワードはポリシーが厳しいので英数字記号を組み合わせて、判定にクリアするように入力する必要があります。

# /usr/bin/mysql_secure_installation

設定ファイル編集

パスワードの有効期限をOFF

デフォルトで1年後にパスワードの有効期限が切れる設定になっています。覚えてられなくて、アプリが1年後に動かなくなると怖いので、「default_password_lifetime=0」でoffにします。余談ですが、覚えやすいパスワードにする運用が始まるなど、パスワードを替えることもリスクになる場合があるので初めに厳しいパスワードにして厳重に監視するのもいいかもしれません。

設定ファイル編集例

ここでは以下のような設定を追加してみました。

# vi /etc/my.cnf
[mysqld]
:
default_password_lifetime=0
character-set-server = utf8
max_allowed_packet=32m
max_connections = 500
max_prepared_stmt_count=1000000
read_buffer_size = 256K
read_rnd_buffer_size = 256K
join_buffer_size = 256K
sort_buffer_size = 256K
query_cache_limit = 1M
query_cache_size = 32M
table_open_cache = 1024
table_definition_cache=500
thread_cache_size = 80
open_files_limit = 10000
binlog_cache_size = 2M
tmp_table_size = 16M
:

MySQL再起動

MySQLのサービスを再起動します。

# systemctl restart mysqld

接続確認

MySQLにmysqlクライアントを使用して接続確認を行います。

$ mysql -u root -p -e "SELECT Host,User FROM mysql.user;"
Enter password:
+-----------+-----------+
| Host      | User      |
+-----------+-----------+
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+

4. PHP7のみを導入する場合

本記事内では「PHP7」を導入する方法と「PHP7+OPCache+APCu」を導入する方法を記載しています。PHP7よりもPHP7+OPCache+APCuの方が3倍くらい高速です。以下は、PHP7の方の導入方法です。

4.1. PHP7インストール

EPELリポジトリのインストール

# yum -y install epel-release

Remiリポジトリのインストール

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHP7のインストール

PHP7をインストールします。

# yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-mysql

確認

PHP7がインストールされているか確認します。

# php -v
PHP 7.0.8 (cli) (built: Jun 22 2016 11:57:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

4.2. ApacheとPHPの設定

最低限以下の設定がないとPHP7がApacheで動きません。

#php
<IfModule prefork.c>
  #LoadModule php5_module modules/libphp5.so
  LoadModule php7_module modules/libphp7.so
</IfModule>

その他、セキュリティ面などApacheとPHPの設定変更が必要です。

Apache2.4の再起動

# systemctl restart httpd.service

以上で完了です。適当なPHPファイルを置いて表示できるか確認できればOKです。

5. PHP7+OPCache+APCuを導入する場合

本記事内では「PHP7」を導入する方法と「PHP7+OPCache+APCu」を導入する方法を記載しています。以下は、PHP7+OPCache+APCuの導入方法です。

5.1. PHP7+OPCache+APCuインストール

EPELリポジトリのインストール

# yum -y install epel-release

Remiリポジトリのインストール

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHP7+OPCache+APCuなど関連モジュールのインストール

PHP7をインストールします。

# yum remove php* -y
# yum --enablerepo=remi,remi-php70 install php php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken

確認

PHP7がインストールされているか確認します。

# php -v
PHP 7.0.8 (cli) (built: Jun 22 2016 11:57:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

php-fpmの自動起動設定

# systemctl enable php-fpm

php-fpmの再起動

# systemctl restart php-fpm

5.2. Apacheとphp-fpmの設定

httpd.confまたはインクルードするconfファイルにて最低限以下の設定を行います。

#php
<IfModule prefork.c>
  #LoadModule php5_module modules/libphp5.so
  LoadModule php7_module modules/libphp7.so
</IfModule>
ProxyPassMatch ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/<公開ディレクトリ例 /var/www/html>/$1
DirectoryIndex /index.php index.php

その他、セキュリティ面などApacheとPHPの設定変更が必要です。

Apache2.4の再起動

# systemctl restart httpd.service

php-fpmプロセスの確認

# ps -aef | grep php-fpm

以上で完了です。適当なPHPファイルを置いて表示できるか確認できればOKです。

ページが表示されない、パミッションエラーとなる場合

SELinuxの動作状況は getenforce コマンドを調べられます。

SELinux機能、アクセス制御が有効な場合は、「enforcing」と表示されます。

SELinuxを一時的に無効にする場合は以下のコマンドを実行します。

# setenforce 0

SELinuxを常に無効にする場合は、/etc/sysconfig/selinuxを修正します。

SELINUX=disabled

参考)RedisでPHP7+OPCache+APCu環境のWordPressよりも3倍以上高速化する方法

WordPressは、PHPの速度がサーバサイドの大半を占め、PHPの速度がものをいいます。PHP5をそのまま使うとかなり遅いです。PHP7+OPCache+APCuにするとかなり高速化されるのですが、Redisを使用することでさらに3倍以上も高速化されます。

※注意)本記事ですが、ページがキャッシュされるわけですので、キャッシュされてほしくないページがキャッシュされないか十分に検証が必要です。

続きを読む

更新履歴

更新履歴になります。

  • 2016年08月02日 PHP7+OPCache+APCuの導入方法について追記しました。
  • 2016年07月06日 ページを作成しました。

SNSでもご購読できます。