Apacheをフォアグラウンドで動かす話
年末ですね、そうそう、ついに当方にもワードプレス案件がきてしまいまして、観念して開発環境としてApacheを用意することにしたんですけど、とにかくApacheもBuiltin Serverみたいなノリでシュッと立ち上げたいですよね。
だっていくつも開発案件をかかえてると設定がバラバラで、都度httpd.confを置き換えたりした後にservice httpd stop
とかstart
とか面倒ですよ(個人差はありそう)。
オチ
以下でおk
httpd -DFOREGROUND
って、これだけじゃ全然うれしくないじゃん
そうですね、コンフィグも指定できないと意味ないですね。
Linuxの場合、/etc/httpd
をまるっと好きな所にコピーして(ここでは /var/www/httpdにコピーした)
(後述のServerRootの罠があるので、/etc/httpd
はとりあえずとっておいてね)
httpd -d /var/www/httpd -DFOREGROUND
ってすると良い感じになります、やったー!
終了は勿論 ^C
だよ*1。
-f(コンフィグファイルの位置)オプションは-dオプションつければ(CentOSのetc構造を維持してるなら)別にいらないけど、まあ指定してもいいんじゃないですかね。
ログはどうする
そのままだと、ログはやっぱりファイルにでちゃうんだよね、PHPのBuiltin Serverはログが標準出力にでるのがいいよね、Apacheでもそれやりたい。
実はconfigのエラーログのファイル名を /dev/stdout
にするだけでOKだよ!
# 例 ErrorLog /dev/stdout CustomLog /dev/stdout combined
やったぜ!
ほかにもPIDとかあるじゃん?
そうですね、行儀が良い人ならきになりますね。
粛々とファイルをかきかえたり、-C 'PidFile /tmp/pidfile01'
とかやったりするといいんじゃないですかね。
ところで、ServerRootののろい
まあ、普通に考えて、上ができたらもう/etc/httpd
とか削除したいよね、でも残念ながらhttpd.conf
の中に書いてあるServerRoot
のディレクティブは、完全にはCLIのオプションで上書きできないっぽいんだよね。
そもそも -d
オプションがServerRoot
を指定するものなんだけど、最終的にはhttpd.conf
の中に書かれているやつが優先されちゃうので、「configロード時には」そこの下にあるconfはよんでくれるけど、次のフェーズの「moduleライブラリのロード時には」、コンフィグファイルの中のServerRoot
(たとえば/etc/httpd
)を見にいっちゃうっぽいんだよね。
(このあたりはapacheビルド時のconfigure オプションによって勿論様々ですが、CentOSデフォルトの場合です)
これ、-c
オプションとかでもどうにかできんかとおもったけど、どうにもならんっぽい。まあ、コピーしたファイルを修正してもいいし、繰り返しになるけど、/etc/httpd
をのこしておいてもいいので、まあいいかなっておもいました。イケてる解決策があればおしえてください。
(どうでもいいけど、httpdのCLIオプションは和訳されてなくてヤヤウケです、まあ読まないよね。)
まとめ
「php -S
がhtaccessとか全部サポートしてくれたらいいのに!」(違
「やった!これでApacheもSuperVisordで管理できるぞ!」(違
まあそれらは冗談としても、-CでListenするポートをかえたりとか、まあ色々やると色々便利な気がしますね…私だけかもしれませんけど。だってみなさんいまどきはVMとかオシャレなものをお使いになるんでしょう?
次回予告
今回のこれはlinuxだけど、勿論OSXでもできる(はずな)のでその話。そして、私はPHPerなのにPHPに触れてないのはダメですよね、そのうち書きます。(なんで今日かかかないのかといえば、Elcapitanで5.6系PHPのビルドでずっこけまくってて諦めたからです)がんばろ。
タイトルは「Homebrew?しらない子ですね…」を予定しております!
…一体誰得なんだ、俺だけじゃないのか…読みたい人はブクマかスターでもつけておいてください…。
あー、あと、Mysqlでもにたようなことをやるテクがあって、昔かいたんだけど焼き直そうかなっておもいます。
*1:一瞬で死なない事が多いので、じっと待とう