chef-serverはどうやらIPv6をListenできないっぽい。(使われていたMerbのコードを見たけれど、それっぽいのが見つからない。。。)
最も簡単なのは、nginxでもapacheでもいいんですが、IPv6でlistenするproxyを立てちゃうことなんですが、MerbなんでPassengerでもいけるはず。。。ということで、Apache + Passengerで動かしてみました。
ちなみにChef 11系使えば不要です。(Merbもないし)
諸事情あり11系にアップグレードできなくて、かつ、半ば趣味が入っている人向けです。
手順
AWS上のubuntu 12.04でやりました
Apache + Passengerのインストール
ここは至って普通です。一応書いておきますが、お好きな手順で大丈夫です。
# パッケージを取ってきて
$ sudo apt-get install apache2 libapache2-mod-passenger
# passengerを入れる
$ sudo gem install passenger
$ sudo passenger-install-apache2-module
# 失敗する場合、恐らくこのあたりを要求されてます。詳細はメッセージを読んで判断してください
$ sudo apt-get install apache2-threaded-dev libapr1-dev libaprutil1-dev libcurl4-gnutls-dev
# うまく行った場合は、passengerの設定ファイルを作ってくれと言われるので、それに従って作ります
$ sudo vim /etc/apache2/conf.d/passenger.conf
Chef ServerのPassenger用の設定
Chef ServerはMerb、つまりRackアプリなので、Passengerが有効な状態でconfig.ruの階層にあるpublicディレクトリをドキュメントルートにすると、アプリケーションとして動作します。
# まずはconfig.ruのありかを探す(aptで入れている場合はdpkgで)
$ gem contents chef-server-api|grep config.ru
# 見つかったので確認すると、publicディレクトリがある!
$ ls /var/lib/gems/1.9.1/gems/chef-server-api-10.xx.0/
LICENSE README.rdoc Rakefile app bin config config.ru development.ru lib public spec
あとは、このpublicディレクトリをapacheのDocumentRootに設定すればOKです。
パーミッションの修正
起動の仕方が変わるので、パーミッション(もしくは、apacheのプロセスユーザ)の修正が必要になります。
server.rbの設定内容やそこで設定しているパスへのパーミッション、認証に使っているpemファイルへのパーミッションを確認してください。
プロセスの切り替え
chef-serverのプロセスを停止し、apacheを起動します。
あとがき
WebUIを基本的に使っていないのでWebUIの手順は省きましたが、やるべき事は基本的に一緒です。ただ、同一アドレス・ポートでの共存は厳しそうなので、アドレスなりポートをapache側で分けてあげる必要があります。