Help us understand the problem. What is going on with this article?

nginxソースビルドを自動化出来るnginx-buildをサクッと入れるItamaeプラグイン作った

More than 3 years have passed since last update.

nginxは、普通に使うだけなら各ディストリビューションで提供されているパッケージをいれれば良いんですが、サードパーティのモジュールを使いたい時とかはビルドをしなくてはならないです。非常に面倒くさいです。

そんな面倒くさいビルドを自動化してくれるnginx-buildという神ツールがあったので、nginx-buildを導入するItamaeプラグインを作りました。Itamae使っている人は、使ってみてください。

nginx-buildとは

nginx-buildはメルカリの@cubicdaiyaさんがGoで書かれたnginxのビルドプロセスを自動化してくれるツールです。バイナリでも配布されており、Linux以外にもMacのHomebrewにも対応しています。

使い方

nginx-buildの使い方は非常に簡単です。バイナリをダウンロードして設置したら、すぐ使えます。

$ nginx-build -d work -v 1.8.0

これでv1.8.0のnginxがビルドされます。最後のmake installだけは手動で行います。

$ cd work/1.8.0/nginx-1.8.0
$ sudo make install

configureオプション

configureオプションを指定できます。

$ nginx-build -d work -v 1.8.0 -c configure.sh
configure.sh
#!/bin/sh

./configure \
  --user=nginx \
  --group=nginx \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --pid-path=/var/run/nginx.pid \
  --with-http_ssl_module

サードパーティモジュール

サードパーティモジュールも指定すると、ダウンロードから組み込みまで全部自動でやってくれます。すごすぎる。

$ nginx-build -d work -v 1.8.0 -m modules3rd.ini
modules3rd.ini
[ngx_cache_purge]
form=git
url=https://github.com/FRiCKLE/ngx_cache_purge.git
rev=2.3

他にもOpenRestyとかTengineのビルドをサポートしていたりと細かいところまで手の届く素晴らしいツールです。ありがとうございます。詳しいことについては@cubicdaiyaさんの解説記事を読むと良いです。

Itamaeプラグイン

紹介したnginx-buildの導入をItamaeで自動化するようにプラグインがこちらです。

使い方

gem 'itamae-plugin-recipe-nginx_build'
recipe.rb
include_recipe "nginx_build"
include_recipe "nginx_build::install"

これだけで、デフォルトv1.8.0のnginxがインストールされます(後述するオプションで細かく指定できます)。

なにをやってくれるのか

  • nginxに必要なパッケージのインストール
  • nginx-buildのインストール
  • nginx v1.8.0の make install
  • nginxの起動スクリプト設置
  • nginxの起動&自動起動設定

この5つを行います。nginxのホスト毎の設定ファイルは設置しないので、別途レシピに書く必要があります。

オプション

Itamaeのノードファイルで細かく指定できます。すべてオプショナルなので、指定しなかった場合は、下記の値がデフォルトで反映されます(modules / modules3rdsを除く)。

development.yml
nginx_build:
  platform: linux ( or darwin )
  version: 0.6.4
  bin: /usr/local/bin/
  nginx_version: 1.8.0
  nginx_user: nginx
  nginx_group: nginx
  nginx_sbin: /usr/sbin/nginx
  nginx_conf: /etc/nginx/nginx.conf
  nginx_pid: /var/run/nginx.pid
  modules:
    - http_ssl_module
  modules3rds:
    -
      name: ngx_cache_purge
      form: git
      url: https://github.com/FRiCKLE/ngx_cache_purge.git
      rev: 2.3
  configure_path: /usr/local/nginx_build/configure.sh
  modules3rd_path: /usr/local/nginx_build/modules3rd.ini

実際の使い方

必要最低限の設定ファイルしか設置されないので、サーバごとに必要な設定ファイルは別途レシピで書いてあげる感じになります。僕が実際に使っているレシピの一部を抜き出すとこんな感じになります。

nginx/default.rb
include_recipe "nginx_build"
include_recipe "nginx_build::install"

directory "/etc/nginx/conf.d/"
template "/etc/nginx/conf.d/virtual.conf" do
  owner "root"
  group "root"
  mode "644"
  source "./#{node[:role]}/templates/etc/nginx/conf.d/virtual.conf.erb"
  notifies :restart, "service[nginx]"
end

directory "/var/log/nginx/"
template "/etc/logrotate.d/nginx" do
  source "./#{node[:role]}/templates/etc/logrotate.d/nginx.erb"
end

プラグインが動かない環境がたぶんあると思うので、不具合あればIssueなりプルリクなり投げていただけると助かります。

zaru
basicinc
マーケティングとテクノロジーで社会のあらゆる問題を解決する集団
https://tech.basicinc.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした