Skip to content

Latest commit

 

History

History
153 lines (106 loc) · 6.56 KB

README.md

File metadata and controls

153 lines (106 loc) · 6.56 KB

Amoeba Deploy Tools

Amoeba Deploy Tools (ADT) is a ruby gem that enables rapid creation of servers using the Chef config management system. Using Chef today there are many tools and best practices, and we have found that often setting up a chef "kitchen" can be tedious. Additionally, we believe in supporting server-less deploys. That is, we don't like to maintain and run a separate chef server just to manage our boxes.

ADT integrates a number of other tools (chef-solo, and librarian, and others) and we provide a skeleton Kitchen, so you can fork our kitchen, install this gem, and deploy a node in minutes.

Short introduction

First, you need ruby installed. Next, add amoeba-deploy-tools to your project Gemfile, or install via the gem command:

> gem install amoeba-deploy-tools

If you are preparing a server to install an application, change to that project's directory. Otherwise, switch to a dir where you plan on running ADT from. And run:

> amoeba init

The command will walk you through the process of initializing your kitchen. Now you've got a kitchen all ready to go. We recommend you add it to version control (git). We do not recommend you add the .amoeba.yml configuration file to git.

Next you must create a node definition, and run a deploy. A node definition sits in the kitchen's nodes/ directory. See this directory for a sample node you can copy / rename to make your own.

Once you have a node defined, just run:

> amoeba node bootstrap --node <node-name>

... and the node will be provisioned. After provisioning, the node's metadata will be stored in the data_bags folder. Our skeleton kitchen includes a basenode recipe that creates a deployment user on the destination box, and disables root access. This user's name will be cached in the node's databag and used for subsequent operations to the box. Now, as you make changes to the node, or any cookbooks you create in site-cookbooks, you can push those changes by running:

> amoeba node push --node <node-name>

Finally to setup Capistrano, you need only add the following to your existing Capfile:

require 'amoeba_deploy_tools/capistrano'

For a full list of commends, run amoeba help or see below.

Detailed Information

In essence, ADT is controlled by a configuration file, .amoeba.yml, specifying where your kitchen will be located, and a copy of the kitchen itself. In the future, we will support specifying deployment-related configuration in this file (such as SSH information). So we recommend you keep it gitignored if it contains sensitive information. The kitchen should be kept under version control, and you can either fork it prior to running amoeba init or you can let amoeba init make a copy of our skeleton which you can add to version control later.

Vagrant Testing

Using Vagrant to test your nodes is easy! Just install Vagrant, run amoeba init and modify the kitchen's Vagrantfile, as necessary. Run vagrant up and watch as your VM comes alive.

Then, you can ensure the provider is setup correctly (see data_bags/providers/vagrant.json). You must ensure the SSH port matches that in Vagrantfile (by default 2222), and you must point the provider to the SSH key Vagrant uses (if you just installed Vagrant, this is by default correct, ~/.vagrant.d/insecure_private_key). You can, however, change the private key (for security reasons if you plan on distributing the VM or using it in production) by specifying an alternative one in the Vagrantfile configuration key config.ssh.private_key_path (see the following documentation on Vagrant for more information).

Commands

amoeba init [url] [--skeleton]

The URL is optional, but if specified will be used as the library's git repo. You can also specify --skeleton, which will use the specified URL as a skeleton, and make a copy of it (useful if you do not already have a Kitchen you wish to use in git, but want to start a new one based on the URL specified).

The default URL is Amoeba's skeleton, which will be copied (as if --skeleton was specified).

Capistrano Integration

When building a node using ADT, you are expected to deploy to it using Capistrano. To make things easier, we have included some capistrano recipies to assist with your deployment. Note that we currently only support Capistrano 2.x, as there were significant changes in 3.x that make it incompatible. If you use 3.x, you can still use ADT, but you'll have to symlink the database.yml yourself (as well as figure out how to deploy your application initially). We will gladly accept a pull request if someone wishes to share it.

For those using Capistrano 2.x, you can do the following to use ADT quickly:

First, capify your application, which generates a Capfile that basically loads config/deploy.rb

Add to your config/deploy.rb the following contents:

#### 3rd party recipes
require "bundler/capistrano"
require "amoeba_deploy_tools/capistrano"

#### Variables
set :application,      "Your App Name"
set :repository,       "[insert git:// url]"
set :scm,              :git

#### We will use multi-stage to support several enviornments (in case you use more than one). Be
#### sure to include all envs you will deploy servers for (normally just QA and Production).
set :stages,           %w(production qa)
set :default_stage,    "qa"

require "capistrano/ext/multistage"

set :user,             "yourappuser"
set :deploy_to,        "/home/yourappuser"
set :deploy_via,       :remote_cache

set :use_sudo,         false
set :ssh_options,      { forward_agent: true }
default_run_options[:pty] = true

set :branch, 'master' unless exists?(:branch)

#### Custom recipes
# Insert any custom recipes

Customized Capistrano Recipes

The line that reads require "amoeba_deploy_tools/capistrano" will automagically symlink your database.yml and allow you to run a cap amoeba:bootstrap command, which is used to deploy your application for the first time.

amoeba:bootstrap

This is used to bootstrap a "cold" server. Run it once after you first bootstrap your server node using ADT. It will perform the following functions:

  • update
  • db_setup
  • migrate
  • start

deploy:restart

The cap deploy:restart command is overridden by ADT so that Passenger's restart method can be used (which doesn't require sudo or restarting a process). Instead it just touches tmp/restart.txt in the project folder). Feel free to override this behavior if you'd like.