CentOS 7.7:HTTP/2対応LAMP環境構築

CentOS 7.7に、HTTP/2対応のLAMP環境(Linux,Apache,MariaDB,PHP)を構築します。Apache 2.4(event MPM) / MariaDB10 / PHP7.3(PHP-FPM) の最新バージョンを CentOSに yumでインストール、セキュリティと速度を向上させます。(2019/10/27作成)

Apache TomaszProszek / Pixabay

0.環境

$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

1.Apacheインストール

1)httpd,iusレポジトリ用パッケージよりインストール

$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm

$ sudo vi /etc/yum.repos.d/ius.repo
enabled=0 <= [ius] 1から0に変更する

2)依存関係のあるパッケージの追加

$ sudo yum install openldap-devel expat-devel libdb-devel mailcap system-logos

3)libnghttpインストール

$ sudo yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libnghttp2-1.31.1-2.el7.x86_64.rpm

4)yumコマンドによるhttpdのインストール

$ sudo yum install --disablerepo=base,extras,updates --enablerepo=epel,ius httpd httpd-devel mod_ssl
$ yum list installed | grep httpd
httpd24u.x86_64                    2.4.41-1.el7.ius               @ius
httpd24u-devel.x86_64              2.4.41-1.el7.ius               @ius
httpd24u-filesystem.noarch         2.4.41-1.el7.ius               @ius
httpd24u-mod_ssl.x86_64            1:2.4.41-1.el7.ius             @ius
httpd24u-tools.x86_64              2.4.41-1.el7.ius               @ius

5)バージョン確認

$ httpd -V | head -n 1
Server version: Apache/2.4.41 (IUS)

2.PHPインストール

1)EPEL リポジトリのインストール手順

※EPELは既にインストール済みの場合は不要

$ sudo yum install epel-release
または
$ rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2)Remi リポジトリのインストール手順

$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ rpm -qa | grep remi-release
remi-release-7.6-2.el7.remi.noarch
$ yum info --enablerepo=remi php73

3)mcrypt系の依存パッケージを解決する

$ sudo yum install --enablerepo=epel,remi,remi-php73 libmcrypt libmcrypt-devel

4)PHP7.3をインストール

$ sudo yum install --enablerepo=epel,remi,remi-php73 php php-fpm php-devel php-mbstring php-pdo php-gd php-xml php-pecl-mcrypt php-opcache php-pecl-apcu php-mysqlnd php-cli

4)バージョン確認

$ php -v | head -n 1
PHP 7.3.10 (cli) (built: Sep 24 2019 09:20:18) ( NTS )

3.MariaDBインストール

1)リポジトリインストール

$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
バージョン指定したい場合は以下
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=mariadb-10.0
その他のオプションは下記URLに記述あり
https://mariadb.com/kb/en/the-mariadb-library/mariadb-package-repository-setup-and-usage/

2)インストール

$ sudo yum install MariaDB-server MariaDB-client

3)バージョン確認

$ mysql --version
mysql  Ver 15.1 Distrib 10.4.8-MariaDB, for Linux (x86_64) using readline 5.1

4)サービス開始と自動起動設定

$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
$ sudo systemctl is-enabled mariadb
enabled

5)初期設定

$ sudo mysql_secure_installation

Enter current password for root (enter for none): enter

Switch to unix_socket authentication [Y/n] n

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

Thanks for using MariaDB!
$ sudo vi /etc/my.cnf.d/server.cnf

[mariadb]
character-set-server = utf8mb4

$ sudo vi /etc/my.cnf.d//mysql-clients.cnf

[mysql]
default-character-set = utf8mb4

◆mariadbメモ

チューニング例(1) 4GB割り当て
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
read_buffer_size = 8M

チューニング例(2) 2GB割り当て
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
read_buffer_size = 4M

チューニング例(3) 1GB割り当て
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
read_buffer_size = 2M

チューニング例(4) 512MB割り当て
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
read_buffer_size = 1M

4.Apache2.4(event MPM)設定

1)Apache2.4+PHP-FPMの「httpd.conf」

$ sudo vi /etc/httpd/conf.modules.d/00-mpm.conf

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # コメントアウト
LoadModule mpm_event_module modules/mod_mpm_event.so # 有効にする

# Event
<IfModule mpm_event_module>
    StartServers 2
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadsPerChild 25
    MaxRequestWorkers 150
    MaxConnectionsPerChild 1000

    ServerTokens ProductOnly
    ServerSignature Off
    KeepAlive On
    KeepAliveTimeout 15
    MaxKeepAliveRequests 1000

    # Apacheで PHP-FPMを動かすなら ProxyPassMatchではなく SetHandlerを使う
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
    </FilesMatch>

    # Unixソケットを使っている場合は以下
    #<FilesMatch \.php$>
    #    SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
    #</FilesMatch>
</Ifmodule>

2)phpモジュール読み込みの無効化

$ sudo vi /etc/httpd/conf.modules.d/15-php.conf

## 以下コメントアウトする
## Cannot load both php5 and php7 modules
#<IfModule !mod_php5.c>
#  <IfModule prefork.c>
#    LoadModule php7_module modules/libphp7.so
#  </IfModule>
#</IfModule>
#
#
#<IfModule !mod_php5.c>
#  <IfModule !prefork.c>
#    LoadModule php7_module modules/libphp7-zts.so
#  </IfModule>
#</IfModule>

3)Apache2.4+PHP-FPMのhttpd.conf

$ sudo vi /etc/php-fpm.d/www.conf

# TCP
listen = 127.0.0.1:9000
↓↓
# UNIXドメインソケット
listen = /var/run/php-fpm/php-fpm.sock

#php-fpmオーナー設定
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
↓↓
listen.owner = apache
listen.group = apache
listen.mode = 0660

4)php-fpm起動・自動起動

$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm
$ sudo systemctl is-enabled php-fpm
enabled

5)httpd再起動・自動起動

$ sudo systemctl restart httpd
$ sudo systemctl enable httpd
$ sudo systemctl is-enabled httpd
enabled

以上

About yoshimasa

埼玉県さいたま市在住、2男3女のパパです。Linux系の技術情報を中心にまとめています。1978年2月生まれ。