Installs nginx and dependant modules from source in a modular fashion.
This cookbook requires Chef 12.7 and above.
At present, only Ubuntu < 16.04 is supported, however adding support for other distributions should be a simple matter.
The recipes are designed to create a default nginx installation called default
and will utilize the resources listed below.
Calling the standard nginx_resources::default
recipe will cause the following events to occur:
recipes/install_user
is called- The www-data user account is optionally created
recipes/install_common
is called- The
nginx_resources_instance[default]
resource is created - A few core and override configuration files are created
- The default site is created and optionally enabled
- The service files are created, but not the actual service due to timing
- The
recipes/install_modules
is called- We iterate through
node['nginx_resources']['source']['include_recipes']
and include recipes listed to install dependencies.
- We iterate through
recipes/install_source
is called- Package dependencies are installed
- The
nginx_resources_build[default]
resources is created
recipes/install_service
is called- The service is created and optionally started
- Within your cookbook, define an optional attribute file to customize the
nginx_resources
attributes to your liking. Each and every configuration parameter used by this cookbook is attribute driven. - Include the
nginx_resources::default
recipe in your run_list. - Customize the
nginx_resources_site[default]
resource.
Example
r = resources('nginx_resources_site[default]')
r.root '/var/www/backofficev2/current/public'
r.listen [80, '443 ssl']
r.locations [
{ 'uri' => '/',
'try_files' => '$uri @proxy'
},
{ 'uri' => '/admin/',
'configs' => {
'rewrite' => '^/admin/assets(/?.*)$ /assets$1 last'
},
'try_files' => '$uri @proxy'
},
{ 'uri' => '~\.php',
'configs' => {
'proxy_send_timeout' => 600,
'proxy_read_timeout' => 600
},
'fastcgi_pass' => '127.0.0.1:9000'
},
{ 'uri' => '@proxy',
'configs' => {
'proxy_send_timeout' => 600,
'proxy_read_timeout' => 600
},
'fastcgi_pass' => '127.0.0.1:9000'
}
]
r.includes << 'include.d/fastcgi.conf'
r.includes << 'include.d/stub_status.conf'
r.includes << 'include.d/health.conf'
r.enabled true
A deployment of nginx is comprised of a number of different resources. First, an nginx_resources_instance is created to define the basic folder structure. Then, any number of nginx_resources_module and nginx_resources_config are created to further customize the deployment. Lastly, a nginx_resources_build resource is created to compile and install nginx.
This resource builds out the folder structure for a specific deployment of nginx and it's dependant configuration files as well as creates the main configuration file.
Most of the properties have default values which lazilly load node attributes and should not generally need to be modified. Should you need modify them, however, refer to the source for more information.
With the default settings, the following structure will be created:
./var
./var/1.10.1
./var/1.10.1/logs
./var/1.10.1/logs/error.log
./var/1.10.1/html
./var/1.10.1/html/50x.html
./var/1.10.1/html/index.html
./var/1.10.1/modules
./var/1.10.1/modules/ndk_http_module.so
./etc
./etc/include.d
./etc/include.d/stub_status.conf
./etc/include.d/fastcgi.conf
./etc/include.d/health.conf
./etc/site.d
./etc/site.d/20-default
./etc/uwsgi_params
./etc/koi-utf
./etc/conf.d
./etc/conf.d/50-ssl_map.conf
./etc/conf.d/50-ssl.conf
./etc/conf.d/50-realip.conf
./etc/conf.d/50-gzip.conf
./etc/conf.d/20-mime_types.conf
./etc/conf.d/90-custom.conf
./etc/conf.d/20-core.conf
./etc/scgi_params
./etc/fastcgi.conf
./etc/nginx.conf
./etc/module.d
./etc/module.d/20-module_ndk.conf
./etc/fastcgi_params
./etc/mime.types
./etc/koi-win
./etc/win-utf
./sbin
./sbin/nginx
This resource downloads an external dependency (ex.: the lua module), unpacks it, creates a configuration file for it, and adds the module to the node attributes for the next compile phase. It does so by wrapping nginx_resources_source and nginx_resources_config.
The following properties are required and have no defaults:
- instance: the nginx_resources_instance name this module belongs to
- version: the version of this module
- checksum: the checksum of the tarball to download
- source: the url where the tarball is downloaded from
Once downloaded, the resource will inject the module in the global module configure argument attributes found in node['nginx_resources']['source']['external_modules']
.
Further properties, with defaults, may be modified and are referenced in the source file.
This resource downloads an external dependency (ex.: the lua module) and unpacks it.
The following properties are required and have no defaults:
- version: the version of this module
- checksum: the checksum of the tarball to download
- source: the url where the tarball is downloaded from
Further properties, with defaults, may be modified and are referenced in the source file.
This resource creates a configuration file for use with nginx. Examples of this in practice may be found here.
The following properties are required and have no defaults:
- instance: the nginx_resources_instance name this module belongs to
- category: the namespace both for source and destination files
Further properties, with defaults, may be modified and are referenced in the source file.
This resource builds the nginx source code for a specific nginx_resources_instance and should be smart enough not to recompile needlessly on each chef run.
The following properties are required and have no defaults:
- root_dir: The root directory containing nginx builds
- sbin_path: The
--sbin-path
or path to the nginx binary - conf_path: The
--conf-path
or path to the main nginx configuration file - prefix: The
--prefix
or directory into which to install - service: The service resource name to notify
Further properties, with defaults, may be modified and are referenced in the source file.
This resource is designed to create-or-remove a file which the health check looks for when determining if it should return a 503 for maintenance mode.
The following properties are all optional:
- path: The location of the maintenance file, defaults to:
node['nginx_resources']['health']['config']['maintenance_override']
- compile_time: Boolean which determins whether to run the action of manage at compile time.
- enable_only_if: A block which must return true/false determining whether maintenance mode should activated.
- disable_only_if: A block which must return true/false determining whether the maintenance mode should be activated.
Further properties, with defaults, may be modified and are referenced in the source file.