mac

 

windows向けapacheをmacで動かす

macで開発していると、Windowsとの環境の違いで色々動かない場面に遭遇します。今回Windows向けに作られたhttpd.conf等の設定を、macで動作させる為の検証をしたいと思います。macには標準でapacheがインストールされているので、それを活用します。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

以下は私がよく見るプロジェクトのミドルウェアの設定ファイルの構成です。

.
├── project-a
│   └── middleware
│       ├── develop
│       ├── local
│       │   ├── apache
│       │   │   └── conf
│       │   │       └── httpd.conf
│       │   └── tomcat
│       │       └── conf
│       │           └── server.xml
│       ├── product
│       └── staging
└── project-b
    └── middleware
        ├── develop
        ├── local
        │   ├── apache
        │   │   └── conf
        │   │       └── httpd.conf
        │   └── tomcat
        │       └── conf
        │           └── server.xml
        ├── product
        └── staging

大半のプロジェクトではこのようにプロジェクト毎にapacheやtomcatの設定ファイルを持っていると思います。

従って、別のプロジェクトの開発環境に切り替える場合、httpd.confの差し替えが必要になります。

Windowsの場合はバッチファイルが書けますが、超面倒くさいので手動でhttpd.confを入れ替えて運用していました

macはunixがベースになっているのでシェルスクリプト(bash)が標準で動くので、それを活用します。

apacheは1つ、apacheの設定ファイルはプロジェクト毎に沢山有る。これにどのように対応するか。

それは、apachectlの-fオプションでプロジェクト毎のhttpd.confを指定する事で対応する事ができます。

#!/bin/sh

conf=$1
cmd=$2

usage() {
    echo "Usage: `basename $0` <httpd.conf> <start|restart|graceful|graceful-stop|stop>"
}

if [ ! -f $conf ]; then
    echo "$conf is not found."
    exit 1
fi

case $cmd in
    start|stop|restart|graceful|graceful-stop)
        sudo apachectl -f $conf -k $cmd
        ;;
    *)
        usage
        ;;
esac

例えばこれを「apachectl.sh」というファイル名で保存しておきます。

#!/bin/sh

./apachectl.sh '/project/project-x/middleware/local/apache/conf/httpd.conf' $1

例えばこれを apache.sh という名前で作成し、「apache.sh start」等で起動する事ができます。

注意点として、大抵WindowsのApacheを基準にローカル用apacheのconfが用意されると思います。

Windowsとmacで、パスやmodules(*.so)ファイルの場所の相違等、注意する点がいくつかあります。

(BAD)Include C:¥project¥project-x¥middleware¥local¥apache¥conf¥proxy.conf

(GOOD)Include /project/project-x/middleware/local/apache/conf/proxy.conf

(GOOD)の例でもWindowsで動きます。Windowsの場合、スラッシュから始まるパスを指定すると、自動的に先頭に「C:¥」が付くのです。

(例えばWindowsで「/etc/httpd」というパスは「C:¥etc¥httpd」と読み替えられる)

そしてスラッシュもWindowsで有効なので、結局Windowsの場合、(GOOD)のパス指定でも(BAD)のパス指定に読み替えられ、動くのです。

つまり、Windowsでしか動かない(BAD)の書き方にするメリットは全くありません。

サーバは大抵linux・unixなので、開発環境・ステージング環境・本番環境のconfは(GOOD)のパス形式で書かざるを得ません。

となると、ローカルだけ「C:¥」で他環境だと「/」だと、メンテコストがかかるだけで本当にメリットが有りません。

既に「C:¥」形式で書かれていたら「/」形式に書き直して貰うか自分で全confを「/」に一括置換するしかないです・・

・・・略・・・
LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
・・・略・・・

modulesの指定は、このように相対パスで書かれています。

Windowsの場合はこの相対パスにmoduleが有るので動きますが、macでは別の場所にmoduleがあります。

macのmodulesは「/usr/libexec/apache2」に有るので、各プロジェクトに合わせて適宜シンボリックリンクを設定して下さい。

modulesの中には、Windows専用のものが有ったり、単純にmac標準には無かったりするので、適宜コメントアウトして下さい。

◯ 広告