Edited at

10系のchef-serverをApache + Passengerで動かす

More than 5 years have passed since last update.

chef-serverはどうやらIPv6をListenできないっぽい。(使われていたMerbのコードを見たけれど、それっぽいのが見つからない。。。)

最も簡単なのは、nginxでもapacheでもいいんですが、IPv6でlistenするproxyを立てちゃうことなんですが、MerbなんでPassengerでもいけるはず。。。ということで、Apache + Passengerで動かしてみました。

ちなみにChef 11系使えば不要です。(Merbもないし)

諸事情あり11系にアップグレードできなくて、かつ、半ば趣味が入っている人向けです。


手順

AWS上のubuntu 12.04でやりました


Apache + Passengerのインストール

ここは至って普通です。一応書いておきますが、お好きな手順で大丈夫です。


install_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_passenger

# まずは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側で分けてあげる必要があります。