Transcript
Page 1: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Pablo Godel @pgodelhttp://summits.phparch.com/http://joind.in/8966

Rock Solid Deploymentof PHP Applications

Tuesday, July 16, 13

Page 2: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Who Am I?

⁃ Born in Argentina, living in the US since 1999⁃ PHP & Symfony developer

⁃ Founder of the original PHP mailing list in spanish ⁃ Co-founder of ServerGrove

Tuesday, July 16, 13

Page 3: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

?Tuesday, July 16, 13

Page 4: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

Software deployment is all of the activities that makea software system available for use.

http://en.wikipedia.org/wiki/Software_deployment

Tuesday, July 16, 13

Page 5: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

A very important part of the application life-cycle

Tuesday, July 16, 13

Page 6: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

A very important critical part of the application life-cycle

Tuesday, July 16, 13

Page 7: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

It should not be an after thought

Tuesday, July 16, 13

Page 8: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

It should be predictable

Tuesday, July 16, 13

Page 9: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment

The more you do it the better it goes

Tuesday, July 16, 13

Page 10: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Tuesday, July 16, 13

Page 11: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Goals

Tuesday, July 16, 13

Page 12: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Goals

One-click deploys

Tuesday, July 16, 13

Page 13: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Continuous deploys

Deployment: Goals

Tuesday, July 16, 13

Page 14: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web AppsDeployment

Tuesday, July 16, 13

Page 15: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web AppsDeployment

Tuesday, July 16, 13

Page 16: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web AppsDeployment

Tuesday, July 16, 13

Page 17: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Anytime & Anywhere

Deployment: Goals

Tuesday, July 16, 13

Page 18: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Anyone

Deployment: Goals

Tuesday, July 16, 13

Page 19: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Reliable

Deployment: Goals

Tuesday, July 16, 13

Page 20: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Rollbacks

Deployment: Goals

Tuesday, July 16, 13

Page 21: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

No downtime

Deployment: Goals

Tuesday, July 16, 13

Page 22: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Reusable

Deployment: Goals

Tuesday, July 16, 13

Page 23: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Scalable

Deployment: Goals

Tuesday, July 16, 13

Page 24: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

• One-click / continuous deploys• Anytime & Anywhere• Anyone • No downtime• Predictable & Reliable• Rollbacks• Reusable• Scalable

Deployment: Goals

Tuesday, July 16, 13

Page 25: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment Facts

Tuesday, July 16, 13

Page 26: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Fact #1

Deployment starts with the developer

• Setup development environment to be as close as possible to productions servers

• Setup test/qa/staging servers• Use Vagrant to manage VMs• Use Puppet/Chef to manage OS packages/

configuration

Tuesday, July 16, 13

Page 27: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Fact #2

Success linked to server OS setup

• Use Puppet/Chef to manage OS packages/configuration

• Create OS packages for 3rd party software• Setup your own package repositories

Tuesday, July 16, 13

Page 28: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Fact #3

Monitoring is uptime

• Use monitoring tools to know what is going on with your servers (Ganglia, Cacti, Zabbix, etc.)

• Add monitoring and metrics to your app (Graphite, StatsD, New Relic)

• Use your logs wisely (Graylog, Logstash, Kibana)

Tuesday, July 16, 13

Page 29: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment Methodologies

Tuesday, July 16, 13

Page 30: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment Methodologies

• VIM-style• FTP uploads• rsync• source control (svn, git)• Build tools (ant, phing)• Specialized tools (capistrano, fabric, etc)• Package based (rpm, deb, etc)

Tuesday, July 16, 13

Page 31: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Steps overview

Tuesday, July 16, 13

Page 32: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: First time

• Copy files to server(s)• Set server-side configurations• Load DB fixtures• Process and install assets• Warm up cache• “Enable” site

Tuesday, July 16, 13

Page 33: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

• Copy files to server(s)• Apply DB updates (migrations)• Process and install assets• Warm up cache• “Enable” site

Web Apps Deployment: Subsequent times

Tuesday, July 16, 13

Page 34: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

Tuesday, July 16, 13

Page 35: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

• rsync• git pull• setup git repo on local network to save

bandwidth and avoid issues if git server is down (i.e. github)

Challenge:Fast & reliable copy of files

Solutions:

Tuesday, July 16, 13

Page 36: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

• use a tool that allows to go from 1 to n servers easily (i.e. capistrano)

• pssh allows to send commands to n servers in parallel

• package your app in OS packages like .rpm/.deb to easily install across n servers

Challenge:Scalable

Solutions:

Tuesday, July 16, 13

Page 37: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

• test!• tag releases• dedicated branches (master for production)• deploy each release in its own directory

Challenge:Rollbacks

Solutions:

Tuesday, July 16, 13

Page 38: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

• use ssh based connections• don’t store passwords on source control• store sensitive strings (passwords) in server

environment variables

Challenge:Secure

Solutions:

Tuesday, July 16, 13

Page 39: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

Challenge:DB migrations

Solutions:• Doctrine Migrations• Consider document oriented DBs like

MongoDB

“The best migrations are the ones you don’t have to do”

Tuesday, July 16, 13

Page 40: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

Challenge:Static assets

Solutions:• YUICompress shrinks JS and CSS file sizes• Enable web server compression• Add versioning to static assets links (code.js?v=1)• Assetic combines multiple files into one• Run utilities locally or in a staging server, deploy

resultTuesday, July 16, 13

Page 41: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

Challenge:Caching

Solutions:• Update one server while others handle load• Group servers and update group at a time• execute commands on “finalize” to clear up APC

cache

Tuesday, July 16, 13

Page 42: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Deployment: Challenges

Challenge:File permission conflicts

Solutions:• Run Apache/PHP with same user• Use php-fpm instead of mod_php• Create “deploy” user and add web server to the

group• Use setfacl to give write access to multiple users

Tuesday, July 16, 13

Page 43: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Other common pitfalls

Tuesday, July 16, 13

Page 44: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Other common pitfalls

• Case sensitive filesystems• Configuration differences• Outdated 3rd party software• Github down

$ git daemon --base-path=/git/repo/path/ --export-all

$ git clone git://127.0.0.1/repo

http://ozmm.org/posts/when_github_goes_down.htmlTuesday, July 16, 13

Page 45: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

Tuesday, July 16, 13

Page 46: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

Simplest continuous deployment ever!

<?php

exec(‘/usr/bin/env -i HOME=/var/www git pull’);echo “All done!”;

hook.php

screenshot

Tuesday, July 16, 13

Page 47: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

Capistrano

• Ruby based• Very extensible• Large number of extensions• Simple client side installation

$ gem install capistrano

Tuesday, July 16, 13

Page 48: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

Capistrano

set :application, "myapp" # Application nameset :deploy_to, "/var/www/myapp"

set :user, "deployer"set :use_sudo, false # sudo isn't required

set :deploy_via, :remote_cache set :repository, "[email protected]:user/repo.git"

role :web, "server.example.com", “server2.example.com”

Tuesday, July 16, 13

Page 49: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

$ cap deploy:setup

Capistrano

Tuesday, July 16, 13

Page 50: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

|-- releases`-- shared |-- logs `-- uploads

Capistrano

Tuesday, July 16, 13

Page 51: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

Capistrano

$ cap deploy$ cap deploy:migrations$ cap deploy:rollback

Tuesday, July 16, 13

Page 52: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Examples

|-- current (symlink to releases/20130112)|-- releases| `-- 20130112`-- shared |-- logs `-- uploads

Capistrano

Tuesday, July 16, 13

Page 53: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment:Other options

• Fabric• Phing• Jenkins• WePloy

https://github.com/rlerdorf/WePloy• Magallanes

http://magallanes.zenreworks.com/• Idephix

http://getidephix.com/

Tuesday, July 16, 13

Page 54: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Tuesday, July 16, 13

Page 55: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

App Metrics: StatsD & Graphite

Tuesday, July 16, 13

Page 56: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Logging: LogstashShip logs from any source, parse them, get the right timestamp, index them, and search them

Tuesday, July 16, 13

Page 57: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Logging: Logstash

Configure Apache to log jsonLogFormat "{ \"@timestamp\": \"%{%Y-%m-%dT%H:%M:%S%z}t\", \"@fields\": { \"client\": \"%a\", \"duration_usec\": %D, \"status\": %s, \"request\": \"%U%q\", \"method\": \"%m\", \"referrer\": \"%{Referer}i\" } }" logstash_json

# Write our 'logstash_json' logs to logs/access_json.logCustomLog logs/access_json.log logstash_json

{ "@timestamp": "2012-08-22T14:35:19-0700", "client": "127.0.0.1", "duration_usec": 532, "status": 404, "request": "/favicon.ico", "method": "GET", "referrer": "-" }

Result

Tuesday, July 16, 13

Page 58: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Logging: Graylog

Tuesday, July 16, 13

Page 59: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Logging: KibanaKibana is a user friendly way to view, search and visualize your log data

Tuesday, July 16, 13

Page 60: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Tools

Packaging: fpm

https://github.com/jordansissel/fpm

Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity.

fpm -s dir -t rpm -n "myapp" -v 1.0 /var/www/myapp

fpm -s dir -t deb -a all -n myapp -v 1.0 /etc/apache2/conf.d/my.conf /var/www/myapp

Tuesday, July 16, 13

Page 61: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Web Apps Deployment: Summary

Tuesday, July 16, 13

Page 62: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

•Stop using FTP

Tuesday, July 16, 13

Page 63: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

•Stop using FTP•Plan early

Tuesday, July 16, 13

Page 64: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

•Stop using FTP•Plan early•Practice

Tuesday, July 16, 13

Page 65: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

•Stop using FTP•Plan early•Practice•Monitor

Tuesday, July 16, 13

Page 66: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

•Stop using FTP•Plan early•Practice•Monitor•AUTOMATE!

Tuesday, July 16, 13

Page 67: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

QUESTIONS?

Slides: http://slideshare.net/pgodelTwitter: @pgodel

E-mail: [email protected]

Tuesday, July 16, 13

Page 68: php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps

Thank you!

Slides: http://slideshare.net/pgodelTwitter: @pgodel

E-mail: [email protected]

http://joind.in/8966

Tuesday, July 16, 13


Top Related