ご無沙汰しております、松本です。先月36歳になりました。
今度こそきっちりBlogを書き続けるように頑張ります。決して暑さのせいじゃないのですが、かまけていました。
四捨五入するとアラフォー、プログラマ定年説からは既にオーバーしている年代に突入致しました。
が、なるべくよろしい感じにアレしたいと思います。
CentOS5 + yum + Apacheなど
今回はCentOS5のyumのデフォをなるべく利用して、Apache周りのシステムを構築する周りです。
ググればほとんどの情報がでてくるCentOSですが、弊社で利用している一部の環境の構築手法含めのメモ記事であります。
yum環境について
昔は(特に"FreeBSD最高!"の時代)、ソースビルド→インストールにこだわっていたりなどあったのですが・・・
CentOS5+yumでは、ミドルウェアのアップデートや、環境構築の際のマニュアル化も簡単で
yumでどんどん入る最近では、yumでのインストール前提での構築に完全にスライドしてしまいました。
yumの利用は以下をポリシーとしています。
- なるべく CentOS5公式のリポジトリのツール/ソフトウェアを利用する
- なるべくデフォルトでセットアップされている構成で利用する。
- 同名のツール/ソフトウェアは公式のレポジトリにあるものを優先する(バージョンが低い場合もあるけどそこはスルー)
- 公式の中の base / updates / extras を利用。
- 公式の中でも特にデフォルトで無効になっている、"centosplus / contrib"は利用しない。
プラス、epel(Extra Packages for Enterprise Linux) をインストールしています。
epelは、デフォルトのリポジトリには無いソフトウェアを提供するもので、libapreq2 や、nginx などはepel経由でインストールしています。
Fedoraプロジェクトで運営されていまして、CentOS5の公式の次に、一番公式に近いものと判断して選択しました。
RPMForge も使いやすいのですが、公式のツール/ソフトウェアの同名ファイルを上書きする可能性もあるため、特にインストールしません。
また、前述の "なるべく少ない数のリポジトリで済ませたい" という主旨から epel だけをインストールしています。
もしかしたら将来的に RPMForge経由でのインストールもあり得るかもしれませんが
現状では デフォルトの base / updates / extras + epel で事足りています。
yum環境の構築
上記ポリシーに従い、以下のコマンドでyum環境を構築しています。
fastmirrorを入れないと、都度もっさり検索するので必須です。
epelをレポジトリに追加
i386 (32bit) の場合
# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
x86_64 (64bit) の場合
# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
fastestmirror その他必須ツール系をまずインストール
# yum install -y yum-fastestmirror
# yum -y install ntp sudo zsh screen vim-enhanced subversion git
全てのツール/ソフトウェアを更新
# yum -y update
以上の作業が済んだらApache等のインストールです。
ツール/ソフトウェアのインストール
perlを利用したWAFでは、Plack/PSGI のアプリが隆盛を極めていますが、弊社では未だに mod_perl で運用している事もありまして
以下、Proxy + App の構成を Apache2 + mod_perl2での運用を想定した構築手順です。
Apacheのインストール、設定など
必要なツール/ソフトウェアをインストール
Apache2::Request を利用するために、 libapreq2 も併せてインストールしています。
CentOSのyumで扱うhttpdは CentOS5ですと、 apache 2.2.3 です。
このバージョンは mod_proxy_balancer も使えるので Proxyサーバがそのまま、ロードバランサ代わりにもなります。
# yum -y install \
httpd httpd-devel httpd-manual \
mod_perl mod_perl-devel \
libapreq2 libapreq2-devel perl-libapreq2
また、デフォルトでの boot時の自動起動を無効にしておきます。
# /sbin/service httpd off
以上で終了です。超あっさりです。
apacheのconfigなどの扱い
yumでインストールしたApacheのデフォルトのConfigファイルや実行ファイルなどは、おおよそ以下になっています。
- 実行ファイル
- httpd.conf
- /etc/httpd/conf/httpd.conf
- httpd.conf内で利用する外部ファイル
- /etc/mime.types
- /etc/httpd/conf/magic (mod_mime_magicを使う場合)
- その他モジュールで使う設定ファイル
などです・・・。
激しく面倒な構成です。yumで色々インストールしていくと、何を抱えているかわからなくなりがちでして
弊社では
- Proxy 用のconfファイル=1枚
- App用のConfファイル=1枚
を作り、それぞれに apachectl のスクリプトを用意して運用しています。
このそれぞれが yumでインストールした httpd を参照して、 2つのデーモンを起動するようにしています。
具体的なファイル構成は以下です。
/home/app-account/proj/etc/app.conf <-- mod_perl用の httpd.conf (これ1枚で完結)
/home/app-account/proj/etc/proxy.conf <-- Proxy用の httpd.conf (これ1枚で完結)
/home/app-account/proj/bin/apachectl-app <-- mod_perl用の apachectl
/home/app-account/proj/bin/apachectl-proxy <-- mod_perl用の apachectl
/home/app-account/proj/etc/mime.types <-- /etc/mime.types をコピー
apachectl-app や apachectl-proxy では、httpd.confの参照先を変更しています。
HTTPD='/usr/sbin/httpd'
を
と、書き換えています。
appとproxyのスクリプトの違いは、大きいところでは以下3つです。
- httpd -f で参照する先のhttpd.confのパスの違い
- pidファイルを proxy と app で違うパスに指定
- ロードするモジュールのだし分け
この他、 mod_perl や mod_php 、その他 mod_xx をロードする場合は、それぞれ必要な側にのみ記述します。
また、 mime.types は proj に add されたファイルを使っています。全てのファイルの参照先は Proj 以下になるようにしています。
この手法&手順だと何がうれしいのか
上記の"proj"ディレクトリ以下をバージョン管理システムで管理していますので、conf/スクリプト共にファイルが書き換わったり無くしたりなどがありません。
また、設定変更も 例えば複数台のWebサーバで同じシステムを構築&LB配下に置く場合など、非常に運用がしやすくなります。
apache(httpd)のバージョンアップも容易で、
且つ モジュールのインストール時に自動でファイルが上書きや追加されても影響がありませんので、
意図した通りに運用することが用意になります。
特に、”直接サーバーに入ってそれぞれのConfigファイルを書き換え”がありませんので、ややすっきりします。
ということで yum でもりもりと更新しても あまりドキドキせずに運用できる辺りが一番の狙いです。
いかがでしょうか。超あっさり目ですが、 Apache2の yum での 簡単扱い手順でした。
関連リンク