Kanrisuru::Nginx

This project helps you manage your remote Nginx webservers. Built ontop of the Kanrisuru library, it utilizes the core set of commands to install, service and configure the Nginx webserver.

Installation

Add this line to your application's Gemfile:

gem 'kanrisuru-nginx'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install kanrisuru-nginx

Usage

The nginx module is namespaced on a host and cluster instance under the nginx name.

Requirment

To use Kanrisuru::Nginx in your project, make sure to include both projects to manage the infrastructure.

require 'kanrisuru'
require 'kanrisuru-nginx'

Most commands with nginx need to be run as root, so don't forget to call the su method before running the nginx module.

Package Installation

Installation of the nginx package is straightforward. You can check if the package is installed directly with the installed? method.

host.su('root')
host = Kanrisuru::Remote::Host.new(host: 'centos-host', username: 'centos', keys: ['~/.ssh/id-rsa'])

host.nginx.installed?
# => false

result = host.nginx.install
result.success?
# => true 

host.nginx.installed?
# => true

The installation is installed via the apt, yum, and zypper package managers for their respective linux distribution types, namely: | Package Manager | OS Distro | |-----------------|-----------| | apt | debian | | apt | ubuntu | | yum | centos | | yum | redhat | | yum | fedora | | zypper | opensuse | | zypper | SUSE Enterprise Linux |

With Kanrisuru, the os_include and os_define takes care of figuring out which linux distro and release should be used with the corresponding install method, so you only need to call host.nginx.install for it to work.

Package Removal

To remove an installed version of Nginx, call:

host.nginx.installed?
# => true

host.nginx.remove

host.nginx.installed?
# => false

Note that if Nginx is running while calling remove, it will automatically stop any master / worker processes that are running before removing the package.

Service Methods

To service the nginx webserver, the following commands help you easily start, stop, and restart the webserver

host.nginx.running?
# => false

## Start the webserver
result = host.nginx.start
result.success?
# => true

host.nginx.running?
# => true

host.nginx.master_pid
# => 1337

result = host.nginx.restart
result.success?
# => true

host.nginx.master_pid
# => 4343

result = host.nginx.stop
result.success?
# => true

host.nginx.running?
# => false

You can test to see if the current configuration files are properly formatted

result = host.nginx.test
result.success?
# => true

result = host.nginx.test(config: '~/test.conf')
result.success?
# => true

To reload the nginx workers with updated configuration files, but not a full restart

host.nginx.master_pid
# => 4343

result = host.nginx.reload
result.success?
# => true

host.nginx.master_pid
# => 4343

Configuration Management

This is currently in development and is the focus of the next release for this module.

Utilities

You can fetch the master and worker process information

host.nginx.master_process
#<Struct:Kanrisuru::Core::System::ProcessInfo:0x000005f0
  ppid = 1,
  command = "nginx: master process nginx",
  cpu_time = "00:00:00",
  cpu_usage = 0.0,
  flags = 1,
  gid = 0,
  group = "root",
  memory_usage = 0.0,
  pid = 20484,
  policy = "SCHED_OTHER",
  policy_abbr = "TS",
  priority = 19,
  stat = "Ss",
  uid = 0,
  user = "root"
>

host.nginx.master_pid
# => 20484

host.nginx.worker_processess
[
  #<Struct:Kanrisuru::Core::System::ProcessInfo:0x0000f4d8
    ppid = 20484,
    command = "nginx: worker process",
    cpu_time = "00:00:00",
    cpu_usage = 0.0,
    flags = 5,
    gid = 994,
    group = "nginx",
    memory_usage = 0.0,
    pid = 20485,
    policy = "SCHED_OTHER",
    policy_abbr = "TS",
    priority = 19,
    stat = "S",
    uid = 997,
    user = "nginx"
  >
]

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/avamia/kanrisuru-nginx. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Kanrisuru::Nginx project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.