TinyCoreでFCGIのインストール(Movable Type高速化)

MovableTypeは遅いのでFCGIを入れよう

Movable Typeが遅くて、FCGIを入れたいと思っていました。紆余曲折あったのですが、ようやくできました。結論から言うと、必要なモジュールは3つで、そのうち1つはtczがリポジトリにもあるので、2つは自作になります。ダウンロードもできるようにしますので、ソースからビルドしない場合は設定から見てください。

結果、目に見えて高速になりました。

1. fcgiのインストール

このモジュールはtczが4.xのリポジトリにあるので、そのままインストールします。

(TinyCore/Microcore 4.x系を使っている場合)
$ tce-load -wi fcgi
(TinyCore/Microcore 5.x系/6.x系を使っている場合)
$ wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/tcz/fcgi.tcz
$ tce-load -i fcgi.tcz

2. perl_FCGIの作成

ここからperlモジュールのFCGIをインストールします。いつものようにtczを作成したいので、/tmpで作業します。

(準備)
$ tce-load -i compiletc
$ tce-load -i squashfs-tools-4.x
$ cd /tmp
(インストール先を/tmp/以下にする)
$ cpan
> o conf makepl_arg "LIB=/tmp/pkg/usr/local/lib/perl5/5.14.1 \
PREFIX=/tmp/pkg/usr/local/lib/perl5/5.14.1 \
INSTALLMAN1DIR=/tmp/man1 INSTALLMAN3DIR=/tmp/man3"
> o conf commit
> quit
(FCGIのビルド)
$ cpan FCGI
(tcz化)
$ mksquashfs pkg perl_FCGI.tcz
$ cd pkg;find usr -not -type d > ../perl_FCGI.tcz.list;cd ..
$ cp perl_FCGI.tcz.* /mnt/sda1/tce/optional
$ tce-load -i perl_FCGI.tcz
$ sudo rm -rf pkg

3. mod_fcgid作成

TinyCore/MicrocoreのデフォルトのApache2.tczにはmod_fcgidが入っていないので、ビルドする必要があります。

(ビルドするための開発パッケージをインストール)
$ tce-load -wil apache2-dev
(mod_fcgidをダウンロード、バージョンはその時の最新版を使ってください)
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.bz2
$ tar xvfj mod_fcgid-2.3.9.tar.bz2
$ cd mod_fcgid-2.3.9

ここでconfigure.apxsを動かしたいのですが、なぜかスクリプトがうまく動作しなかったので、以下のようなハックを入れました。

$ sudo rm /usr/local/bin/apxs
$ sudo cp /usr/local/apache2/bin/apxs /usr/local/bin/
$ sudo vi /usr/local/bin/apxs

ここで、最初の行

#!/usr/bin/env perl -w -w

を以下のように編集します。

#!/usr/bin/perl -w -w

あとは普通にインストールします。

$ ./configure.apxs
$ make
$ make install

ただ、これだと/usr/local/apache2/modulesに直接インストールされてしまい、tczされてないので、以下でtcz化します。

$ cd /tmp;
$ mkdir -p pkg/usr/local/apache2/modules
$ mv /usr/local/apache2/modules/mod_fcgid.so pkg/usr/local/apache2/modules
$ mksquashfs pkg apache2-mod-fcgid.tcz
$ cd pkg;find usr -not -type d > ../apache2-mod-fcgid.list;cd ..
$ cp apache2-mod-fcgid.tcz * /mnt/sda1/tce/optional
$ tce-load -i apache2-mod-fcgid.tcz
$ sudo rm -rf pkg

4. 設定

さて、上記で作ったmod_fcgidに関する設定をしておきます。実は先ほどのmod_fcgidのmake installで既に/usr/local/apache2/conf/httpd.confに次行が追加されています。

LoadModule fcgid_module modules/mod_fcgid.so
(バックアップはhttpd.conf.bakにあります)

ついでに、Movable TypeのFCGIインストール説明ページにある次の行をhttpd.confに追加しておきます。

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
SocketPath /tmp/fcgid_sock/
IPCConnectTimeout 20
MaxProcessCount 8
DefaultMaxClassProcessCount 2
TerminationScore 10
SpawnScore 80
IdleTimeout 300
</IfModule>

<Directory "/var/www/cgi-bin/mt">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
<FilesMatch "^mt(?:-(?:comments|search|ftsearch|tb|cp))?\.cgi$">
SetHandler fcgid-script
</FilesMatch>
</Directory>

上記のディレクトリ等は適宜修正してください。

このアップデートされたhttpd.confを保存しておきます。

$ filetool.sh -b
(/opt/.filetool.lstに/usr/local/apache2/conf/httpd.confがあることが前提です)

最後に、

/mnt/sda1/tce/onboot.lst

に以下を追加してください(4.xの場合上記に従っていればfcgi.tczは既にあると思います)。

fcgi.tcz
perl_FCGI.tcz
apache2-mod-fcgi.tcz

5. 起動

最後に、apacheを再起動します。

$ sudo apachectl stop
$ sudo apachectl start

これでerror_logに

[Fri Feb 13 00:00:00 2015] [notice] Apache/2.2.xx (Unix) mod_ssl/2.2.xx OpenSSL/1.x.x DAV/2 mod_fcgid/2.3.9 configured -- resuming normal operations

のような表示が出れば成功です。

なお、FastCGIを使うとそれなりにメモリを喰いますので、メモリ不足の環境で動かす場合はご注意ください。

ダウンロード

apache2-module-fcgi.tar.gz

perl_FCGI.tar.gz

fcgi.tczはオフィシャルのリポジトリからダウンロードしてください

どのくらい速くなったのか

う ちのサーバの場合、ブログの再構築におよそ40分弱かかっていたのが、20分弱になり、半分の時間で終了するようになりました。また、なんといってもブロ グを書いているときのいろいろの待ち時間(たとえば画像のアップロード)が短くなり、ストレスが少なくなりました。お試しあれ。

こちらもよく読まれています