php[architect] summit series devops 2013 - rock solid deployment of php apps

68
Pablo Godel @pgodel http://summits.phparch.com / http://joind.in/8966 Rock Solid Deployment of PHP Applications Tuesday, July 16, 13

Upload: pablo-godel

Post on 06-May-2015

5.751 views

Category:

Technology


1 download

DESCRIPTION

Web applications are becoming increasingly more complex, so deployment is not just transferring files with FTP anymore. We will go over the different challenges and how to deploy our PHP applications effectively, safely and consistently with the latest tools and techniques. We will also look at tools that complement deployment with management, configuration and monitoring.

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