Snakes on a Treadmill
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Snakes on a Treadmill

on

  • 1,871 views

Using Chef for Continuous Deployment with Django.

Using Chef for Continuous Deployment with Django.

Statistics

Views

Total Views
1,871
Views on SlideShare
1,871
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • The ones in red need to be created with directory resources, the rest are created for you.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Snakes on a Treadmill Presentation Transcript

  • 1. Snakes on a TreadmillNoah Kantrowitz 2011-07-06
  • 2. Chef• Configuration management• Deployment logic?• Best practices! (mostly• Not all Ruby code, I promise
  • 3. Deploy Resource• Pull from source• Atomic updates via symlinks• Fast rollback• We all do this already, right?
  • 4. Deploy Resourcedeploy_revision /srv/myapp do repo git@github.com/coderanger/myapp branch release user www-dataend
  • 5. Folder Layout• /srv/myapp • /srv/myapp/shared • /srv/myapp/shared/releases • /srv/myapp/shared/releases/4faedb2ee... • /srv/myapp/shared/releases/9457be295... • ... • /srv/myapp/current
  • 6. Folder Layout• /srv/myapp • /srv/myapp/shared • /srv/myapp/shared/releases • /srv/myapp/shared/releases/4faedb2ee... • /srv/myapp/shared/releases/9457be295... • ... • /srv/myapp/current
  • 7. Resets purge_before_symlink []• Rails-specific defaults create_dirs_before_symlink []• :-( symlinks({}) symlink_before_migrate({})
  • 8. Symlinks template /srv/myapp/shared/settings_local.py do source settings_local.py.erb vars ... end• Put config files in shared• ‘path/in/shared’ => ‘path/in/app’ deploy_revision /srv/myapp do ...• symlink vs. before_migrate symlink_before_migrate( settings_local.py=>conf/settings_local.py ) end
  • 9. Migrations deploy_revision /srv/myapp do ... migrate true• Run migrations automatically migration_command /srv/myapp/shared/env/bin/python • Only on “master” machine? end /srv/myapp/current/manage.py syncdb --migrate migrate node[:roles].include? migrator
  • 10. Packages• before_migrate deploy_revision /srv/myapp do• before_symlink ... before_migrate /srv/myapp/shared/env/bin/pip install -r • before_restart end /srv/myapp/current/requirements.txt• after_restart
  • 11. NIH { "id": "myapp", "server_roles": [ "myapp" ], "type": { "myapp": [ "django" ] },• application::django "repository": "git@github.com:coderanger/myapp.git", "revision": {• http://ckbk.it/application }, "production": "release"• Data-driven deployment "databases": { "production": {• PyChef! "username": "db_user", "adapter": "postgres", "database": "production" } }, "owner": "www-data", "group": "www-data", "packages": { "curl": "7.19.5-1ubuntu2" },
  • 12. Other Cookbooks• python • pip packages • python_virtualenv• application::gunicorn• postgres• nginx
  • 13. Want More?• http://wiki.opscode.com/• http://community.opscode.com/cookbooks/• http://help.opscode.com/kb/otherhelp/build-a-django-stack• https://github.com/ericholscher/chef-django-example• My DjangoCon talk (hopefully!)
  • 14. PyChef• pip install pychef import chef• Reads knife.rb or client.rb api = chef.autoconfigure()• chef.Object(‘id’) bag = chef.DataBag(applications)• chef.Object.list() item = bag[myapp]• obj.save() item[revision][production] = v1.1• obj.delete() item.save()
  • 15. Search• Search(‘index’, ‘query’)• row.object import chef api = chef.autoconfigure() for row in chef.Search(node, role:myapp): print row.object[fqdn]
  • 16. T-Shirts and stickers!
  • 17. Noah Kantrowitz noah@opscode.com @kantrn