#このエントリーは最新のMovableTypeには対応していません。2007.02.10
LAPPというのは、Linux+Apache+PostgreSQL+PHPなんだけど、そこにMovableTypeとtux webサーバを組み合わせたので、LAPPMT(らぷんむと?)かなと。構築手順をまとめたので、自宅でそんな良い感じのサーバを立てたい人は参考にしてください。
で、このサーバの利点なんですが、MovableTypeはperlで書かれたcgiなのでapacheで処理する必要があります。tuxでもcgiは部分的には処理できますが、現状あまり期待できるものではありません。しかし、MTで生成するとほぼ静的なコンテンツだけになるので、tuxに処理させることでレスポンスとリソースの節約が期待できます。Red Hatを採用するのであれば、tuxをうまく使うのはアリかなと。
ちなみにtuxのドキュメントってほとんど無いんですが、/usr/share/doc/tux-2.x/の中にあるtuxというディレクトリのhtmlでほぼ全部だと思われます。VirtualHostとかも実は出来たりする…。
最初に
以前、LAPPサーバの構築というドキュメントをまとめましたが、その構成にMovableTypeを追加するものです。
なお以下の説明の前提として、Red Hat Linux 9をインストールすることとします。また、以下の手順で行わないとPostgreSQLの言語設定などで不具合があるかもしれません。
OSインストール
言語設定を変更します。日本語(ja_JP.eucJP)をデフォルトにしておきましょう。そうすると楽です。
パーティショニングは基本的に自動パーティション。/bootの容量はカーネルを追加インストール(rpm -i)して古いものを残すのであれば、256MBぐらい。
パッケージグループはDialup Networking Support、Japanese Support、SQL Database Server、Text-based Internet、Web Server、追加パッケージとしてncftp、ntp、php-pgsql、libcap、perl-suidperl、net-snmp、net-snmp-utils、mrtg、perl-CGI、perl-URI、patch、binutils、cpp、gcc、glibc-devel、glibc-kernheaders、tcpdump、sendmail-cf
インストール後のシステム設定
一時的に日本語表示を英語にします。/etc/sysconfig/i18nを開いて、
LANG="C"
#LANG="ja_JP.eucJP"
SUPPORTED="en_US.UTF-8:en_US:en:ja_JP.eucJP:ja_JP:ja"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
として再ログイン。
時刻の設定。まず大まかに時刻を合わせる。もし大きくずれているのであれば、dateコマンドで修正。
$ ntpdate -s -b ntp1.jst.mfeed.ad.jp
/etc/ntp.confを開いて、
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
の後に以下の3行を追加する。
restrict 210.173.160.27
restrict 210.173.160.57
restrict 210.173.160.87
さらに、
server 127.127.1.0 # local clock
の後に以下の3行を追加する。
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
余計な仮想コンソールを減らします。sshでリモートログインしてヘッドレスで運用するのであれば仮想コンソールは沢山はいらないので減らす。/etc/inittabを開いて
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
という状態にして2つだけにする。
余計なサービスを止め、必要なサービスをあげる
$ sudo chkconfig --list | grep 3:on | awk '{print "chkconfig --level 3 "$1" off"}' > chkconfig.sh
これで、インストール後にランレベル3で起動するサービスの一覧がchkconfig.shに出力されます。出来たchkconfig.shを開いて、
chkconfig --level 3 syslog off
chkconfig --level 3 network off
chkconfig --level 3 keytable off
chkconfig --level 3 iptables off
chkconfig --level 3 sshd off
chkconfig --level 3 sendmail off
chkconfig --level 3 crond off
chkconfig --level 3 rawdevices off
を削除。これらは必要なサービスです。
#!/bin/sh
をファイルの先頭に追加。shスクリプトであることの宣言です。
chkconfig --level 3 ntpd on
chkconfig --level 3 httpd on
chkconfig --level 3 snmpd on
chkconfig --level 3 postgresql on
を追加することで必要なサービスが起動するようになります。で、実行。
$ sudo sh chkconfig.sh
不必要なモジュールを外すために、/etc/modules.confを開いて、オーディオやUSBなどをコメントアウトします。以下のようになるはず。
alias eth0 8139too
#alias sound-slot-0 via82cxxx_audio
#post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
#pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :
#alias usb-controller usb-uhci
/etc/aliasesを開いて、最後の行にメールアドレスを設定。
root: hoge@hoge.com
最新のパッケージに更新する
作業ディレクトリを作り移動
$ mkdir rpms
$ cd rpms
ファイルを取得します。もしプロキシの後ろにホストがある、もしくは構築作業はプロキシの後ろでやるのであれば、/etc/wgetrcを適宜設定してから。
$ wget ftp://jpix.ftp.ne.jp/00/redhat/linux/updates/9/en/os/i686/*
$ wget ftp://jpix.ftp.ne.jp/00/redhat/linux/updates/9/en/os/i386/*
$ wget ftp://jpix.ftp.ne.jp/00/redhat/linux/updates/9/en/os/noarch/*
i386パッケージを削除します。i386/i686で同名のパッケージがあるので、i386パッケージを削除
$ ls *.i686.rpm | sed 's/i686/i386/' | awk '{print "\\rm "$0}' | sh
rpmのテストをするとエラーが出るので依存関係を解消してインストール
[root@www rpms]# rpm -Fvh --test *.rpm
error: Failed dependencies:
gettext is needed by mutt-1.4.1-1
[root@www root]# wget ftp://jpix.ftp.ne.jp/00/redhat/linux/9/en/os/i386/RedHat/RPMS/gettext*
[root@www rpms]# rpm -Uvh --test gettext-0.11.4-7.i386.rpm
error: Failed dependencies:
libgcj.so.3 is needed by gettext-0.11.4-7
[root@www rpms]# wget ftp://jpix.ftp.ne.jp/00/redhat/linux/9/en/os/i386/RedHat/RPMS/libgcj*
[root@www rpms]# rpm -Uvh libgcj-3.2.2-5.i386.rpm gettext-0.11.4-7.i386.rpm
Preparing... ########################################### [100%]
1:libgcj ########################################### [ 50%]
2:gettext ########################################### [100%]
その他のパッケージを更新します。
$ sudo rpm -Fvh *.rpm
日本語表示に戻します。/etc/sysconfig/i18nを開いて、
#LANG="C"
LANG="ja_JP.eucJP"
SUPPORTED="en_US.UTF-8:en_US:en:ja_JP.eucJP:ja_JP:ja"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
として再ログイン。
mrtgの設定
snmpの設定をします。/etc/snmp/snmpd.confを開いて、
####
# First, map the community name "public" into a "security name"
# sec.name source community
com2sec notConfigUser default public
を、
####
# First, map the community name "public" into a "security name"
# sec.name source community
com2sec local localhost private
にしてprivateコミュニティをcom2secにマップ、
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
を、
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group MyRWGroup v1 local
group MyRWGroup v2c local
にしてlocalをMyRWGroupにマップ、
####
# Third, create a view for us to let the group have rights to:
# name incl/excl subtree mask(optional)
view systemview included system
を、
####
# Third, create a view for us to let the group have rights to:
# name incl/excl subtree mask(optional)
view all included .1 80
にしてviewを設定、
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact systemview none none
を、
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access MyRWGroup "" any noauth exact all all all
にしてグループの権限を付加する。次に
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
を、
syslocation where
syscontact Root <hoge@hoge.com>
にして、ホストの場所と管理者のメールアドレスを設定する。さらに、ロードアベレージの閾値を設定する。
load 12 14 14
snmpdを起動する。
$ sudo service snmpd start
mrtg.cfgの編集
cfgmakerでトラフィックの設定を作成。
cfgmaker private@localhost > /etc/mrtg/mrtg.cfg
/etc/mrtg/mrtg.cfgを開いて、
# WorkDir: /home/http/mrtg
を、
WorkDir: /home/http/mrtg
にして、
# Options[_]: growright, bits
のコメントアウトを外し、
Target[localhost_2]: 2:private@localhost:
SetEnv[localhost_2]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_2]: 1250000
Title[localhost_2]: Traffic Analysis for 2 -- www
PageTop[localhost_2]: <H1>Traffic Analysis for 2 -- www</H1>
の5行の[localhost_2]を[www_traffic]にして、ファイルの最後に以下の行を追加する。
Target[www_cpu]: 1.3.6.1.4.1.2021.10.1.5.2&1.3.6.1.4.1.2021.10.1.5.3:private@localhost
MaxBytes[www_cpu]: 2000
Title[www_cpu]: CPU Load Average
PageTop[www_cpu]: <H1>CPU Load Average for www</H1>
Options[www_cpu]: growright, nopercent, integer, gauge, withzeroes
YLegend[www_cpu]: CPU Load Average
ShortLegend[www_cpu]: percent
Legend1[www_cpu]: 5 min CPU Load Average
Legend2[www_cpu]: 15 min CPU Load Average
LegendI[www_cpu]: 5min
LegendO[www_cpu]: 15min
3回ほど実行する
$ mrtg /etc/mrtg/mrtg.cfg
インデックスを作る
$ indexmaker /etc/mrtg/mrtg.cfg > /var/www/html/mrtg/index.html
MovableTypeに関する環境を設定
PostgreSQLを起動する
$ sudo service postgresql start
PostgreSQLのDBを作ります。MovableType用にPostgreSQLのユーザ・apacheとDB・apacheを作る。
$ sudo su - postgres
-bash-2.05b$ createdb apache
CREATE DATABASE
-bash-2.05b$ createuser apache
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
-bash-2.05b$ exit
logout
jcodeのインストールをします。jcode.pmを利用するため、jcodeをインストールする。まずはソースのダウンロード。
$ wget http://openlab.ring.gr.jp/Jcode/Jcode-0.83.tar.gz
解凍してインストール。
$ tar zxvf Jcode-0.83.tar.gz
$ cd Jcode-0.83
$ perl Makefile.PL
$ make
$ sudo make install
MovableTypeのインストール
MovableTypeをダウンロードします。適当なPCのブラウザでダウンロードし、MT-2.64-full-lib.tarをWinSCPなどでアップロードする。
日本語化パッチをダウンロードします。アップロードしたMT-2.64-full-lib.tarも作業ディレクトリに移動する。
$ mkdir mt
$ mv MT-2.64-full-lib.tar mt/
$ cd mt
$ wget http://rebecca.ac/milano/mt/mt-ja.2.64.tgz
解凍してパッチを適用、ファイルを移動。
$ tar xvf MT-2.64-full-lib.tar
$ tar zxvf mt-ja.2.64.tgz
$ mv lang-ja/ MT-2.64-full-lib/images/
$ cd MT-2.64-full-lib
$ patch -p1 < ../MT.utf8.patch
$ cd ../
$ mv -f MT-2.64-full-lib/images/ /var/www/html/
$ mv -f MT-2.64-full-lib/styles.css /var/www/html/
$ mv MT-2.64-full-lib /var/www/cgi-bin/mt
MovableTypeの設定をします。/var/www/cgi-bin/mt/mt.cfgを開いて、
CGIPath http://WWW.YOUR-SITE.COM/PATH/TO/MT/
を
CGIPath http://www.hoge.com/cgi-bin/mt/
に、
# StaticWebPath /path/to/static-files/
を
StaticWebPath /
にして、
# DBUmask 0022
# HTMLUmask 0022
# UploadUmask 0022
# DirUmask 0022
# NoHTMLEntities 1
のコメントアウトを外し、
# PublishCharset Shift_JIS
を
PublishCharset UTF-8
にして、ファイルの最後に以下の3行を追加する。
ObjectDriver DBI::postgres
Database apache
DBUser apache
MovableTypeのチェックをします。ブラウザで、http://192.168.0.1/cgi-bin/mt/mt-check.cgiにアクセス。最後に
Your server has all of the required modules installed; you do not need to
perform any additional module installations. Continue with the installation
instructions.
と表示されればインストール出来ている。
MovableTypeの初期化をします。ブラウザで、http://192.168.0.1/cgi-bin/mt/mt-load.cgiにアクセス。
Done loading initial data! All went well.
と表示されればインストールは完了。チェック及び初期化が出来ないように、実行権限を外しておく。
$ sudo chmod 400 mt-check.cgi
$ sudo chmod 400 mt-load.cgi
MovableTypeのadministratorの設定をします。ブラウザで、http://192.168.0.1/cgi-bin/mt/mt.cgiにアクセス。Username:Melody、Password:Nelsonでログインする。”EDIT YOUR PROFILE”をクリックし、各項目を記入、Preferred LanguageはJapaneseを選択、Saveして一度ログアウトする。上記ユーザ名・パスワードでログインし直す。
DocumentRootの所有権の設定
$ cd /var/www
$ sudo chown apache.apache html
$ sudo chown 777 html
$ sudo chmod g+s html/
apacheの設定
httpd.confを編集します。/etc/httpd/conf/httpd.confを開いて、
AddDefaultCharset ISO-8859-1
を
AddDefaultCharset UTF-8
に、
Listen 80
を
Listen 8080
にする(tuxが80番をListen、処理できないものはapache:8080にリダイレクトする)。
いらないconfを外します。/etc/httpd/conf/httpd.confを開いて、
$ mkdir /etc/httpd/nouse
$ mv /etc/httpd/conf.d/ssl.conf /etc/httpd/nouse/
$ mv /etc/httpd/conf.d/python.conf /etc/httpd/nouse/
phpの設定を変更します。/etc/php.iniを開いて、
short_open_tag = On
;mbstring.internal_encoding = EUC-JP
;mbstring.http_output = SJIS
を
short_open_tag = Off
mbstring.internal_encoding = EUC-JP
mbstring.http_output = UTF-8
にする。phpはUTF-8を内部コーディングとできるはずだが、Red Hat Linux 9でインストールされるphp4.2.xではまともに動かない。
tuxの設定
tux.mime.typesを編集します。/etc/tux.mime.typesを開いて、
#TUX/redirect redir
を
TUX/redirect redir cgi pl php
にする。
サービスが起動するようにする
$ sudo chkconfig --level 3 tux on
セキュリティ設定
/etc/hosts.accessを編集します。許可するホストの設定をする。
$ sudo echo "#from loopback" >> /etc/hosts.allow
$ sudo echo "ALL : 127.0.0.1" >> /etc/hosts.allow
$ sudo echo "#ssh access" >> /etc/hosts.allow
$ sudo echo "#from internal segment" >> /etc/hosts.allow
$ sudo echo "sshd : 192.168.0.0/255.255.255.0" >> /etc/hosts.allow
残りは全て不許可。
$ sudo echo "#from all" >> /etc/hosts.deny
$ sudo echo "ALL : ALL" >> /etc/hosts.deny
sshでのrootログインを禁止します。ログイン用アカウントを作成
$ sudo useradd webmaster
$ sudo passwd webmaster
/etc/ssh/sshd_configを開いて、
#PermitRootLogin yes
を
PermitRootLogin no
にして再起動。
$ sudo service sshd restart
iptablesを設定します。iptablesコマンドの実行
#!/bin/sh
#flash
iptables -F
#local loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#to outer
iptables -A OUTPUT -o eth0 -j ACCEPT
#mrtg on tux
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#ssh
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
#auth
iptables -A INPUT -p tcp -m tcp --dport 113 -j ACCEPT
#ftp passive
iptables -A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
#ftp active
iptables -A INPUT -i eth0 -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
#TCP ESTABLISHED
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
#ntp
iptables -A INPUT -p udp -m udp --sport 123 -j ACCEPT
#domain
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
#auth
iptables -A INPUT -p udp -m udp --dport 113 -j ACCEPT
#ping
iptables -A INPUT -p ICMP --icmp-type 0 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 3 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 5 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 11 -j ACCEPT
#policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptablesの設定を保存する。
$ sudo service iptables save
まとめ
個々のホストによって違う部分も多くあるはずだけど、概ねこういった手順で問題はないはずです。