socal piggies-app-deploy

51
Application Deployment is System State Joshua Timberman @jtimberman [email protected] Wednesday, February 22, 12

Upload: jtimberman

Post on 13-May-2015

1.232 views

Category:

Technology


1 download

DESCRIPTION

presentation file for my talk at socal python group Feb 22, 2012

TRANSCRIPT

Page 1: Socal piggies-app-deploy

Application Deployment is System State

Joshua Timberman@jtimberman

[email protected]

Wednesday, February 22, 12

Page 2: Socal piggies-app-deploy

% whoami

Wednesday, February 22, 12

Page 3: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 4: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 5: Socal piggies-app-deploy

Who are you?

• Developers?

• System administrators?

• DevOps?

Wednesday, February 22, 12

Page 6: Socal piggies-app-deploy

System State

Wednesday, February 22, 12

Page 7: Socal piggies-app-deploy

Configuration Management

Wednesday, February 22, 12

Page 8: Socal piggies-app-deploy

System Integration

http://www.flickr.com/photos/opalsson/3773629074/

Wednesday, February 22, 12

Page 9: Socal piggies-app-deploy

WAT?

Wednesday, February 22, 12

Page 10: Socal piggies-app-deploy

n-Tier Infrastructure

Database Master

Load Balancer

App Server App Server

• Provision

• Configure

• Integrate

{{

Wednesday, February 22, 12

Page 11: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 12: Socal piggies-app-deploy

We're hiring!opscode.com/careers/

Wednesday, February 22, 12

Page 13: Socal piggies-app-deploy

Resources

Wednesday, February 22, 12

Page 14: Socal piggies-app-deploy

Declarative interface to system resources

Wednesday, February 22, 12

Page 15: Socal piggies-app-deploy

user "django_app" do shell "/bin/false comment "Django App User" system true action :createend

package "python" do action :installend

python_pip "gunicorn" do action :installend

Wednesday, February 22, 12

Page 16: Socal piggies-app-deploy

Describe *what*.

Not how.

Wednesday, February 22, 12

Page 17: Socal piggies-app-deploy

def install_package(name, version) package_name = "#{name}=#{version}" package_name = name if @is_virtual_package run_command_with_systems_locale( :command => "apt-get -q -y #{expand_options(@new_resource.options)} install #{package_name}", :environment => { "DEBIAN_FRONTEND" => "noninteractive" } )end

Wednesday, February 22, 12

Page 18: Socal piggies-app-deploy

package “python” { yum install pythonapt-get install pythonpacman sync pythonpkg_add -r python

Wednesday, February 22, 12

Page 19: Socal piggies-app-deploy

Recipes

Wednesday, February 22, 12

Page 20: Socal piggies-app-deploy

Ruby Internal Ruby DSL Ruby

Wednesday, February 22, 12

Page 21: Socal piggies-app-deploy

def method_missing(method_symbol, *args, &block) return "lol method_missing"end

Wednesday, February 22, 12

Page 22: Socal piggies-app-deploy

user "django_app" do shell "/bin/false comment "Django App" system trueend

package "python"

python_pip "gunicorn" do action :installend

Wednesday, February 22, 12

Page 23: Socal piggies-app-deploy

Cookbooks

Wednesday, February 22, 12

Page 24: Socal piggies-app-deploy

opscode/cookbooks/python├── README.md├── attributes│   └── default.rb├── metadata.rb├── providers│   ├── pip.rb│   └── virtualenv.rb├── recipes│   ├── default.rb│   ├── package.rb│   ├── pip.rb│   ├── source.rb│   └── virtualenv.rb└── resources ├── pip.rb └── virtualenv.rb

Wednesday, February 22, 12

Page 25: Socal piggies-app-deploy

Roles

Wednesday, February 22, 12

Page 26: Socal piggies-app-deploy

Roles describe nodes.

Wednesday, February 22, 12

Page 27: Socal piggies-app-deploy

name "django_cms"description "django app app server"run_list( "recipe[mysql::client]", "recipe[application]")

Wednesday, February 22, 12

Page 28: Socal piggies-app-deploy

Roles contain recipes

Wednesday, February 22, 12

Page 29: Socal piggies-app-deploy

name "base"description "All nodes have the base role"run_list( "recipe[zsh]", "recipe[sudo]", "recipe[apt]", "recipe[git]", "recipe[build-essential]")override_attributes( :authorization => { :sudo => { :users => ["ubuntu"], :passwordless => true } })

Wednesday, February 22, 12

Page 30: Socal piggies-app-deploy

Application Deployment

Wednesday, February 22, 12

Page 31: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 32: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 33: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 34: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 35: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 36: Socal piggies-app-deploy

Build your own

• Let's be realistic.

• You own your availability.

Wednesday, February 22, 12

Page 37: Socal piggies-app-deploy

Application Deployment vs...

• Configuration management

• Ad-hoc system administration

• Going against policy

Wednesday, February 22, 12

Page 38: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 39: Socal piggies-app-deploy

Wednesday, February 22, 12

Page 40: Socal piggies-app-deploy

Package management

• Rpm

• Deb

• Pkgsrc

• Gems

• Eggs

• Not a solved problem.

Wednesday, February 22, 12

Page 41: Socal piggies-app-deploy

git "/srv/django_app" do  repository "git://github.com/me/django_app.git"  reference "master"  action :syncend

Wednesday, February 22, 12

Page 42: Socal piggies-app-deploy

Fabric

Wednesday, February 22, 12

Page 43: Socal piggies-app-deploy

Capistrano

Wednesday, February 22, 12

Page 44: Socal piggies-app-deploy

chef-deploy

Wednesday, February 22, 12

Page 45: Socal piggies-app-deploy

deploy_revision[/srv/django_app]

Wednesday, February 22, 12

Page 46: Socal piggies-app-deploy

deploy_revision "/srv/django_app" do revision "2.0.17" repository "git://github.com/me/django_app.git" user "django_app" group "www-data" before_migrate do requirements_file = "#{release_path}/requirements.txt" execute "pip install -r #{requirements_file}" do cwd release_path end end action :deployend

Wednesday, February 22, 12

Page 47: Socal piggies-app-deploy

Ad-Hoc Deployment

• knife ssh

• capistrano

• fabric (use pychef!)

Wednesday, February 22, 12

Page 48: Socal piggies-app-deploy

require 'chef/knife'require 'chef/search/query'

Capistrano::Configuration.instance.load do  Chef::Knife.new.configure_chef

  def chef_role(name, query = "*:*", options = {})    attr = options.delete(:attribute) || :ipaddress    nodes = Chef::Search::Query.new.search(:node, query)[0].map {|n| n[attr] }    role name, *nodes, options    nodes  endend

https://github.com/cramerdev/capistrano-chefWednesday, February 22, 12

Page 49: Socal piggies-app-deploy

http://pychef.readthedocs.org/en/latest/fabric.html

from fabric.api import env, run, rolesfrom chef.fabric import chef_roledefs

env.roledefs = chef_roledefs()

@roles('web_app')def mytask(): run('uptime')

Wednesday, February 22, 12

Page 51: Socal piggies-app-deploy

http://www.flickr.com/photos/oberazzi/318947873/

Questions?

Joshua [email protected]

@jtimberman (twitter, github)lists.opscode.com

irc.freenode.net/chef

Wednesday, February 22, 12