Deploying software with Chef
There are numerous benefits to deploying your software using Chef; the primary benefit is automation—the chef-client can be run periodically, and it can execute fully-automated deployments whenever changes are made to the source code repository. Additionally, Chef stores all your configuration data, so you can avoid storing sensitive secrets and hard-coding URLs or other dynamic data in your configuration. For example, if you have an application with a database pool, and you add a new database host to your pool, Chef can use a simple search to populate the list of hosts to include in the connection pool so that it is always up to date with your infrastructure.
However, deploying software with Chef does require some coordination between your application and Chef. You will need to maintain recipes required for deploying your application, and you will also want to use Chef as the authoritative source for your configuration data, which involves writing configuration templates. By using Chef to manage your deployments, you can also generate any configuration data needed to run your software based on your infrastructure configuration; in our case, a simple config.py
file for your web.py
application. This method can also be used to manage the database.yml
file (and any other YAML files) for Rails applications, the server.yml
file for a Dropwizard application, or any other configuration files needed to run your service.