先週は MTDDC Tokyo が開催され、盛り上がりを見せる Movable Type 5 の世界ですが、今日はそんな MT5 にあった環境構築の方法をご紹介します。題して「MT5 時代のサーバー構築方法」です。
最近、MT5 を専用サーバーでご利用されるケースが増えてきたのですが、その際に使われる OS に CentOS があります。この CentOS は、Red Hat Enterprise Linux との完全互換を目指していて、かつフリーであることからも採用されるケースが増えてきています。しかし、CentOS に含まれる PHP は若干古いために、MT5 のダイナミックパブリッシングが動作しないという悲しい事情があります。
CentOS 5.4 では、Apache を除き、yum だけで最新版をインストールできます。というわけで長文ですが、MT5 がきっちり動作するサーバー環境の構築方法をご紹介します。
OS インストール
様々なご意見があると思いますが、私は以下のようにインストールしています。
ディスクパーティションについて、データ領域 (/var) を別パーティションにするか検討します。なお、LVM を利用するようにし、通常はデフォルト設定 (/boot と / のみ作成) でも、バックアップを適切にすることで、問題は無いと思っています
ブートローダーは、デフォルト設定とします。
ネットワークについて、IP アドレスやデフォルトゲートウェイ等、指定された内容で設定します。
ファイアーウォールと SELinux について、インストール時には設定しません。なお、ファイアーウォールは、すべての作業が終了した時点で設定します。
タイムゾーンは東京を指定し、UTC の設定はしません。
インストールパッケージは以下のものとします。これは、不要なソフトウェアを導入しないことと、インストール時間の短縮というメリットがあります。
- ベース
- エディタ
- 開発ツール
- 開発ライブラリ
インストール直後の操作
インストール後の起動で、root アカウントでログインできることを確認します。また、setup コマンドを実行し、SELinux とファイアウォールを無効にします。
yum 関連の設定
/etc/yum.conf を編集します。カーネルを更新の対象からはずす場合は、以下の行を追加します。
exclude=kernel*
yum update を実行し、最新のパッケージを適用します。
yum -y update
yum-updatesd を利用不可にします。
chkconfig --level 2345 yum-updatesd off; chkconfig --list yum-updatesd service yum-updatesd stop
ntp のインストール
ntp をインストールします。
yum -y install ntp
/etc/ntp.conf を、以下のように編集します。
restrict default ignore restrict 127.0.0.1 server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp server 127.127.1.0 fudge 127.127.1.0 stratum 10 driftfile /var/lib/ntp/drift keys /etc/ntp/keys
時刻を調整し、自動起動できるように設定します。
ntpdate ntp1.jst.mfeed.ad.jp chkconfig --level 3 ntpd on; chkconfig --list | grep ntp service ntpd restart ntpq -p
アカウントの作成
root でログインすることは、セキュリティ上好ましくないため、以下のように管理者アカウントを作成します。パスワードを mkpasswd で自動作成するのが楽なので、expect をインストールしておきます
yum -y install expect expect-devel
/etc/sudoers を編集し、管理者アカウントが sudo コマンドを利用可能にします。
visudo
管理者アカウントを作成します。以下の内容をシェルスクリプトで登録しておくと便利です。
## create account
user_name=`echo ${1} | tr [A-Z] [a-z]`
user_pass=`mkpasswd -s 0 -C 2 -d 2 -l 8`
user_group='staff'
user_home='/home/'${user_name}
user_file='/root/account-'${user_name}'.txt'
## checking user existence
check=`grep "^${user_name}:" /etc/passwd | wc -l`
if [ "${check}" != "0" ]; then
echo "\"${user_name}\" already exists."
exit 1
fi
check=`grep "^${user_group}:" /etc/group | wc -l`
if [ "${check}" == "0" ]; then
groupadd ${user_group}
rm -Rf /etc/skel/.mozilla
mkdir -p /etc/skel/.ssh
fi
## create account
useradd --home-dir ${user_home} --create-home -g ${user_group} -G wheel ${user_name} \
|| echo "Can't create user." || exit 1
echo -n ${user_pass} | passwd --stdin ${user_name} &> /dev/null
cd ${user_home}
chown -R ${user_name}:${user_group} *; chmod -R 755 *
chown -R ${user_name}:${user_group} .ssh; chmod -R 700 .ssh
echo '## account information' > ${user_file}
echo 'date: '${dtg} >> ${user_file}
echo 'name: '${user_name} >> ${user_file}
echo 'pass: '${user_pass} >> ${user_file}
echo 'home: '${user_home} >> ${user_file}
cat ${user_file}
sshd の設定
以下の例のように、/etc/ssh/sshd_config を修正します。これも個人的ですが、ポート番号は変えておくのが好きです。
## $Id: $ Port 20022 Protocol 2 SyslogFacility AUTHPRIV PubkeyAuthentication yes PasswordAuthentication yes PermitRootLogin no PermitEmptyPasswords no ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials yes UsePAM yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL Compression delayed ClientAliveInterval 15 ClientAliveCountMax 20 Subsystem sftp /usr/libexec/openssh/sftp-server
sshd を再起動します。
service sshd restart
yum リポジトリの追加
以下のように、リポジトリを追加します。
yum -y install yum-priorities wget --quiet http://ftp.riken.jp/Linux/fedora/epel/5/i386/epel-release-5-3.noarch.rpm rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL rpm -K epel-release-5-3.noarch.rpm rpm -Uvh epel-release-5-3.noarch.rpm wget --quiet http://rpms.famillecollet.com/enterprise/5/remi/i386/remi-release-5-7.el5.remi.noarch.rpm rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi rpm -K remi-release-5-7.el5.remi.noarch.rpm rpm -Uvh remi-release-5-7.el5.remi.noarch.rpm wget --quiet http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
/etc/yum/pluginconf.d/priorities.conf を編集し、priority が有効であることを確認します。
[main] enabled = 1
以下のファイルの各リポジトリに対して、priority = x (x: 数字) を記述します。追加したリポジトリは priority=11 とし、base/addons/update/extras に対しては priority=1 とします。また、enabled=1 であることも確認します。
vi /etc/yum.repos.d/CentOS-Base.repo vi /etc/yum.repos.d/epel.repo vi /etc/yum.repos.d/remi.repo vi /etc/yum.repos.d/rpmforge.repo
Subversion のインストール
各種設定ファイルや、画像等はバックアップを考慮し、Subversion を使うとステージング環境から本番環境への適用がとても楽です。というわけで、是非ともいれましょう。
yum -y install apr-devel apr-docs apr-util-devel apr-util-docs yum --disablerepo=\* --enablerepo=epel,remi,rpmforge -y install subversion-devel
必要なソフトウェアのインストール
さて、準備ができましたので、Movable Type に必要なソフトウェアをインストールしていきましょう。最初は ImageMagick です。
yum -y install ImageMagick2 ImageMagick2-devel ImageMagick2-doc ImageMagick2-perl ImageMagick2-tools
次は、Apache です。環境にあわせて httpd.conf を編集してくださいね。
yum -y install httpd httpd-devel vi /etc/httpd/conf/httpd.conf chkconfig --level 2345 httpd on; chkconfig --list httpd service httpd restart
MySQL をインストールします。/etc/my.cnf で default-character-set や skip-character-set-client-handshake の設定を忘れないようにしましょう。最後に、mysql_secure_installation で、よりセキュアな環境になるように設定しましょう。
yum --disablerepo=\* --enablerepo=epel,remi,rpmforge -y install mysql-server cp /usr/share/mysql/my-large.cnf /etc/my.cnf vi /etc/my.cnf chkconfig --level 2345 mysqld on; chkconfig --list mysqld service mysqld restart mysql_secure_installation
さあ、php をインストールしましょう。php.ini では cgi.force_redirect = 0 と、mbstring の設定を忘れないでください。
yum --disablerepo=\* --enablerepo=epel,remi,rpmforge -y install php php-devel \ php-gd php-mbstring php-mysql php-pdo vi /etc/php.ini
ここまでくれば、あとわずか。Movable Type に必要な Perl モジュールをインストールします。
yum -y install perl-Archive-Tar perl-Archive-Zip perl-Cache-Memcached \ perl-GD perl-IPC-Run perl-Mail-Sendmail yum -y install perl-Crypt-SSLeay yum -y install perl-DBD-SQLite perl-DBD-SQLite2 yum -y install perl-libwww-perl perl-libxml-perl yum -y install perl-Convert-ASN1 perl-Convert-PEM perl-Math-GMP perl-Digest-SHA1 perl-Data-Buffer yum --disablerepo=\* --enablerepo=epel -y install perl-Crypt-DSA
忘れてはいけない設定
ここまでで問題なく動作できますが、他にも忘れてはいけない設定があります。
毎日 4:00 頃に logwatch のメールが root 宛に送られます。このメールは管理者としてチェックしておくことが重要なので、転送するように設定しましょう。/etc/aliases ファイルで転送先のアドレスを設定します。
sed -i '/^root:/d' /etc/aliases vi /etc/aliases newaliases echo test | mail root
crontab を編集し、バックグランドタスクを実行できるようにします。
必要に応じて、不要なサービスを停止したり、iptables で必要なポートのみを開くように設定しておくと、より安全ですね。
Recent Comments