LAPPMT?

#このエントリーは最新の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

にして再起動。

service sshd restart
$ 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

まとめ

個々のホストによって違う部分も多くあるはずだけど、概ねこういった手順で問題はないはずです。

コメント

タイトルとURLをコピーしました