Moonshine: Configuration Management and Deployment
Upcoming SlideShare
Loading in...5
×
 

Moonshine: Configuration Management and Deployment

on

  • 3,205 views

Moonshine is an opensource configuration management and deployment system being released later this month. ...

Moonshine is an opensource configuration management and deployment system being released later this month.

Moonshine follows the Rails way, simplifying server configuration, dependency management, and Rails application deployment. We’ve created this system to be as simple and seamless as possible, with a focus on well-tested, reliable software like Ruby and Puppet. We’ve been using Puppet internally for some time, and Moonshine presented an excellent opportunity to integrate it with Rails and application deployment.

Statistics

Views

Total Views
3,205
Views on SlideShare
3,190
Embed Views
15

Actions

Likes
3
Downloads
1
Comments
0

3 Embeds 15

http://www.slideshare.net 13
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

Moonshine: Configuration Management and Deployment Moonshine: Configuration Management and Deployment Presentation Transcript

  • Rails Machine Thursday, January 15, 2009
  • The State of Rails Application Deployment Thursday, January 15, 2009
  • It’s easy, I’ll just use Capistrano. Thursday, January 15, 2009
  • ssh m e@myn e wserv er.co m It’s easy, I’ll just use Capistrano. Thursday, January 15, 2009
  • ssh m e@myn e wserv er.co m It’s easy, I’ll just use Capistrano. apt ‐ge t  in lib stal mag l l ick ibm 9‐d agi ck1 ev 0  Thursday, January 15, 2009
  • ssh m e@myn e wserv er.co m ick ag rm l  al nst  i It’s easy, I’ll just use em g Capistrano. apt ‐ge t  in lib stal mag l l ick ibm 9‐d agi ck1 ev 0   Thursday, January 15, 2009
  • l‐ ssh m ysq   e@myn  m by all ‐ru ewser st ql ver.c in ys ev t  bm om 5‐d ge li t‐ r  t1 p en k a rve cli gic se ysql ma l r bm l li ta ins m  It’s easy, I’ll just use e g Capistrano. apt ‐ge t  in lib stal mag l l ick ibm 9‐d agi ck1 ev 0  Thursday, January 15, 2009
  • l‐ ssh m ysq   e@myn  m by all ‐ru ewser st ql ver.c in ys ev t  bm om 5‐d ge li t‐ r  t1 p en k a rve cli gic se ysql ma l r bm l li ta ins m  It’s easy, I’ll just use e g Capistrano. /my.cnf apt ‐ge etc t  in  / vi sta lib mag ll l ick ibm 9‐d agi ck1 ev 0  Thursday, January 15, 2009
  • l‐ ssh m ysq   e@myn  m by all ‐ru ewser st ql ver.c in ys ev t  bm om 5‐d ge li t‐ r  t1 p en k a rve cli gic se ysql ma l r bm l li ta ins m  It’s easy, I’ll just use e g Capistrano. /my.cnf apt ‐ge etc t  in  / vi sta lib mag ll l /etc/ init. ibm ick d/mys 9‐d agi ql st art ck1 ev 0  Thursday, January 15, 2009
  • UR SHIPMENT OF FAIL HAS ARRIVED Thursday, January 15, 2009
  • What is deployment? Thursday, January 15, 2009
  • A Series of Dependencies • Rails v2.2.2, v1.2.3, etc • Ruby/Ruby Enterprise • Apache/Nginx • Passenger/Thin/Mongrel • MySQL/PostgreSQL • system user Thursday, January 15, 2009
  • A Series of Dependencies • rmagick • libmagick10 libmagick9-dev • thinking-sphinx • compile by hand • memcached • libmemcached, rubygem, service Thursday, January 15, 2009
  • Satisfying these dependencies via shell commands is backwards Thursday, January 15, 2009
  • • impossible to verify • not revisioned • no ‘migrations’ • not DRY • not testable Thursday, January 15, 2009
  • Not “The Rails Way” Thursday, January 15, 2009
  • script/plugin install moonshine_rails* script/generate moonshine Thursday, January 15, 2009
  • Moonshine::Manifest #config/moonshine/default.rb class Moonshine::Manifest::Rails::Production < Moonshine::Manifest::Rails   #packages(%w(vim curl))   #service('memcached', %w(memcache libmemcached))   #puppet.exec 'foo',   #  :command => quot;echo 'normal puppet stuff' > /tmp/testquot; end Thursday, January 15, 2009
  • Opinionated Software Thursday, January 15, 2009
  • Opinionated Deployment Thursday, January 15, 2009
  • Decisions We’ve Made For You • Ubuntu • Apache • Passenger • Ruby Enterprise Edition • MySQL • ‘rails’ user • /srv/rails Thursday, January 15, 2009
  • Look at all the choices I’m not making class Moonshine::Manifest::Rails < Moonshine::Manifest   requires [     :user,     :ruby,     :rubygems,     :db,     :web,     :rails,     :deploy   ]   provides :user, 'rails'   provides :ruby, 'enterprise_ruby'   provides :rubygems, 'enterprise_rubygems'   provides :db, 'mysql'   provides :web, 'apache2'   provides :rails, 'passenger'   provides :deploy, 'git' end Thursday, January 15, 2009
  • On your server... Thursday, January 15, 2009
  • sudo apt‐get install moonshine* sudo moonshine Thursday, January 15, 2009
  • Answer some questions • application name • git repo • branch to deploy from • user to create • generates SSH key for git host • server ‘tags’ Thursday, January 15, 2009
  • Moonshine goes to work • clones your repo • parses and executes generated moonshine manifests • installs needed gems • install dependencies • migrates your db • deploys your app Thursday, January 15, 2009
  • Gem Dependencies gem_dependencies do |gem|   #lots of dependencies are specified for you already   #gem.packages 'mysql', %w(mysql‐dev libmysqlclient5‐dev)   #gem.packages 'rmagick', %w(ruby‐dev libmagick9‐dev)   #...   #can specify a mini‐manifest to satisfy before   #installation of this gem    gem.custom 'urgem' do |puppet|     puppet.file '/file/needed/by/ur/gem',       :ensure   => 'present',       :content  => 'foo'     build_tarball('http://whatever.com/lib‐something.tgz')   end end Thursday, January 15, 2009
  • #need to deploy again? sudo moonshine Thursday, January 15, 2009
  • On subsequent runs • updates your repo • parses and executes updated moonshine manifests • verifies needed gems • verifies dependencies • migrates your db • deploys your app Thursday, January 15, 2009
  • Deployment is now... • Reproducible • Verified from top-bottom on each deploy • Versionable with your application • same commit can contain, for example, thinking sphinx and installation of the sphinx searchd daemon • DRY Thursday, January 15, 2009
  • Puppet Based class MysqlMain < Moonshine::Manifest   puppet.file '/etc/my.cnf',     :ensure => 'present',     :content => quot;quot;quot; [client] port      = 3306 socket    = /var/run/mysqld/mysqld.sock [mysqld] default‐character‐set = utf8 key_buffer            = 16M max_allowed_packet    = 16M thread_stack          = 128K thread_cache_size     = 8 quot;quot;quot; end Thursday, January 15, 2009
  • But Ruby class MysqlMain < Moonshine::Manifest   puppet.file '/etc/my.cnf',     :ensure   => 'present',     :content  => ArbitraryKlass.arbitrary_function('foo') end Thursday, January 15, 2009
  • Modular UrClass < Moonshine::Manifest::Rails < Moonshine::Manifest • easy to create your own reusable server manifests • extend existing ones with modules Thursday, January 15, 2009
  • Sample ‘plugin’ module MoonshineOrderedPackages   def packages(array_or_name, params = {})     package_array = array_or_name.to_a     params = {       :ensure => 'installed'     }.merge(params)     package_array.each_with_index do |name,index|       #ensure packages are installed in order given       package_params = params       if package_array[index+1]         package_params.merge({           :before => package(package_array[index+1])         })       end       puppet.package name.to_s, package_params     end   end end Moonshine::Manifest::Rails.send(:extend, MoonshineOrderedPackages) Thursday, January 15, 2009
  • Coming Soon • screencast demo (blog.railsmachine.com) • source on GitHub Thursday, January 15, 2009
  • Questions? Thursday, January 15, 2009
  • Jesse Newland jesse@railsmachine.com Thursday, January 15, 2009
  • Flickr FTW • http://www.flickr.com/photos/wolfgangstaudt/2279651479/sizes/o/ • http://www.flickr.com/photos/ramdac/373881476/sizes/o/ • http://www.flickr.com/photos/striatic/2192189572/sizes/o/ • http://www.flickr.com/photos/blakespot/2376243022/sizes/o • http://www.flickr.com/photos/gravestone/449328990/sizes/l/ • http://www.flickr.com/photos/redglow/410800461/sizes/o/ Thursday, January 15, 2009