Custom Search

JITAKU_SVR_Wiki



単発サーバで複数のapacheをインストール/稼動

経緯
一つのapacheを多プロジェクトで使用すると(Nameベース、IPベース)、
一つのプロジェクトでconfの変更が必要だった場合、すべてのプロジェクトで影響が出てしまう。

これをプロジェクトごとにapacheを使用することで、全体へのリスクが減る。
デメリットとしては、パッケージからインストールするよりも、多少の手間がかかることと
apacheが使用するポートが複数個になるということ。

以下は複数のapacheをインストール、apacheの環境を揃えるための方法。

構築ルール

  • ソースからのインストールする。
  • プロジェクトごとのユーザを作成する($USER)。
  • インストールを行うユーザは各プロジェクトユーザで行う。
  • rootでの作業をしない(root権限は必要ない)。
  • DocumentRootは/home/$USER配下に「htdocs」ディレクトリを作成する。
  • logを出力する場所は/home/$USER/配下に「logs」ディレクトリを作成する。

構築手順

apacheをソースからインストールする手順。
基本コピペでいけるはず。


コンパイル・インストール

apacheのソースを用意しそれぞれで使いまわす。
今回は/usr/local/src/httpd-2.2.11.tar.gz

cpコマンドで/home/$USERディレクトリへ持って行き、展開し、以下のようにインストールする。

$ cp /usr/local/src/httpd-2.2.11.tar.gz /home/$USER/
$ tar zxvf httpd-2.2.11.tar.gz
$ cd httpd-2.2.11
$ ./configure --prefix=/home/$USER/apache2 --enable-so
$ make
$ make install
$ make clean

TIPS:
2009-05-08時点での最新のapacheのバージョンはhttpd-2.2.11。

オプションをsoのみにしたのは、同じOS、同じapacheを使用しているので、
どこかで一度moduleをコンパイルしてしまえばすべてのプロジェクトで使用できるため、
.soファイルをインクルードすれば良い。
ちなみに--enable-so指定することで、DSOが使えるようになるので先に入れておく。

moduleをロードする

上記に少し記述したが、moduleはコンパイル済みの物が用意することで各々がロードすることが出来る。
ソースからapacheをインストールし、moduleを作成する場合は以下のリンク先で記述。

今回は/usr/local/modules配下にコンパイル済みのmoduleを配置。

$ cp -r /usr/local/modules /home/$USER/apache2

TIPS:
このmoduleを使用する場合には、httpd.confに明示しなければいけないので、以下の様に記述する。

ポートの変更

上記の方法で取り敢えず稼動可能なapacheが出来上がる。あとは各apacheを起動させ、ポートをlistenさせれば良い。
apache2.2系でのlistenポートの変更は、
/home/$USER/apache2/conf/httpd.confにListenという部分があるので、

#Listen 80
Listen 10080

と言うような形で変更する。
注意:1-1024ポート(well-knownポート)まではrootでしか扱うことが出来ないポートのため、一般ユーザで使用する場合には1025番ポート以上をあてること。

自動起動出来るようにする

apacheをサーバの起動時に自動で起動できるようにしたい場合、パッケージなどでインストールした場合には
/etc/init.d/apache2(httpd)
などが設置されているが、今回の様にインストールした場合には以下の様に構築していく。

まずは上記のリンク先で簡単に作成したスクリプトを /etc/init.d/apache2_hogehoge
という形で作成する。

そして権限を与えて、chkconfigで起動レベル変更

# chmod +x /etc/init.d/apache2_hogehoge

# chkconfig apache2_hogehoge on

# chkconfig --list apache2_hogehoge
apache2_hogehoge 0:off 1:off 2:off 3:on 4:off 5:on 6:off

起動ユーザの変更

今回のapacheは個別にインストールしているので、各ユーザ毎にapacheを起動させたい。
httpd.confの以下の部分を変更
デフォルト

User daemon
Group daemon

変更↓

User hogehoge
Group users

グループは特に指定しないでdaemonグループにし、hogehogeユーザが起動させる。
最後に起動させ、プロセスを確認してみる。更にlistenポートの確認

server:/home/hogehoge/apache2/conf # /etc/init.d/apache2_hogehoge start
server:/home/hogehoge/apache2/conf # ps -ef |grep hogehoge
hogehoge     6467     1  0  2009 ?        00:14:35 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    10546  6467  0 15:14 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    11009  6467  0 15:17 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    11020  6467  0 15:17 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    12634  6467  0 15:33 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    13215  6467  0 15:38 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    14164  6467  0 15:46 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    14165  6467  0 15:46 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    14166  6467  0 15:46 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    14213  6467  0 15:47 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
hogehoge    15783  6467  0 16:01 ?        00:00:00 /home/hogehoge/apache2/bin/httpd -k start
root     15895 15332  0 16:03 pts/0    00:00:00 grep hogehoge

server:/home/hogehoge/apache2/conf # netstat -an |grep 50080
tcp        0      0 :::50080                :::*                    LISTEN

logrotateについて

apacheのログをrotateする必要があるが、デフォルトのrotateでは当然無理なので、今回使用した方法を記述。
※rootで最初のみ作業する

# mkdir /etc/apache2_logrotate.d

# vi /etc/logrotate.conf

---省略---
include /etc/apache2_logrotate.d

上記の様にapache2_logrotate.dディレクトリを作成し、logrotate.confでそのディレクトリをincludeする。
そうすることで、apache2_logrotate.dディレクトリ配下にあるファイルがrotateするスクリプトになる。
更に一般ユーザでも書き込めるように権限を緩める。

# chmod 777 /etc/apache2_logrotate.d

今回は各ユーザのホームディレクトリに「logs」ディレクトリを作成し、
そこにapacheのログを吐くように設定した場合。
また、ログをローテートする場合はhttpdデーモンを再読み込みする必要がある。
今回指定するスクリプトは上記で作成したスクリプトがあることが前提。

$ vi /etc/apache2_logrotate.d/apache2_$USER

#$USERはサービスユーザ名に変更する
/home/$USER/logs/*log {
   compress
   dateext
   maxage 365
   rotate 99
   notifempty
   missingok
   create 644 $USER users
   sharedscripts
   postrotate
    /etc/init.d/apache2_$USER reload
   endscript
}

注意
上記のrotate方法はSuSEのみ使える記述がある可能性があるため、RedHat系の時は注意すること。
RedHat系の書式はSuSEでも使えるが、その逆は出来ない…。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 18:40:12 (706d)