Coder Social home page Coder Social logo

opsworks_ruby's Introduction

opsworks_ruby Cookbook

Chef cookbook Build Status Coverage Status Commitizen friendly license

A chef cookbook to deploy Ruby applications to Amazon OpsWorks.

Quick Start

This cookbook is designed to "just work". So in base case scenario, all you have to do is create a layer and application with an optional assigned RDS data source, then add recipes to the corresponding OpsWorks actions.

Support

  • Database
    • MariaDB
    • MySQL
    • PostgreSQL
    • Sqlite3
  • SCM
    • git
  • Framework
    • Ruby on Rails
  • App server
    • Unicorn
  • Web server
    • nginx
  • Worker
    • Null (no worker)
    • sidekiq

Requirements

Cookbooks

Platform

This cookbook was tested on the following OpsWorks platforms:

  • Amazon Linux 2016.03
  • Amazon Linux 2015.09
  • Amazon Linux 2015.03
  • Ubuntu 14.04 LTS
  • Ubuntu 12.04 LTS

In addition, all recent Debian family distrubutions are assumed to work.

Attributes

Attributes format follows the guidelines of old Chef 11.x based OpsWorks stack. So all of them, need to be placed under node['deploy'][<application_shortname>]. Attributes (and whole logic of this cookbook) are divided to six sections. Following convention is used: app == node['deploy'][<application_shortname>] so for example app['framework']['adapter'] actually means node['deploy'][<application_shortname>]['framework']['adapter'].

basic

  • node['applications']
    • An array of application shortnames which should be deployed to given layer. If not provided, all detected applications will be deployed.

database

Those parameters will be passed without any alteration to the database.yml file. Keep in mind, that if you have RDS connected to your OpsWorks application, you don't need to use them. The chef will do all the job, and determine them for you.

  • app['database']['adapter']
    • Supported values: mariadb, mysql, postgresql, sqlite3
    • Note: There is no default database adapter if a RDS resource is not defined in your stack.
    • ActiveRecord adapter which will be used for database connection.
  • app['database']['username']
    • Username used to authenticate to the DB
  • app['database']['password']
    • Password used to authenticate to the DB
  • app['database']['host']
    • Database host
  • app['database']['database']
    • Database name
  • app['database'][<any other>]
    • Any other key-value pair provided here, will be passed directly to the database.yml

scm

Those parameters can also be determined from OpsWorks application, and usually you don't need to provide them here. Currently only git is supported.

  • app['scm']['scm_provider']
    • Supported values: git
    • Default: git
    • SCM used by the cookbook to clone the repo.
  • app['scm']['remove_scm_files']
    • Supported values: true, false
    • Default: true
    • If set to true, all SCM leftovers (like .git) will be removed.
  • app['scm']['repository']
    • Repository URL
  • app['scm']['revision']
    • Branch name/SHA1 of commit which should be use as a base of the deployment.
  • app['scm']['ssh_key']
    • A private SSH deploy key (the key itself, not the file name), used when fetching repositories via SSH.
  • app['scm']['ssh_wrapper']
    • A wrapper script, which will be used by git when fetching repository via SSH. Essentially, a value of GIT_SSH environment variable. This cookbook provides one of those scripts for you, so you shouldn't alter this variable unless you know what you're doing.
  • app['scm']['enabled_submodules']
    • If set to true, any submodules included in the repository, will also be fetched.

framework

Pre-optimalization for specific frameworks (like migrations, cache etc.). Currently only Rails is supported.

  • app['framework']['adapter']
    • Supported values: rails
    • Default: rails
    • Ruby framework used in project.
  • app['framework']['migrate']
    • Supported values: true, false
    • Default: true
    • If set to true, migrations will be launch during deployment.
  • app['framework']['migration_command']
    • A command which will be invoked to perform migration. This cookbook comes with predefined migration commands, well suited for the task, and usually you don't have to change this parameter.
  • app['framework']['assets_precompile']
    • Supported values: true, false
    • Default: true
  • app['framework']['assets_precompilation_command']
    • A command which will be invoked to precompile assets.

appserver

Configuration parameters for the ruby application server. Currently only Unicorn is supported.

webserver

Webserver configuration. Proxy passing to application is handled out-of-the-box. Currently only nginx is supported.

  • app['webserver']['adapter']
    • Default: nginx
    • Supported values: nginx, null
    • Webserver in front of the instance. It runs on port 80, and receives all requests from Load Balancer/Internet. null means no webserver enabled.
  • app['webserver']['build_type']
    • Supported values: default or source
    • Default: default
    • The way the nginx cookbooks handles nginx installation. Check out the corresponding docs for more details. Never use node['nginx']['install_method'], as it will be always overwritten by this attribute.
  • app['webserver']['client_body_timeout']
    • Default: 12
  • app['webserver']['client_header_timeout']
    • Default: 12
  • app['webserver']['client_max_body_size']
    • Default: 10m
  • app['webserver']['dhparams']
    • If you wish to use custom generated DH primes, instead of common ones (which is a very good practice), put the contents (not file name) of the dhparams.pem file into this attribute. Read more here.
  • app['webserver']['extra_config']
    • Raw nginx configuration, which will be inserted into server section of the application for HTTP port.
  • app['webserver']['extra_config_ssl']
    • Raw nginx configuration, which will be inserted into server section of the application for HTTPS port. If set to true, the extra_config will be copied.
  • app['webserver']['keepalive_timeout']
    • Default: 15
  • app['webserver']['log_dir']
    • Default: /var/log/nginx
    • A place to store application-related nginx logs.
  • app['webserver']['proxy_read_timeout']
    • Default: 60
  • app['webserver']['proxy_send_timeout']
    • Default: 60
  • app['webserver']['send_timeout']
    • Default: 10
  • app['webserver']['ssl_for_legacy_browsers']
    • Supported values: true, false
    • Default: false
    • By default nginx is configured to follow strict SSL security standards, covered in this article. However, old browsers (like IE < 9 or Android < 2.2) wouldn't work with this configuration very well. If your application needs a support for those browsers, set this parameter to true.

Since this driver is basically a wrapper for nginx cookbook, you can also configure node['nginx'] attributes as well (notice that node['deploy'][<application_shortname>] logic doesn't apply here.)

worker

Configuration for ruby workers. Currenty Null (no worker) and Sidekiq are supported. Every worker is covered by monitd daemon out-of-the-box.

  • app['worker']['adapter']
    • Default: null
    • Supported values: null, sidekiq
    • Worker used to perform background tasks. null means no worker enabled.
  • app['worker']['process_count']
    • ** Default:** 2
    • How many separate worker processes will be launched.
  • app['worker']['syslog']
    • Default: true
    • Supported values: true, false
    • Log worker output to syslog?
  • app['worker']['config']
    • Configuration parameters which will be directly passed to the worker. For example, for sidekiq they will be serialized to sidekiq.yml config file.

Recipes

This cookbook provides five main recipes, which should be attached to corresponding OpsWorks actions.

  • opsworks_ruby::setup - attach to Setup
  • opsworks_ruby::configure - attach to Configure
  • opsworks_ruby::deploy - attach to Deploy
  • opsworks_ruby::undeploy - attach to Undeploy
  • opsworks_ruby::shutdown - attach to Shutdown

Contributing

Please see CONTRIBUTING for details.

Author and Contributors

Author: Igor Rzegocki <[email protected]>

Contributors

License

License: MIT

opsworks_ruby's People

Contributors

beirigo avatar phongsi avatar ajgon avatar jameswatling avatar avalade avatar npflood avatar

Watchers

Justin Louie avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.