以前、XAMPPをインストールして、Webアプリ を動作させるための環境を構築する方法について書きました。
server-engineer.hatenablog.com
今回は、 CentOS に LAMP環境を構築する方法についてまとめておこうと思います。
※提供するサービスによって、環境の設定を調整する必要などもありますが、この記事は最低限の手順のみをまとめております。
CentOS は、現在最新バージョンであるCentOS 7.3 を利用します。
さくらVPSの場合は、提供時のOSが CentOS 6 であるため、カスタムOS で 最小構成の CentOS 7 に再インストールして利用します。
CentOS 6 でもいいのですが、新規でサーバーを立ち上げる場合などは、サポート機関の長いOSにしておいた方がよいためです。
CentOS の サポート期限に関しては、下記をご参照ください。
server-engineer.hatenablog.com
CentOS7でLAMP環境を構築する方法
CentOS では、LAMP環境を構築するためのサービスは、すべて標準リポジトリからインストール可能であるため、yumコマンドを用いて、インストールします。
そして、最低限設定ファイルを編集して、サービスの起動を行います。
Apache インストール、設定
yumからインストールします
# yum install httpd mod_ssl
httpsプロトコルも対応するために、mod_ssl もインストールします
次に、設定ファイルを編集していきます。
最低限ですが、下記の差分部分を変更します
# diff -u /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf
-------
-#ServerName www.example.com:80
+ServerName www.example.com ←ServerName設定
- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
+ #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ←CGIを利用しない場合は、不要のため、コメントアウトします
-<Directory "/var/www/cgi-bin">
- AllowOverride None
- Options None
- Require all granted
-</Directory>
+#<Directory "/var/www/cgi-bin">
+# AllowOverride None
+# Options None
+# Require all granted
+#</Directory>
-------
diff -u /etc/httpd/conf.d/ssl.conf.org /etc/httpd/conf.d/ssl.conf
-------
-#ServerName www.example.com:443
+ServerName www.example.com ←ServerName設定
-SSLProtocol all -SSLv2
+SSLProtocol all -SSLv2 -SSLv3 ←セキュリティ観点から、SSLv3プロトコルも無効にする設定とします
-SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
+SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4 ←セキュリティ観点から、RC4も無効にする設定とします
+SSLHonorCipherOrder on ←セキュリティ観点から、有効にしています
-------
設定ファイルを変更した後は、書き方等に問題がないか下記コマンドよりチェックします
# httpd -t
Syntax OK ←問題なければ、このように出ます。
それでは、次に、PHPの設定を行います
PHP インストール、設定
yumからインストールします
# yum install php php-mbstring php-mysql php-gd
日本語環境も対応するために、php-mbstring もインストールします
次に、設定ファイルを編集していきます。
最低限ですが、下記の差分部分を変更します
# diff -u /etc/php.ini.org /etc/php.ini
--------
-;date.timezone =
+date.timezone = Asia/Tokyo
-;mbstring.language = Japanese
+mbstring.language = Japanese
-;mbstring.internal_encoding = EUC-JP
+mbstring.internal_encoding = UTF-8
-;mbstring.http_input = auto
+mbstring.http_input = auto
-;mbstring.http_output = SJIS
+mbstring.http_output = UTF-8
-;mbstring.encoding_translation = Off
+mbstring.encoding_translation = On
-;mbstring.detect_order = auto
+mbstring.detect_order = auto
--------
設定ファイルの確認は、下記コマンドで行ってみましょう
# php -i | grep -E "timezone|mbstring"
"php -i" で phpの設定内容を出力し、grepでキーワード部分だけをピックアップする感じです。
設定ファイルに記載した内容が出力されればOKです。
今度は、MySQL の設定を行っていきます
MySQL (MariaDB) のインストール、設定
CentOS7 より、標準リポジトリに登録されているのが MySQL から MariaDB に変わったため、MariaDBのインストールを行います
yumからインストールします
# yum install mariadb-server
次に、設定ファイルを編集していきます。
最低限ですが、下記の差分部分を変更します
# diff -u /etc/my.cnf.d/server.cnf.org /etc/my.cnf.d/server.cnf
--------
[mysqld]
+bind-address=127.0.0.1 ←セキュリティ観点から、ローカルからの接続のみ許可する設定にしています
+character-set-server=utf8
--------
LAMPで必要なパッケージはすべて設定できましたので、サービスの起動 と 自動起動設定をします
サービス起動、自動起動設定
下記コマンドより、サービス起動します
# systemctl start httpd
# systemctl status httpd ←httpd.serviceの状態を確認します
# systemctl start mariadb
# systemctl status mariadb ←mariadb.serviceの状態を確認します
PHPはモジュール版として利用し、 httpdサービスから読み込みます。
PHPは、モジュール版とCGI版があるのですが、その辺の内容については、またどこかでまとめようと思っています。
mariadbサービスの起動が確認できたら、rootユーザーのパスワードを設定しておきましょう。インストール直後はrootユーザーのパスワードが設定されていないためです。
# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
・・・・
MariaDB [(none)]> SET PASSWORD FOR root@localhost = PASSWORD('****'); ←**** の部分を設定したいパスワードに変更してください
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> \q
Bye
どちらのサービスも起動できたこと確認したら、OS起動したときに、自動的にサービスが起動するように設定しておきます。この設定をしておけば、メンテナンス時などにOS再起動した後などに、いちいちサービス起動する必要が無いため、楽になりますね。
# systemctl enable httpd
# systemctl enable mariadb
それでは、ポートの状況を確認してみましょう。
# ss -nato
下二つの赤丸の部分が、httpdサービスで 80/tcp, 443/tcp が LISTEN状態であることが確認できます。そして、一番上の赤丸部分が、mariadbサービスで 127.0.0.1 に対して 3306/tcp が LISTEN状態であることが確認できます。
上記より、mariadbサービスへアクセスする場合は、ローカルからのみの接続しか受け付けていないことがわかります。
centos7 を最小構成でインストールした場合は、ソフトウェアのファイアウォールであるfirewalldが自動起動しているはずなので、そこも設定してあげる必要があります。
firewalldの設定
まず、現在の状態を確認してみることにしましょう
# firewall-cmd --get-active-zones ←現在アクティブになっているゾーンを表示する
# firewall-cmd --list-all --zone=public ←"--zone"でゾーンを指定することで、そのゾーンの設定内容が確認できます
上記だと、publicというゾーンのみがアクティブになっており、publicゾーンの設定内容が適応されている状態になっています。
http と https のサービスを追加することで、それぞれのプロトコルで使用されるデフォルトポートが開放されるようになります。
登録できるサービスと設定の詳細内容については、下記フォルダ以下にあるファイルで確認できます。ファイルは、xml形式で書かれています
# ls /usr/lib/firewalld/services/
それでは、publicゾーンに http と https のサービス を追加してみましょう。
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload ←"--permanent"オプションを付けると永続的な設定として登録されますが即時反映されないため、設定内容のリロードが必要になります
SELinux無効化設定
CentOS7は、SELinuxデフォルト有効になっています。有効のまま様々なサービスが正常に動くように設定するのが一番良いですが、ここでは、無効化設定としておきます。
# getenforce ←SELinux設定状態の確認
Enforcing
# setenforce 0 ←SELinux一時的に無効化(再起動後に設定が戻ります)
#
# vi /etc/sysconfig/selinux
-----
・・・
SELINUX=disabled ←SELinux無効設定
・・・
-----
どこかで、SELinuxについてまとめたいですね。。。
それでは、最後に動作確認をしてみます。
LAMP環境 動作確認
WebブラウザからアクセスしてPHPが動作しているかを確認するために、下記のテストページを作成します。
# cat /var/www/html/info.php
<html>
<body>
<?php phpinfo(); ?>
</body>
</html>
上記のテストページ(info.php)を作成したら、Webブラウザからアクセスしてみましょう。CentOS7のIPアドレスをしてください。
Server API のところが、"Apache 2.0 Handler" となっている場合、PHPがモジュール版版として認識されているということになっています。
今度は、Mariadbにもアクセスできるかを確認するために、下記のテストページを作成します。
# cat /var/www/html/testDB.php
<html><head><title>テストページ</title></head><body>
<?php
$user = "root";
$pass = "****"; ←rootユーザのパスワードを入力します
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SHOW DATABASES') as $row) {
print $row[Database] . "<br />";
}
$dbh = null;
} catch (PDOException $e) {
print "エラー: ". $e->getMessage() . "<br />";
die();
}
?>
</body></html>
Webブラウザから上記テストページ(testDB.php)にアクセスし、データベース一覧が表示できれば、確認OKです。
これで、LAMP環境の構築は終了となります。
いかがだったでしょうか。
うまく行かない場合は、直前に行った設定内容に間違えが無いか?設定漏れがないか?など見直しながら進めてみてください。
ではまた!