© Mayflower GmbH 2010 DevOps for PHP Florian Anderiasch I October 28, 2011
© Mayflower GmbH 2010
DevOps for PHP
Florian Anderiasch I October 28, 2011
Mayflower GmbH I 2
DeveloperEx-AdminDevOp?
„I rant a lot“
@anderiaschstay in touch!
Mayflower GmbH I 3
Do you knowDevOps?
Mayflower GmbH I 4
„These are cool tools!“=>
„I'm doing DevOps now!“
Mayflower GmbH I 5
It's not aboutthe tools!
Mayflower GmbH I 6
It's about the culture!
Mayflower GmbH I 7
Mayflower GmbH I 8
Coming from WebOps
We often don't have muchoperations personnel.
LAMP stack is our home
Mayflower GmbH I 9
Learn from each other!
Work together!
Mayflower GmbH I 10
From ops to dev:repeatability
change managementmonitoring
provisioning
Mayflower GmbH I 11
From dev to ops:unit tests
version controlagile methods
Mayflower GmbH I 12
Why DevOps?
Mayflower GmbH I 13
How manyreleases per
year?
Mayflower GmbH I 14
Some peopledo up to
60 per day
Mayflower GmbH I 15
We're strivingfor one per day.
For now.
Mayflower GmbH I 16
We've come a long way
Mayflower GmbH I 17
Development in the dark ages
Mayflower GmbH I 18
Golden ImageVMware/KVM
Mayflower GmbH I 19
Copying files over FTPto a shared host
Mayflower GmbH I 20
rsync /vcs checkout
Mayflower GmbH I 21
Mayflower GmbH I 22
Hardware= Software= Configuration
Mayflower GmbH I 23
OK, tools are important.
Mayflower GmbH I 24
Bad news:they love ruby
Mayflower GmbH I 25
Good news:There are DSLs
Mayflower GmbH I 26
But in the end:It works
Mayflower GmbH I 27
Going from:do X or YTowards:
I want state Z
Mayflower GmbH I 28
Don't reinventthe wheel.
Mayflower GmbH I 29
puppet modules
apache, nginx, varnishphp, ruby, tomcat
mysql, pgsql, memcache
Mayflower GmbH I 30
Monitoring
Mayflower GmbH I 31
http://www.puppetlabs.com/puppet/related-projects/dashboard/
Mayflower GmbH I 32
Mayflower GmbH I 33
I know how I wantmy servers to look like
Let's replicate thatfor development
as close as possible
Vagrant
Mayflower GmbH I 34
Based on VirtualBox
automatically create VMspuppet or chef included
Vagrant
Mayflower GmbH I 35
Fully versioned configs
On-Demand creation
Developer Self Service
Vagrant
Mayflower GmbH I 36
Getting startedin 3 easy steps
Mayflower GmbH I 37
Manage your setup with Vagrant and
VeeWee(needs VirtualBox and Ruby)
Mayflower GmbH I 38
$ gem install vagrant $ gem install veewee $ vagrant basebox templates
$ vagrant basebox define 'natty' \ 'ubuntu-11.04-server-amd64' $ vagrant basebox build 'natty' $ vagrant basebox export natty $ vagrant box add 'natty' 'natty.box'
Mayflower GmbH I 39
http://vagrantbox.es
Mayflower GmbH I 40
$ gem install vagrant $ vagrant box add maverick64 http://mathie-vagrant-boxes.s3.amazonaws.com/maverick64.box $ mkdir maverick_demo $ cd maverick_demo $ vagrant init maverick64 $ vagrant up $ vagrant sshvagrant@maverick64:~$
Mayflower GmbH I 41
Manage your configuration
Mayflower GmbH I 42
Mayflower GmbH I 43
Chef or Puppet
Mayflower GmbH I 44
- Configuration as Code- Client-only or Client-Server setup- backed by companies- officially supported by Amazon- tried and tested- good documentation- good, vibrant communities
Mayflower GmbH I 45
- Chef is ruby code, puppet has a DSL- puppet has the bigger community- puppet has more documentation- but chef is catching up- puppet: europe, chef: USA- chef is more flexible- if you puppet, you don't know ruby and vice versa
Mayflower GmbH I 46
- both know current configuration- you define your nodes (servers)- lots of community cookbooks/modules- easy to extend- templates- providers as platform abstractions (e.g. apt-get/ports/yum)
Mayflower GmbH I 47
There's no „better“ tool.
But we prefer puppet. Less Ruby ;)
Mayflower GmbH I 48
user { 'florian': ensure => present, uid => '507', gid => 'admin', shell => '/bin/bash', home => '/home/florian', managehome => true,}
Mayflower GmbH I 49
user „florian“ do username „florian“ password „$1$P$WXmqrQEVj88fVTHevErxq.“ shell „/bin/bash“ system true supports :manage_home => trueend
Mayflower GmbH I 50
Back to Vagrant
Mayflower GmbH I 51
Vagrant::Config.run do |config| config.vm.box = „natty“end
Mayflower GmbH I 52
$ cat VagrantfileVagrant::Config.run do |config| config.vm.provision :puppet, :module_path => „modules“ do |puppet| puppet.manifests_path = „manifests“ puppet.manifest_file = „development.pp“ end
config.vm.define :web do |web_config| web_config.vm.box = „natty“ web_config.vm.host_name = „webserver01“ web_config.vm.network „33.33.33.10“ web_config.vm.forward_port „http“,80,8080 web_config.vm.port „ssh“,22,2222 web_config.vm.share_folder „v-data“,“/srv/www“,“../silex-demo“ endend
Mayflower GmbH I 53
$ cat manifests/development.ppimport „classes/*“
node „webserver01“ { include web}
node „dbserver01“ { include db}
node „ciserver01“ { include ci}
Mayflower GmbH I 54
$ cat manifests/classes/web.ppclass web inherits basenode { include apache include apache::php apache::vhost { 'silex-demo.local': port => '80', docroot => '/srv/www/docroot', }
package { ['mysql-client','php5-cli',...]: ensure => present, }}
Mayflower GmbH I 55
$ cat manifests/classes/ci.ppclass ci inherits basenode { include apache include apache::php exec { 'pear-autodiscover': command => '/usr/bin/pear config-set \auto_discover 1', } package{ \['pear.phpunit.de/PHP_CodeBrowser',...]: ensure => latest, provider => 'pear', require => Exec['pear-autodiscover'], }}
Mayflower GmbH I 56
Make the configurationpart of your source code
Mayflower GmbH I 57
.|-- application|-- data|-- docs|-- library|-- public|-- scripts| |-- jobs| |-- build| \-- configuration| |-- Vagrantfile| |-- manifests| \-- modules|-- temp\-- tests
Mayflower GmbH I 58
Why did I do that?
Mayflower GmbH I 59
SimpleFailsafe
Fast SetupRepeatableConsistent
Self-Service
Mayflower GmbH I 60
No more golden images!
Mayflower GmbH I 61
No more USB sticks!
Mayflower GmbH I 62
Just one directoryin your vcs
Mayflower GmbH I 63
Machine Life Cycle Management:
Foreman
Mayflower GmbH I 64
A frontend for puppetShows the system inventory
Create new machinesProvisioning
Mayflower GmbH I 65
Mayflower GmbH I 66
Mayflower GmbH I 67
I want more!Like 20+
Mayflower GmbH I 68
McCloud
wrapper around Vagrant and Fog
transparent local& cloud usage
Mayflower GmbH I 69
I want more!Like 500...
Mayflower GmbH I 70
mCollective
ssh-for-loop on steroids
fast management for loads of servers
uses puppet/facter, MQ-based
Mayflower GmbH I 71
$ mc-package -W "architecture=x86" status apache * [ ==================================> ] 10 / 10host01.example.com version = apache-2.2.9-7 host02.example.com version = apache-2.2.9-7 host03.example.com version = apache-2.2.9-7 host04.example.com version = apache-2.2.9-7 host05.example.com version = apache-2.2.9-7 host06.example.com version = apache-2.2.9-7 host07.example.com version = apache-2.2.9-7 host08.example.com version = apache-2.2.9-7 host09.example.com version = apache-2.2.9-7 host10.example.com version = apache-2.2.9-7---- package agent summary ----Nodes: 10 / 10Versions: 10 * 0.25.5-1.el5Elapsed Time: 1.03 s
Mayflower GmbH I 72
DevOps@Mayflower
Mayflower GmbH I 73
1-2 „admins“per team
Mayflower GmbH I 74
Operationsand
Development
Mayflower GmbH I 75
Working hand in handwith company admins
Mayflower GmbH I 76
Got root?Yes.
Mayflower GmbH I 77
1+n puppetmaster
1 centraln teams
Mayflower GmbH I 78
Example setup:puppetmaster
10 developer VMsJenkins
4x Staging (eucalyptus)4x Live (Amazon)
Mayflower GmbH I 79
More tools:gitorious
eucalyptus cloudproxmox
Mayflower GmbH I 80
In the works:Vagrant
Scrum => KanbanPuppet + Nagios
Mayflower GmbH I 81
Questions?
29.10.11 Mayflower GmbH 82
Thanks for listening!
Contact Florian Anderiasch
+49 89 242054 1134
@anderiasch
Mayflower GmbH
Mannhardtstrasse 6
80538 München
Mayflower GmbH I 83
Images
Domo-Kun(5)http://www.hawaiikawaii.net/2011/domo-kun-wallpaper-on-my-desktop/
Domo-Kun(6), Nina Helmer, CC-BY-NC-NDhttp://www.flickr.com/photos/origami_potato/3242174542/
Clouds (21), John Mueller, CC-BY-NC-NDhttp://www.flickr.com/photos/johnmueller/52621490/
Domo-Kun (23)http://i572.photobucket.com/albums/ss163/xxLoveorDie54xx/OMG-Its-Domo-kun.jpg
puppet-dashboard (31)http://puppetlabs.com/puppet/related-projects/dashboard/