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を使うとそれなりにメモリを喰いますので、メモリ不足の環境で動かす場合はご注意ください。
ダウンロード
fcgi.tczはオフィシャルのリポジトリからダウンロードしてください
どのくらい速くなったのか
う ちのサーバの場合、ブログの再構築におよそ40分弱かかっていたのが、20分弱になり、半分の時間で終了するようになりました。また、なんといってもブロ グを書いているときのいろいろの待ち時間(たとえば画像のアップロード)が短くなり、ストレスが少なくなりました。お試しあれ。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!