MariaDB10.2を導入する

MariaDBを導入します。

MariaDBリポジトリを追加

vim /etc/yum.repos.d/MariaDB.repo


[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enable=1

インストール
yum install --enablerepo=mariadb mariadb-server mariadb-client

vim /etc/my.cnf.d/server.cnf

# fulltext index
innodb_ft_min_token_size=1
table_definition_cache=400

# audit log
plugin_load=server_audit=server_audit.so
server_audit_logging=ON
server_audit_output_type=syslog

初期設定
/usr/bin/mysql_secure_installation

PHP7.1を導入する

PHPパッケージは、大きく分けて3種類があります。

  • php apacheのモジュール版。php-fpmを採用する場合、基本的に不要。
  • php-fpm  独立したプロセス版。
  • php-cli  コンソール版。コマンドラインからPHPを実行できるようになる。

PHP-FPM(First Process Manager)は、Apacheとは別のプロセスで動作する、PHPの実行環境です。大規模WEBサイトで採用されるような3層アーキテクチャ的には、アプリケーションサーバというものに相当します。OSSによるWeb3層アプリケーション

PHP-FPMの導入について解説します。

REMIリポジトリの追加

新しいPHPが利用できるようになります

リポジトリを追加します。
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

リポジトリを有効化します。
# vim /etc/yum.repos.d/remi.repo

[remi]
~
enabled=1

インストール

# yum install php-fpm php-cli

拡張パッケージのインストール

# yum install php-common php-mbstring php-devel php-mysql php-pdo php-pear
# yum install php-gmp php-mcrypt php-xml php-phpunit-PHPUnit php-pecl-xdebug php-gd php-xml php-intl

OPcacheをインストール
動的生成したWEBページをキャッシュします。
wikiや、wordpressのようなブログなど、比較的変更の少ない動的サイトで効果があります。

yum install php-opcache

Memcacheをインストール

分散型のキャッシュです。
WEBを複数台分散運用する際、マシン依存のないキャッシュです。

# yum install memcached php-pecl-memcached

PHP実行リクエストの待受け設定

WEBと同じサーバの場合は、Unixソケットを作成してリクエストを待ち受けるようにします。

# vim /etc/php-fpm.d/www.conf

; listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

; Unixソケットによる待受け時は、下記設定の明記が必須
listen.owner = apache
listen.group = apache

サービスの自動起動

# systemctl enable php-fpm.service

PHPの再起動

# systemctl restart php-fpm.service

apacheの転送設定

apacheで受けたphpの実行リクエストを、php-fpmに転送します。
WEBとAPPサーバが同じ場合は、パフォーマンス的に有利なUnixソケットを利用して接続します。
APPサーバを分離する場合は、ネットワーク越しに接続できるTCPを利用します。その場合、下記の「SetHandler “proxy:unix:~」行を無効にして、コメントアウトの方にIPアドレスを入れて行を有効化します

# vim /etc/httpd/conf.d/php-fpm.conf

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
    #SetHandler "proxy:fcgi://127.0.0.1:9000/"
</FilesMatch>

ファイアウォールの設定

httpをファイアウォールのサービスに追加し、恒久的な設定にする。
# firewall-cmd --zone=public --add-service=http --permanent

ファイアウォールの設定をリロードする。
firewall-cmd --reload

ファイルの書き込み権限

centos7は、rootで何でもかんでもやる古き良きLinuxユーザの名残が残っているようで、phpでファイルを出力すると、メンテナンス用のユーザで編集、削除ができず、ログなどの取扱いに苦労します。
また、phpで、フォルダやmkdirコマンドで、パーミッションの設定が常に0755になり、グループユーザでの書き込み、削除ができない状態になってしまいます。

この御時世、導入構築ならともかく、平時の運用でrootユーザを常用するのはなにかとアレなので、メンテナンス用のユーザでも、運用に支障が出ないように、設定を修正します。

wwwディレクトリのグループユーザでの管理

/var/www ディレクトリをグループユーザベースで管理する際の権限設定を説明します。
/home/username/website など、別ディレクトリに対して適用する場合は、/var/www を読み替えてください。

メンテナンス用のユーザをapacheグループに追加します。(例 hogehoge)
# usermod -a -G apache hogehoge

/var/www のグループ所有権をapacheグループに変更します。
# chgrp -R apache /var/www

/var/www のグループの書き込み許可を追加します。
# chmod 2775 /var/www

/var/www のサブディレクトリに対してグループの書き込み許可を追加します。
# find /var/www -type d -exec chmod 2775 {} \;

/var/www のファイルに対してグループの書き込み許可を追加します。
# find /var/www -type f -exec chmod 0664 {} \;

umaskの変更

centos7では、os全体のumaskが022になっています。
phpアプリケーション等でmkdirをした場合、777や775を設定しても、755のディレクトリが作成されてしまいます。
php-fpmのumaskを設定することで、解消されます。

php-fpmのumaskをサービス起動時に設定するようにします。
# vim /etc/systemd/system/php-fpm.service

.include /lib/systemd/system/php-fpm.service
[Service]
UMask=002

systemctlをリロードします。
# systemctl --system daemon-reload

PHPを再起動します。
# systemctl restart php-fpm.service

APACHE2.4でWEBサーバーを構築する

apacheとは、httpリクエストを処理するLinuxのソフトウェアです。
動作が安定していて比較的簡単に導入可能です。

CentOS7にapache2.4を導入する方法を解説します。

EPELリポジトリの追加

を公開しているEPEL(Extra Packages for Enterprise Linux)リポジトリを追加します。最新版のapacheが利用可能になります。

※ EPELとは、Extra Packages for Enterprise Linux(エンタープライズ向けの拡張パッケージ)の略

yumでインストールします。
# yum -y install epel-release.noarch

リポジトリをデフォルトで有効にすることで、yumによるupdateでも更新が掛かるようにします。
# vim /etc/yum.repos.d/epel.repo

[epel]
~
enabled=1

パッケージを更新します。
# yum update

apache2のインストール

apacheをyumでインストールします。
# yum install httpd

オリジナルの設定ファイルは基本的に、/etc/httpd/conf.d/以下にconfファイルを作成します。
例 hogehoge.conf
/etc/httpd/conf.d/hogehoge.conf

転送時の圧縮設定

http通信をgzipで圧縮するようにします。
分量の多いページや、回線が細い端末で見るときに効果があります。

# vim /etc/httpd/conf.d/deflate.conf

<Location \>
    SetOutputFilter DEFLATE
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    SetEnvIfNoCase Request_URI \.(gif|jpe?g|png|swf|ico)$ no-gzip dont-vary
    Header append Vary User-Agent env=!dont-vary
</Location>

KeepAliveの設定

一つのコネクションで多数のリクエストをさばけるようにします。
1コネクションでの最大リクエスト数と、コネクションを維持する時間を設定します。

# vim /etc/httpd/conf.d/keepalive.conf

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

1ページのリクエスト数と通信時間がカバーできる数字になっていればよいです。
F12を押して、Networkタブのrequestsの数と、DomContentLoadedの秒数が参考になります。

MPMモジュールをイベント駆動型に変更

# vim /etc/httpd/conf.modules.d/00-mpm.conf

# コメントアウト:
# LoadModule mpm_event_module modules/prefork.so

#コメントアウト解除:
LoadModule mpm_event_module modules/mod_mpm_event.so

サービスの自動起動

# systemctl enable httpd.service

apacheの再起動

# systemctl restart httpd.service