Ansible Unicorn/rbenv setup
This Ansible role installs a service for Unicorn, with rbenv and multiple application support
Requirements
Expects rbenv to be installed system-wide
Role Variables
-
rbenv_root
defaults to/usr/local/rbenv
-
rbenv_exe
defaults to/usr/local/rbenv/bin/rbenv
-
rails_apps
defaults to[]
Each rails_apps entry is a dict with the following options
-
name
(egmy_app
, required) -
ruby_version
(egruby-2.1.1
, required) -
env
defaults toproduction
-
root
defaults to/var/www/{{ name }}/current
(Capistrano compatible) -
config
is used fordb
andsecrets
, defaults to{{ root }}/config
if root is specified, otherwise to/var/www/{{ name }}/shared/config
-
db
is a dict for generating adatabase.yml
file, with options:adapter
defaults topostgresql
host
defaults tolocalhost
database
defaults to app nameusername
defaults to app namepassword
defaults to app namepool
defaults to5
timeout
defaults to5000
-
secrets
is a dict and all its keys are converted to secrets.yml
-
Example Playbook
The role could be included in a playbook as follows:
---
-hosts: application
roles:
- role: unicorn-rbenv
rails_apps:
- { name: 'my_app1', ruby_version: 'ruby-1.9.3' }
- { name: 'my_app2', ruby_version: 'ruby-2.1.1', root: '/var/test_apps/app2', env: staging }
- name: 'my_app3'
ruby_version: 'ruby-2.1.1'
db:
password: topsecret
secrets:
secret_key_base: SuperSecretHexString
If the init script is called without any config parameters, it will attempt to run the init command for all unicorn configurations listed in /etc/unicorn/*.conf
/etc/init.d/unicorn start
# starts all unicorns
If you specify a particular config, it will only operate on that one
/etc/init.d/unicorn start my_app
Notes
This role does not deploy the actual application, it assumes that this will be done in another role or using a deployment tool such as Capistrano.
If you use this role to generate database.yml and secrets.yml, it is advised to store the keys in an ansible vault file
License
MIT