Webアプリエンジニア養成読本 Advent Calendar 2014 16日目の記事です。

今日は、Webアプリエンジニア養成読本(以下 先のムック)出版後にリリースされた CentOS 7 でPHPのサンプルアプリケーション”Tinitter”を動かしてみるお話です。

「大きな変更点」「Apache+PHPのインストール手順」「CentOS 7を使うにあたってのオススメリンク」の3点に分けてお話しします。手許に先のムックをお持ちの方は、3.2節 P.111をご覧ください。

大きな変更点

Red Hat Enterprise Linux 7.0、およびクローンOSであるCentOS 7は、以前のバージョンとは大きく変わった点がいくつもあります。その中でも目立つものは次の3つです。

  • デーモンの管理 – systemd の採用
  • ファイアウォールの管理 – firewalld の採用
  • ネットワーク関連の管理

プログラムこそCentOS 6系で動いていたものがそのまま使える事が多いのですが、管理のためのコマンドや設定ファイルの書き方が大きく変わりました。とはいえ、OSだけをいれてOSをじっくり検証…というのは根気がいる作業です。僕も、モティベーションが上げづらかった事を認めます!(キッパリ)

それなら、既に動くとわかっているプログラムが動くか試しながら、新しいOSの検証をやってみませんか?これなら、がんばれるはず!!

Apache+PHPのインストール手順

前提条件

説明は、主に3.2節の内容がCentOS 7になったときにどうなるかを中心に述べます。従って、CentOS 6で実際にこの手順を試した上で動いた方が対象となります。

あらかじめ、CentOS 7をインストールした環境を用意し(手元のVM上でOK)、手元からsshでリモートログインできる状態にして下さい。

手順は、特記がない限りrootユーザで作業を行います。”#”または”$”で始まる行は、コマンドを入力して下さい。

MySQLのインストール

CentOS 7から、MySQLの代わりにMariaDBが採用されました。ただ、今回は先のムックで紹介したMySQLをインストールする手順を紹介します。

執筆時点では、5.6.22がインストールできます。

# yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-client mysql-community-devel mysql-community-server
# systemctl list-unit-files --type=service | grep mysql
※サービスの起動が有効であるかを確認
mysql.service                               enabled
mysqld.service                              enabled

# systemctl start mysql.service
# ps auxwwf | grep mysql
※プロセスが起動している事を確認。プロセスIDは任意のものとなります。
root     11321  0.0  0.0 112656   972 pts/0    S+   20:53   0:00          \_ grep --color=auto mysql
mysql    11144  0.0  0.1 115216  1676 ?        Ss   20:53   0:00 /bin/sh /usr/bin/mysqld_safe
mysql    11295  2.2 11.0 696704 111504 ?       Sl   20:53   0:00  \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

# mysql_secure_installation
※質問には次の通り答えて下さい
Enter current password for root (enter for none): (何も入力せずにEnter)
Set root password? [Y/n] y
New password: (任意のパスワードを入力)
Re-enter new password: (同じパスワードを入力)
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

# mysql -u root -p -e "SELECT user, password FROM mysql.user;"
※以下の通り出力されればOK (?は任意の文字が入ります)
+------+-------------------------------------------+
| user | password                                  |
+------+-------------------------------------------+
| root | *???????????????????????????????????????? |
| root | *???????????????????????????????????????? |
| root | *???????????????????????????????????????? |
+------+-------------------------------------------+

初めてCentOS 7を触られた方は、サービスの起動や設定のコマンドがsystemdのものに変わった事を知っていただけたのではないでしょうか。これが、先に述べた大きな変更の中の1つです。

Apache, PHPのインストール

Apacheは引き続きCentOS公式リポジトリに用意されています。ただし、インストールされるバージョンが2.2系から2.4系に変わります。今回の手順ではバージョンが変わる事による影響は受けませんが、より深く入り込む事がある場合は、ドキュメントを見直して頂いた方が良いかと思います。

また、PHPが5.3系から5.4系にアップデートされました。そう、Tinitterを動かすためにPHPをビルドする必要がなくなったのです。これは吉報ですね。OSのバージョンが上がると、こういったメリットが出てくる事は見逃せません。

# yum install httpd php php-gd php-mbstring php-xml php-pdo php-mysql
# cp -a /etc/php.ini /etc/php.ini.orig
# vi /etc/php.ini   # 次のコマンドのdiffの結果になるように編集
# diff -su /etc/php.ini.orig /etc/php.ini
※diffの結果
--- /etc/php.ini.orig   2014-10-31 22:02:32.000000000 +0900
+++ /etc/php.ini        2014-12-15 21:04:55.572057529 +0900
@@ -875,7 +875,7 @@
 [Date]
 ; Defines the default timezone used by the date functions
 ; http://php.net/date.timezone
-;date.timezone =
+date.timezone = Asia/Tokyo
 
 ; http://php.net/date.default-latitude
 ;date.default_latitude = 31.7667
@@ -1663,7 +1663,7 @@
 ; Some encoding cannot work as internal encoding.
 ; (e.g. SJIS, BIG5, ISO-2022-*)
 ; http://php.net/mbstring.internal-encoding
-;mbstring.internal_encoding = EUC-JP
+mbstring.internal_encoding = UTF-8
 
 ; http input encoding.
 ; http://php.net/mbstring.http-input

# systemctl enable httpd.service
# systemctl list-unit-files --type=service | grep httpd
※サービスの起動が有効であるかを確認
httpd.service                               enabled

続いて、httpdを公開するためのセキュリティに関する設定を実施ます。

ファイアウォールの設定方法も変わります。CentOS 6まではiptablesで行いましたが、CentOS 7ではfirewalldを利用します。こちらも先に述べた大きな変更の中の1つです。

# firewall-cmd --permanent --add-service=http   # successとでればOK
# firewall-cmd --reload   # successと出ればOk
# firewall-cmd --list-all | grep httpd
※許可するサービスに登録されたかを確認
services: dhcpv6-client http ssh

# sudo setsebool -P httpd_can_network_connect 1   # selinuxの設定 httpdからmysql等につなげられるようにする
# getsebool httpd_can_network_connect
※httpdから別のネットワークに接続できるようになったかを確認
httpd_can_network_connect --> on

いよいよ、httpdを起動して動作確認できるステージに来ました。

# httpd -t    # Syntax OKとでるかを確認
# systemctl start httpd.service
# ps auxwwf | grep httpd
※プロセスが起動している事を確認。プロセスIDは任意のものとなります。root     11461  0.0  0.0 112656   972 pts/0    S+   21:09   0:00          \_ grep --color=auto httpd
root     11454  0.1  1.2 323260 12424 ?        Ss   21:08   0:00 /usr/sbin/httpd -DFOREGROUND
apache   11455  0.0  0.6 323392  6292 ?        S    21:08   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache   11456  0.0  0.6 323392  6292 ?        S    21:08   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache   11457  0.0  0.6 323392  6292 ?        S    21:08   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache   11458  0.0  0.6 323392  6292 ?        S    21:08   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache   11459  0.0  0.6 323392  6292 ?        S    21:08   0:00  \_ /usr/sbin/httpd -DFOREGROUND

# echo "<?php echo phpinfo();" > /var/www/html/phptest.php    # 動作確認用PHPファイル作成

この後、お手元のブラウザで http://[サーバのIPアドレス]/phptest.php にアクセスしてみましょう。phpinfoが表示されれば成功です。

phpinfo_head

僕が試した際に取得したphpinfoの全内容もアップしてあります。めっちゃ縦長ですがご興味のある方はどうぞ。 → phpinfo | Flickr

最後に、phptest.phpを削除しておきましょう。

# rm /var/www/html/phptest.php

Tinitterのデプロイ

Tinitterのデプロイ方法はほとんど変わりありません。3.3節 P.118の内容を実施して下さい。

注意する点として、最後の3手順で”service”コマンドを使っている部分です。こちらは、”systemd”のコマンドに変わります。どんなものかは、先ほどの手順を見ると…推測できそうでしょうか?

僕の手元でも無事Tinitterが動きました。

Tinitter

いかがでしたでしょうか?CentOS 7、使える気がしてきませんか?

CentOS 7を使うにあたってのオススメリンク

新しいバージョンのOSを試す際、元々やっていた手順やアプリケーションを新しいOSで再現可能か試すだけでも知見が得られるかと思います。とはいえ、最終的には体系的にやらなければならないのも事実です。

せっかくですので、僕が参考にしているオススメリンクを紹介します。公式ドキュメントだけでは理解が大変な時や、学習に際にお役立て下さい。

ほとんどRed Hatのなかの人の記事ですね。

そんなにこわくないCentOS 7

いかがでしたか。CentOS 7で先のムックのサンプルアプリケーションであるTinitterを動かすためのお話を、「大きな変更点」「Apache+PHPのインストール手順」「CentOS 7を使うにあたってのオススメリンク」に分けて述べました。

今までやってきた事をどうやって置き換えるかと考えると、新しいものとはいえ何とかがんばれそうに思えませんか?もちろん、体系的に学ぶ事も大切ですが、まずは動かない事には心が折れることもままあります。そう言った時に、このエントリが一助になれば幸いです。

最後にちょっとだけ宣伝です。

僕の現職の上司である @netmarkjp さんが、ITインフラの設計・構築・運用・そしてチューニングまでを体系的に解説した本を出します。特に、チューニングのための指標の読み方は多くの方に役立つものになると思います。ITインフラにお悩みの方、先のムックの内容より更に一歩進んでみたい方は、ぜひお買い求め下さい。

また、Webアプリエンジニア養成読本 Advent Calendar 2014では読者の皆様からの感想・実践エントリも大募集中です!ふるってご参加ください!!!

それでは皆様、ごきげんよう。

※大型書店で立ち読みしてみてね!