魔法使いの卵

WEBエンジニアの卵の成長記録

僕の理想とするNginxの導入方法ができた

はじめに

  • ソースビルドもやったしパッケージもやった
  • でも、本当にこれでいいのかなぁ・・・ってもやもやがあった
  • 今回は考えたもやもやと出した結論と解決した方法をまとめておく
  • いい方法があればぜひ知りたい・・・

ソースビルとパッケージのメリット・デメリット

ソースビルドのメリット(すぐおもいついたもの)

  • 拡張性と柔軟性がある

ソースビルドのデメリット(すぐおもいついたもの)

  • 必要な設定はすべて自分で行う必要があるのでめんどくさい
  • RPM等のパッケージマネージャで管理できない

パッケージのメリット(すぐおもいついたもの)

  • インストールした瞬間から設定済みなので即時利用可能
  • RPM等のパッケージマネージャで管理できている

パッケージのデメリット(すぐおもいついたもの)

  • 拡張性と柔軟性にかける

思ったこと

  • 拡張性を常に意識した作りにしたい
  • パッケージマネージャーで管理したい
  • めんどくさい設定はやりたくない

結論

いいとこどりしたやつ作ればええやんってなりました

僕が目指す理想形

  • めんどくさい設定は全部終わっててほしい
  • 設定系はデファクトスタンダートがいい
  • 拡張性はソースビルド並にほしい
  • パッケージマネージャーで管理したい
  • インストールもアンインストールもコマンド1発がいい

ないならつくるしかないので作ります

RPMのコンパイルオプションを指定して拡張性の高いNginxを導入する

  • 利用するパッケージをインストールしておく
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ncurses-devel perl-devel perl-ExtUtils-Embed GeoIP-devel libxslt-devel gd-devel rpm-build yum-utils
  • rpmbuild 実行用の「builder」ユーザを作成
sudo useradd builder
  • sudo権限を付与する
sudo usermod -G wheel builder
  • builderのパスワードを設定する
sudo passwd builder
  • builderユーザに切り替える
sudo su builder
  • NginxのSRPMSを取得する
curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.10.0-1.el6.ngx.src.rpm
  • RPMパッケージのインストールの進行状況と詳細を出しながらインストールする
rpm -ivh nginx-1.10.0-1.el6.ngx.src.rpm
  • ./configureオプションが記述されているファイルを開く
vim ~/rpmbuild/SPECS/nginx.spec
  • ./configureオプションは以下になります
    • デフォルトでいれたいものが全て入ってました
     82 %define COMMON_CONFIGURE_ARGS $(echo "\
     83         --prefix=%{_sysconfdir}/nginx \
     84         --sbin-path=%{_sbindir}/nginx \
     85         --modules-path=%{_libdir}/nginx/modules \
     86         --conf-path=%{_sysconfdir}/nginx/nginx.conf \
     87         --error-log-path=%{_localstatedir}/log/nginx/error.log \
     88         --http-log-path=%{_localstatedir}/log/nginx/access.log \
     89         --pid-path=%{_localstatedir}/run/nginx.pid \
     90         --lock-path=%{_localstatedir}/run/nginx.lock \
     91         --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \
     92         --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \
     93         --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \
     94         --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \
     95         --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \
     96         --user=%{nginx_user} \
     97         --group=%{nginx_group} \
     98         --with-http_ssl_module \
     99         --with-http_realip_module \
    100         --with-http_addition_module \
    101         --with-http_sub_module \
    102         --with-http_dav_module \
    103         --with-http_flv_module \
    104         --with-http_mp4_module \
    105         --with-http_gunzip_module \
    106         --with-http_gzip_static_module \
    107         --with-http_random_index_module \
    108         --with-http_secure_link_module \
    109         --with-http_stub_status_module \
    110         --with-http_auth_request_module \
    111         --with-http_xslt_module=dynamic \
    112         --with-http_image_filter_module=dynamic \
    113         --with-http_geoip_module=dynamic \
    114         --with-http_perl_module=dynamic \
    115         --add-dynamic-module=njs-%{module_njs_shaid}/nginx \
    116         --with-threads \
    117         --with-stream \
    118         --with-stream_ssl_module \
    119         --with-http_slice_module \
    120         --with-mail \
    121         --with-mail_ssl_module \
    122         --with-file-aio \
    123         --with-ipv6 \
    124         %{?with_http2:--with-http_v2_module}")
  • RPMを再構築
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
  • 再構築したRPMをインストール
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-1.10.0-1.el7.centos.ngx.x86_64.rpm

最後に

  • 一旦これで僕が求めてた理想形を手にすることはできた
  • ひとまず、これで使ってみて改善点があればまたいじってみようとおもう