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

Socal piggies-app-deploy

May 13, 2015

Download

Technology

jtimberman

presentation file for my talk at socal python group Feb 22, 2012
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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