エンジニアブログ

エンジニアブログ

PHP・ImageMagickを導入してMovableTypeをダイナミック・パブリッシングで動かす方法

photo.jpg onagatani 2013年08月09日

お盆?そんなの関係ねーそんなの関係ねー、はいonagataniです。こんにちわ。

*タイトル修正しました
今回の記事は「デザイナー必見!VPSで高速なMovable Type用サーバをゼロから構築する方法」の第2回になります。
前回の方法でMTの動作、静的コンテンツ配信まではできていたかと思いますが今回はダイナミック・パブリッシングを動作させる所まで説明したいと思います。

ポイント

  • セキュリティと速度に考慮したApacheの導入・設定を行う
  • PHPなどの言語はxbuildで導入する

手順

前回の過程でApache(httpd)はyumで導入済みになるのでPHPを導入します。

PHPの導入

ポイント:PHPはアップデートが頻繁にありますが標準のyumリポジトリではアップデートがほとんどされません(本日日付だと5.3.3です)のでxbuildで最新版を導入します

xbuildの導入

cd ~
wget 'https://github.com/tagomoris/xbuild/archive/master.zip'
unzip master
mv xbuild-master xbuild

PHPのコンパイル

記事作成時点でのPHP5.4系の最新版を/usr/local/php-5.4.17以下にインストールします(基本全部入りなので必要のない機能は外して下さい)。

cd xbuild
./php-install 5.4.17 /usr/local/php-5.4.17 -- --with-apxs2=/usr/sbin/apxs --with-pear --with-gd --enable-sockets --with-jpeg-dir=/usr --with-png-dir=/usr --enable-exif --enable-zip --with-zlib --with-zlib-dir=/usr --with-kerberos --with-openssl --with-mcrypt=/usr --enable-soap --enable-xmlreader --with-xsl --enable-ftp --disable-cgi --with-curl=/usr --with-tidy --with-xmlrpc --enable-sysvsem --enable-sysvshm --enable-shmop --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-pcntl --with-readline --enable-mbstring --disable-debug --enable-intl --with-onig --with-freetype-dir --with-t1lib --with-libmbfl --with-pspell --with-libedit --with-snmp --with-pcre-dir
cp /etc/httpd/modules/libphp5.so /usr/local/php-5.4.17/

ちなみに前回のPerlのインストールではPerl::Buildを使用しましたがxbuildを使用すると少し簡単になります(xbuildが内部的にPerl::Buildを使用しています)

./perl-install 5.16.3 /usr/local/perl-5.16.3
/usr/local/perl-5.16.3/bin/cpanm XXX (CPANモジュールのインストール)

peclモジュールの導入

APCなどのモジュールを導入します。

/usr/local/php-5.4.17/bin/pecl install apc memcache

php.iniの修正

修正ファイル:/usr/local/php-5.4.17/etc/php.ini

◯最終行に以下を追加
extension=apc.so
extension=memcache.so

◯タイムゾーンを修正
修正前:;date.timezone =
修正後:date.timezone = Asia/Tokyo

◯PHPの情報出力抑制
修正前:expose_php = On
修正後:expose_php = Off

ImageMagickの導入(オプション)

PerlとPHPからImageMagickを使用する事が出来るように各言語用のバインディングもインストールします。Perlはconfigureオプションに--with-perlを付けるのを忘れない事、PHPは5.4系がImageMagickに対応できていないのでパスを通す作業が必要です。

cd ~
wget 'ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.6-8.tar.gz'
tar zxvf ImageMagick-6.8.6-8.tar.gz
cd ImageMagick-6.8.6-8
./configure --with-perl
make 
make install
cd PerlMagick
/usr/local/perl-5.16.3/bin/perl Makefile.PL
make install
ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
/usr/local/php-5.4.17/bin/pear config-set preferred_state beta
/usr/local/php-5.4.17/bin/pecl install imagick
echo "extension=imagick.so" >> /usr/local/php-5.4.17/etc/php.ini

ポイント

脆弱性対応などでPHPのアップデートが行われた場合は 以下のようにPHPのインストールパスを替えて既存のPHPに影響を与える事なく、複数バージョンのPHPをサーバにインストール可能です。

cd ~/xbuild
./php-install 5.4.XX /usr/local/php-5.4.XX --with以下は同一
cp /etc/httpd/modules/libphp5.so /usr/local/php-5.4.XX/
/usr/local/php-5.4.XX/bin/pecl install apc memcache
vi /usr/local/php-5.4.XX/etc/php.ini 修正内容は上記参照
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
/usr/local/php-5.4.XX/bin/pear config-set preferred_state beta
/usr/local/php-5.4.XX/bin/pecl install imagick
echo "extension=imagick.so" >> /usr/local/php-5.4.XX/etc/php.ini
service httpd restart

PHPのアップデート後に不具合が発生し元のバージョンに戻したい!という時も簡単です

# cp /usr/local/php-5.4.17/libphp5.so /etc/httpd/modules/
# service httpd restart

Apacheの設定

ApacheのVirtualhost・セキュリティ設定などを行います

修正ファイル:/etc/httpd/conf/httpd.conf

◯ServerTokensを以下のように修正
ServerTokens Prod

◯以下をそれぞれOffに修正
ServerSignature Off
UseCanonicalName Off

◯余計な設定をコメントアウト
#Alias /icons/ "/var/www/icons/"
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#Alias /error/ "/var/www/error/"

◯NameVirtualHostのコメントアウトを外す
NameVirtualHost *:80

◯最終行にPHPの設定を追加
LoadModule php5_module        /usr/lib64/httpd/modules/libphp5.so
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.html index.php

◯最終行にセキュリテイ設定を追加
Header always set X-Content-Type-Options nosniff
Header unset X-Powered-By

◯最終行にダミーのVirtualhostを設定(IPアドレスなどで直接サーバを参照された場合に意図しないコンテンツを表示しないようにする)

    Options -Indexes
    ServerName  dummy.example.jp
    TraceEnable Off
    
        Order deny,allow
        Deny from all
    


◯最終行にVirtualhost追加(ダミーのVirtualhostより先に記載しない事)

    ServerName 任意のドメイン名
    DocumentRoot /var/www/任意のドメイン名/htdocs
    ErrorLog    /var/www/任意のドメイン名/logs/error_log
    CustomLog   /var/www/任意のドメイン名/logs/access_log combined
    TraceEnable Off

    
        Options -Indexes FollowSymLinks
        AllowOverride All
    

    RewriteEngine On
    RewriteRule ^/cgi-bin/(.*) http://localhost:8080/cgi-bin/$1 [P,L,QSA]
    ProxyPassReverse / http://localhost:8080/cgi-bin/

Apacheのログをローテーション

ログが肥大化するのを防ぐために日別にアクセスログ、エラーログを分割し90日経過後に自動削除するように設定します

/var/www/*/logs/*log {
    daily
    dateext
    rotate 90
    dateext
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd graceful > /dev/null 2>/dev/null || true
    endscript
}

mt-config修正

ダイナミック・パブリッシングではデータベース接続にPDOを利用していますがUNIXソケット通信が使用できないようなのでmt-configを修正します

修正ファイル:mt-config

修正前:DBHost localhost
修正後:DBHost 127.0.0.1

ポイント:MySQLでは接続先ホスト名をlocalhostにするとTCP/IPではなくUNIXソケット通信にて接続を行ってしまいます

Apacheの起動

前回Nginxを導入・起動していますが、今回はNginxは使用しないので一旦停止し、代わりにapacheを起動します

service nginx stop
service httpd start

PHP動作テスト

以下のテスト用スクリプトを作成しブラウザから動作を確認します。例)http://任意のドメイン名/phpinfo.php

echo '<?php phpinfo() ?>' >> /var/www/任意のドメイン名/htdocs/phpinfo.php

完了

以上でPHP・ImageMagickの導入は完了です。ダイナミック・パブリッシングの自体の設定は他サイトを参考にお願い致します