「CentOS7 + Apache2.4 + MySQL5.7 + PHP7 + PHPMyAdmin」で環境を作る

LAMP環境を最新の環境で構築した時の備忘録です。

前提

客先からの依頼で、最新環境でのIntranet-Serverの構築依頼がありました。
社内Webアプリの開発環境及び運用Serverなので出来だけ最新の環境が良いとのこと。
「CentOS7 + Apache2.4 + MySQL5.7 + PHP7 + PHPMyAdmin」で環境を作る。

仮想環境上に「CentOS7 1611」をインストール

インストールするベース環境は、「サーバー(GUI使用)」を選択

CentOS7 初期設定

SELinux

SELinux (Security-Enhanced Linux) の現在の状態は以下のようにして確認できます。(デフォルトは有効)

SELinux を利用する場合、通常の Linux アクセス権の設定は問題なくとも、SELinux のアクセス制御によってアクセスが拒否され、サービス/アプリケーションが期待通りの動作をしないといった場合が発生することがあるため、サーバーに設定/公開するサービス/アプリケーションによっては、SELinux へのアクセス許可/不許可の設定が必要になることがあります。

設定対象とするサーバーが安全な社内のみの利用である等の理由で SELinux を無効にしたいといった場合は、以下のように設定して無効化できます。

ファイアウォール

ファイアウォールサービスの現在の状態は以下のようにして確認できます。

ファイアウォールサービスを利用する場合、デフォルトではインバウンド通信はほぼ許可されていないため、サーバーに設定/公開するサービス/アプリケーションに応じて、許可/不許可の設定が必要になります。

自身のネットワーク内で、設定対象とするサーバーの上位にファイアウォール機器が設置されており、サーバー側ではファイアウォールサービスは必要ないといった場合は、以下のようにして停止することも可能です。

システム最新化

システムをインストールした後は、可能であればシステムを最新化しておいた方がよいでしょう。

一般ユーザー追加

一般ユーザーを追加します。

root ユーザーにスイッチできるユーザーを限定するには以下のように設定します。(例として「toshi」ユーザーのみに限定)

sudo設定

作成した一般ユーザー(toshi)にsudo権限付与
visudoで/etc/sudoersを開き、下記の行のコメントアウトを外す

ユーザーをwheelグループに追加

wheelグループのみにする
下記の行のコメントアウトを外す

日本語化(ロケールの変更)

ロケール確認

リポジトリの設定

インストールに使うリポジトリの設定をします。
CentOSには、公式のリポジトリが用意されていて、通常のyumコマンドで利用可能ですが、保守的で最新のソフトウェアやバージョン更新が行われないので、epelやremiというパッケージをインストールして、各リポジトリにある最新のソフトウェアを利用します。

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

Linuxのリポジトリとは、ソフトウェアやアプリケーションパッケージを管理しているマーケットです。

EPELとREMIって何?メリットは?

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

epelのインストール

remiのインストール

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

BIND

名前解決サービスである DNS (Domain Name System) サーバーを構築します。

Apache

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

インストール

起動

自動起動の設定

MySQL 5.7

CentOS7では、mariaDB(MySQL互換のDB)がデフォルトでインストールされている場合があるので、MySQLと競合を起こさないように削除します。

mariaDB、既存MySQL削除

MySQL 5.7 インストール

※適宜URLは最新に変更すること(確認用URL)
https://dev.mysql.com/downloads/repo/yum/

バージョン確認

起動

自動起動の設定

rootユーザーの初期パスワード

MySQL5.7では、初回起動と同時にrootユーザーにランダム文字列のパスワードが設定され、ログに出力される。

初期設定

mysql_secure_installationコマンドで設定していきます。
※新しいルートのパスワードは、大文字、小文字、数字、記号の全てが入っている必要があるので注意

MySQL接続確認

my.cnfに以下を設定します

  • ストレージエンジンを、InnoDB
  • データファイル・ログファイルをテーブルごとに設定
  • 文字コードをutf8に

変更前の状態

my.cnfに追記します

変更後の確認

PHP7

libmcryptインストール

mcryptのインストールに必要なので先にインストール

FastCGIで動かせるPHP-FPM、キャッシュ周りのOPcache、APCuはイン スストールしておきます

インストール

php.ini 設定

初期ファイルのバックアップ

php.iniに以下を設定します

動作確認

ドキュメントルートにphpinfoを出力するphpファイルを作成します。

PHP-FPMとは

FPM(FastCGI Process Manager)はPHPのFastCGIでの実装の1つ。

FastCGIとは

CGIの高速化・負荷を軽減するための動作仕様の1つ。
前提として、webサーバでのPHPの実行環境は、モジュール版とCGI版という二種類があります。

モジュール版は、Webサーバーのプロセスの中でPHPを実行する方法です。 Apacheであれば基本はモジュール版で動作します。

CGI版は、実行ファイル形式で動くので、Webサーバーとは別のプロセスで実行されます。ユーザーからのリクエストの度に、プロセスの生成/破棄が発生するので、大量のリクエストがあると大量のプロセスの生成/破棄が発生し、この事がパフォーマンスを悪化します。
ゆえに、モジュール版で動作させるのが定石でした。

FastCGIは、CGIの高速化・負荷軽減を行った実行環境です。
初回リクエスト時に実行したプロセスをメモリ上へ保持することで、次回リクエスト時はメモリ上のプロセスを実行し、高速化や、プロセスの生成/破棄に伴うCPUへの負荷を軽減します。

パフォーマンス面は、モジュール版 >= FastCGI > CGIといったところ。

FastCGIの一番のメリットは、CGIのメリットを活かしつつ高速化したところだと思います。(CGIを動かす各ユーザーは、Webサーバーを動かすユーザーとは切り離されているので、他ユーザーに干渉してしまうといった危険がない)

ただし、現在のトレンドとしてapacheではなくnginxと組み合わせて使うことで、apacheモジュール版よりもハイパフォーマンスになります。

起動中か確認

起動/停止

apache conf設定
/etc/httpd/conf.d/ 配下にconfファイルを新規作成してhttpd.confで読み込まれるようにする

切り替え

モジュール版への切り替え

PHP-FPMへの切り替え

MySQL 5.7 : phpMyAdmin

phpMyAdmin をインストールして、Web ブラウザ経由で MySQL の操作ができるように設定します。

内部ネットワークからのアクセス許可の設定

apache再起動

クライアントPC で Web ブラウザを起動し、「http://(ホスト名またはIPアドレス)/phpmyadmin/」にアクセスします。
認証フォームが表示されるので、MySQL に登録したユーザーで認証してログインします。
ここでは例として root でログインします。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする