カラクリスタ

「輝かしい青春」なんて失かった人のブログ

nginxを気軽にインストールできるインストールマネージャ、ngxbrewを作りました!

概要: ngnxbrew というものを作った


こんにちま!

とは言っても朝っぱらですが、さっきこの記事書いてたら Emacs がクラッシュして、 さっきまで書いていた内容が全部パーになった、にゃるらコト岡村 直樹(24)です。 皆様おはようございます。

この前の記事で、うつになってどうこう、とか言っておりましたが、 最近では抗うつ薬のおかげですっかり元気なり、どれくらい元気かっていうと、 朝早くに目が覚めてから、 パソコン(Macbook Air)に病的にのめり込んで Rackhub の環境構築をする、 ということができるぐらい元気になりました。 あれ、それヤンでるんじゃね。別の意味で。

で、近状報告は良いとして、このたび、 大量のアクセスも軽快に捌くということで人気の HTTP サーバ、

nginx

を気軽にインストールできるインストールマネージャ、

https://github.com/nyarla/ngxbrew/ngxbrew

というものを作りました。

これは何するものかっていうと、 perlbrewとかnodebrewとかpythonbrewとかみたいに、 複数のバージョン、あるいは個別のコンパイルオプションを指定したnginxを、 気軽にインストール and 管理できるようにしたものです。

なんでこんなもん作ったかというと、

  1. http://rackhub.net/ で nginx 使って WebDAV したい!
  2. システムの nginx は使いたくないなー
  3. nginx ってモジュール組み込むのに再コンパイルが必要なのか!
  4. 手動インストールめどい
  5. そうだ!  perlbrew とか参考にしてngxbrewっというのを作れば良いんじゃね!?

っていうのが大体の流れ。まあアレだ、楽するために全力でコード書くという、 プログラマーの三大美徳的な感じです。

で、このngxbrew、実際に作る際に、

nodebrew

を多大に参考に致しました。ngxbrewは nodebrew が無かったら、 多分完成してなかったと思います。hokaccha++

さて、経緯とか謝辞とかその辺にして、実際の使い方を紹介したいと思います!

ngxbrewのインストール

ngxbrewをインストールするには、ワンライナーで、

$ curl https://raw.github.com/nyarla/ngxbrew/master/ngxbrew | perl - setup

すれば、一発で多分入ると思います。

あとその際に環境変数NGXBREW_ROOTが指定されていると、 任意のディレクトリにngxbrewをインストールできます。 ちなみにデフォルトは~/.ngxbrew/です。

で、その後に$NGXBRW_ROOT/binにパスを通しておきます。 確認はwhich ngxbrewでパスが表示されれば OK。

これで準備は完了です。簡単でしょ?

ngxbrewを使った nginx のインストール

んで、次が本番、ngxbrewを使った nginx のインストール方法。

ngxbrewで nginx をインストールするには、大体、

$ ngxbrew install <version> <name> --enable="<modA>,<modB>"

と言った感じでインストールします。

引数に関しては、

<version>   - インストールしたいnginxのバージョン
<name>      - インストールするnginxのラベル
--enable    - 有効にしたいnginxのコアモジュール。複数指定可能
例えば`--enable=http_dav`と指定すると、
./configre --with-http_dav_moduleと指定したのと同等になる。
--disable   - 無効にしたいnginxのコアモジュール。
指定方法は`--enable`と同等
--module    - 追加したいnginxの3rd party moduleの指定。後述
--configure - ./configureに直接渡す引数

という感じです。

引数が足りなかったり、あるいは間違ってたりすると、 nginx の./configureで止まるので、そこらあたりは大丈夫です。

ngxbrewでコアモジュール以外のモジュールをインスコする方法

さて、さっきの引数の説明で、

  • --module

という指定がありましたが、これは、nginx のコアでは提供されていない、 第三者が作ったモジュールを組み込む際に指定します。

この--moduleという引数を使うには、ちょっとした事前準備が必要で、 ngxbrewをインストールしたディレクトリ以下のmodulesディレクトリに、 拡張モジュールの一式が展開されている必要があります。

例えば、ngxbrewのインストール先が~/.ngxbrewで、 WebDAV 用の拡張モジュールである、

nginx-dav-ext-module

を組み込みたい場合には、

$ cd ~/.ngxbrew/modules
$ git clone git://github.com/arut/nginx-dav-ext-module.git
$ ls -F
nginx-dav-ext-module/

した後に、

$ ngxbrew install 1.2.1 webdav --enable="http_dav" --module="nginx-dav-ext-module"

という感じで指定してインストールすると、 指定した拡張モジュールがインストールできます。

本当はこの辺り自動化すると良いかな? とは思うのですが、 拡張モジュールの配布方法が、github だったり tmercurial だったりして、 色々とバラバラなので、その辺りは手作業でやりましょう、 ということに今のところなってます。

ngxbrewでインストールした nginx を使う

んで、ngxbrewでインストールした nginx を使うには、

$ ngxbrew use <name>

を指定すると、自動的に$NGXBREW_ROOT/bin以下に、 nginx へのシンボリックリンクが張られます。

その他色々

他のコマンド等については、

$ ngxbrew help

https://github.com/nyarla/ngxbrewngxbrew

README.mdを読むか、あるいはソース読むかをしてください。

今のところ、ngxbrewは作ったばかりで、ドキュメント等は整備してないので、 その辺りちょっとハードルが高いかもしれませんが。

ちなみにngxbrewには僕があると良いなーと思う機能のみを実装していて、 他の必要な機能等が思いついてないので、もしこういう機能欲しい! とかあったら、

Twitter: @nyarla

か、github の issue を立てるかでお知らせください。 僕が必要と判断し、かつ実装可能であれば実装したいと思ってます。

とまあそんな感じです

とりあえず今回作ったngxbrewについては今のところそんな感じです。

これ大体一日か二日で作った急ごしらえなソフトウェアなので、 まだまだ未熟な面があるかと思いますが、基本的な機能はそろってるので、 結構使えるんじゃないかなーと思います。

あと僕はngxbrewを使って、実際に Rackhub に WebDAV 環境を整えてあったりします。 なんで Rackhub に WebDAV 環境を整えてるかはまた別の機会に紹介したいと思いますが、 とりあえず今日の所はそんな感じです。

という訳で以上、nginx を気軽にインストールできるソフトウェア、 ngxbrewを作ったよーというお話でした。

ngxbrew、良かったら使ってみてください。

それでは。

ノシ

FIXME