nginx-build
nginx-build copied to clipboard
Seamless nginx builder
nginx-build
nginx-build - provides a command to build nginx seamlessly.

Requirements
Build Support
Installation
go install github.com/cubicdaiya/nginx-build@latest
Quick Start
nginx-build -d work
Custom Configuration
nginx-build provides a mechanism for customizing configuration for building nginx.
Configuration for building nginx
Prepare a configure script like the following.
#!/bin/sh
./configure \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
Give this file to nginx-build with -c.
$ nginx-build -d work -c configure.example
About --add-module and --add-dynamic-module
nginx-build allows to use --add-module.
$ nginx-build \
-d work \
--add-module=/path/to/ngx_http_hello_world
Also, nginx-build allows to use --add-dynamic-module.
$ nginx-build \
-d work \
--add-dynamic-module=/path/to/ngx_http_hello_world
Embedding zlib statically
Give -zlib to nginx-build.
$ nginx-build -d work -zlib
-zlibversion is an option to set a version of zlib.
Embedding PCRE statically
Give -pcre to nginx-build.
$ nginx-build -d work -pcre
-pcreversion is an option to set a version of PCRE.
Embedding OpenSSL statically
Give -openssl to nginx-build.
$ nginx-build -d work -openssl
-opensslversion is an option to set a version of OpenSSL.
Embedding LibreSSL statically
Give -libressl to nginx-build.
$ nginx-build -d work -libressl
-libresslversion is an option to set a version of LibreSSL.
Embedding 3rd-party modules
nginx-build provides a mechanism for embedding 3rd-party modules.
Prepare a json file below.
[
{
"name": "ngx_http_hello_world",
"form": "git",
"url": "https://github.com/cubicdaiya/ngx_http_hello_world"
}
]
Give this file to nginx-build with -m.
$ nginx-build -d work -m modules.json.example
Embedding 3rd-party module dynamically
Give true to dynamic.
[
{
"name": "ngx_http_hello_world",
"form": "git",
"url": "https://github.com/cubicdaiya/ngx_http_hello_world",
"dynamic": true
}
]
Provision for 3rd-party module
There are some 3rd-party modules expected provision. nginx-build provides the options such as shprov and shprovdir for this problem.
There is the example configuration below.
[
{
"name": "njs/nginx",
"form": "hg",
"url": "https://hg.nginx.org/njs",
"shprov": "./configure && make",
"shprovdir": ".."
}
]
Applying patch before building nginx
nginx-build provides the options such as -patch and -patch-opt for applying patch to nginx.
nginx-build \
-d work \
-patch something.patch \
-patch-opt "-p1"
Idempotent build
nginx-build supports a certain level of idempotent build of nginx.
If you want to ensure a build of nginx idempotent and do not want to build nginx as same as already installed nginx,
give -idempotent to nginx-build.
$ nginx-build -d work -idempotent
-idempotent ensures an idempotent by checking the software versions below.
- nginx
- PCRE
- zlib
- OpenSSL
On the other hand, -idempotent does not cover versions of 3rd party modules and dynamic linked libraries.
Build OpenResty
nginx-build supports to build OpenResty.
$ nginx-build -d work -openresty -pcre -openssl
If you don't install PCRE and OpenSSL on your system, it is required to add the option -pcre and -openssl.
And there is the limitation for the support of OpenResty.
nginx-build does not allow to use OpenResty's unique configure options directly.
If you want to use OpenResty's unique configure option, Configuration for building nginx is helpful.
Build Tengine
nginx-build supports to build Tengine.
$ nginx-build -d work -tengine -openssl
If you don't install OpenSSL on your system, it is required to add the option -openssl.
There is the limitation for the support of Tengine.
nginx-build does not allow to use Tengine's unique configure options directly.
If you want to use Tengine's unique configure option, Configuration for building nginx is helpful.