PHP・ImageMagickを導入してMovableTypeをダイナミック・パブリッシングで動かす方法
お盆?そんなの関係ねーそんなの関係ねー、はい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 ◯最終行にVirtualhost追加(ダミーのVirtualhostより先に記載しない事)Order deny,allow Deny from all 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の導入は完了です。ダイナミック・パブリッシングの自体の設定は他サイトを参考にお願い致します