cookbook 'application_procfile', '= 0.3.29'
application_procfile (13) Versions 0.3.29 Follow1
Installs/Configures services from an application's Procfile
cookbook 'application_procfile', '= 0.3.29', :supermarket
knife supermarket install application_procfile
knife supermarket download application_procfile
application_procfile Cookbook
This cookbook installs initscripts and monitrc files for the different process types specified in your application's Procfile.
Requirements
cookbooks
-
application
- application_procfile needs the application cookbook to discover a Procfile. -
monit
- application_procfile needs the monit cookbook to configure services under monit.
gems
-
foreman
- application_procfile uses the foreman gem's Procfile parser.
Usage
<cookbook>/metadata.rb:
depends 'application_procfile'
<cookbook>/recipes/default.rb:
include_recipe 'application_procfile' application 'someapp' do ... procfile do web node[:someapp][:processes][:web] || 1, :reload => 'USR2', :health_check => { :path => '/system/status', :timeout => 10, :unhealthy => 10, :action => :alert }, :limit => { :totalmem => '512 MB', :unhealthy => 10 } worker node[:someapp][:processes][:worker] || 2, :limit => { :totalmem => '192 MB' } end end
This will run a default of 1 web and 2 workers for a Procfile that looks like:
web: bundle exec unicorn -c ./config/unicorn.rb
worker: bundle exec rake resque:work
If you provide a port number via a node attribute node[:app][:port]
then it will be incremented automatically and made available to your Procfile commands:
web: bundle exec thin start -p $PORT
Any output to stderr or stdout from your processes will be logged to files like:
/var/log/someapp/web.log
/var/log/someapp/worker.log
To restart your workers:
touch /var/local/someapp/worker.restart
The reload
option specifies an optional signal that can be sent to processes to gracefully reload them by doing:
touch /var/local/someapp/web.reload
If the process is unicorn a HUP and USR2 combination will be used automatically, with no need for the reload
option.
To properly support reloads for unicorn processes, a unicorn.rb with before_fork, correct paths and worker numbers will be installed in the shared directory and will include your config/unicorn.rb
if you have one.
You can specify resource limits with the :limit
option, such as :mem
, :totalmem
, :cpu
, :totalcpu
, or :children
.
For :mem
and :totalmem
the value is the maximum allowable memory for the process or the process and all it's children, respectively, as B, KB, MB, GB, or %. (eg. :limit => { :totalmem => '512 MB' }
)
For :cpu
, and :totalcpu
the value is the maxmimum allowable CPU usage for the process or the process and all it's children, respectively, as %. (eg. :limit => { :totalcpu => '90%' }
)
For :children
the value is the maximum number of child processes allowed for the process. (eg. :limit => { :children => 10 }
)
Within :limit
you can specify the action to be taken :alert
, :restart
, or :stop
when any of the limits are exceeded. (eg. :limit => { :cpu => '25%', :action => :alert }
)
You can also specify the number of times the limits must exceed their values before taking action using :unhealthy
. (eg. :limit => { :mem => '10%', :unhealthy => 10 }
)
You can specify a health check with the :health_check
option as long as the port your service is listening on is accessible via node attribute as node[:app][:port]
or you specify a :port
in your health check. (eg. :health_check => { :port => 8080, :path => '/system/status', :timeout => 10, :unhealthy => 10, :action => :alert }
)
Contributing
- Fork the repository on Github
- Create a named feature branch (like
add_component_x
) - Write your change
- Write tests for your change (if applicable)
- Run the tests, ensuring they all pass
- Submit a Pull Request using Github
License and Authors
Author:: Javier Muniz javier@granicus.com
Author:: Matt Kasa mattk@granicus.com
Copyright 2013, Granicus Inc.
This file is part of application_procfile.
application_procfile is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
application_procfile is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with application_procfile. If not, see http://www.gnu.org/licenses/.
Dependent cookbooks
application >= 3.0.0 |
monit >= 0.0.0 |
Contingent cookbooks
There are no cookbooks that are contingent upon this one.