• Like
  • Save
Rock Solid Deployment of Web Applications
Upcoming SlideShare
Loading in...5

Rock Solid Deployment of Web Applications



Presentation given at CodeMiami 2013

Presentation given at CodeMiami 2013



Total Views
Views on SlideShare
Embed Views



2 Embeds 16

http://xing.xinics.com 11
http://www.scoop.it 5



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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Rock Solid Deployment of Web Applications Rock Solid Deployment of Web Applications Presentation Transcript

    • Rock Solid Deploymentof Web Applications Pablo Godel @pgodel - codemiami.com Jan 12th 2013 - Miami, FL
    • 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
    • ServerGrove!⁃ Founded ServerGrove Networks in 2005⁃ Provider of web hosting specialized in PHP, Symfony, ZendFramework, MongoDB and others⁃ Servers in USA (right here in Miami) and Europe!
    • Community is our teacher⁃ Very active open source supporter through code contributions and usergroups/conference sponsoring
    • Deployment ?
    • DeploymentSoftware deployment is all of the activities that makea software system available for use. http://en.wikipedia.org/wiki/Software_deployment
    • DeploymentA very important part ofthe application life-cycle
    • DeploymentA very important critical partof the application life-cycle
    • DeploymentIt should not be an after thought
    • DeploymentIt should be predictable
    • DeploymentThe more you do it the better it goes
    • Deployment: Goals
    • Deployment: GoalsOne-click deploys
    • Deployment: GoalsContinuous deploys
    • Web AppsDeployment
    • Web AppsDeployment
    • Web AppsDeployment
    • Deployment: Goals Anytime & Anywhere
    • Deployment: GoalsAnyone
    • Deployment: Goals Reliable
    • Deployment: GoalsRollbacks
    • Deployment: Goals No downtime
    • Deployment: GoalsReusable
    • Deployment: Goals Scalable
    • Deployment: Goals• One-click / continuous deploys• Anytime & Anywhere• Anyone• No downtime• Predictable & Reliable• Rollbacks• Reusable• Scalable
    • Deployment Facts
    • Deployment: Fact #1Deployment 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
    • Deployment: Fact #2Success 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
    • Deployment: Fact #3Monitoring 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)
    • Deployment Methodologies
    • 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)
    • Web Apps Deployment: Steps overview
    • 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
    • Web Apps Deployment: Subsequent times• Copy files to server(s)• Apply DB updates (migrations)• Process and install assets• Warm up cache• “Enable” site
    • Deployment: Challenges
    • Deployment: ChallengesChallenge:Fast & reliable copy of filesSolutions:• rsync• git pull• setup git repo on local network to save bandwidth and avoid issues if git server is down (i.e. github)
    • Deployment: ChallengesChallenge:ScalableSolutions:• 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
    • Deployment: ChallengesChallenge:RollbacksSolutions:• test!• tag releases• dedicated branches (master for production)• deploy each release in its own directory
    • Deployment: ChallengesChallenge:SecureSolutions:• use ssh based connections• don’t store passwords on source control• store sensitive strings (passwords) in server environment variables
    • Deployment: ChallengesChallenge:DB migrationsSolutions:• Doctrine Migrations• Consider document oriented DBs like MongoDB“The best migrations are the ones you don’t have to do”
    • Deployment: ChallengesChallenge:Static assetsSolutions:• 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 result
    • Deployment: ChallengesChallenge:CachingSolutions:• Update one server while others handle load• Group servers and update group at a time• execute commands on “finalize” to clear up APC cache
    • Deployment: ChallengesChallenge:File permission conflictsSolutions:• 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
    • Web Apps Deployment:Other common pitfalls
    • 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:// http://ozmm.org/posts/when_github_goes_down.html
    • Web Apps Deployment: Examples
    • Web Apps Deployment: Examples Simplest continuous deployment ever!hook.php <?php exec(‘/usr/bin/env -i HOME=/var/www git pull’); echo “All done!”; screenshot
    • Web Apps Deployment: Examples Capistrano• Ruby based• Very extensible• Large number of extensions• Simple client side installation $ gem install capistrano
    • Web Apps Deployment: Examples Capistranoset :application, "myapp" # Application nameset :deploy_to, "/var/www/myapp"set :user, "deployer"set :use_sudo, false # sudo isnt requiredset :deploy_via, :remote_cacheset :repository, "git@github.com:user/repo.git"role :web, "server.example.com", “server2.example.com”
    • Web Apps Deployment: Examples Capistrano $ cap deploy:setup
    • Web Apps Deployment: Examples Capistrano |-- releases `-- shared |-- logs `-- uploads
    • Web Apps Deployment: Examples Capistrano $ cap deploy $ cap deploy:migrations $ cap deploy:rollback
    • Web Apps Deployment: Examples Capistrano |-- current (symlink to releases/20130112) |-- releases | `-- 20130112 `-- shared |-- logs `-- uploads
    • Web Apps Deployment: Other options• Fabric• WePloy• Phing• Magallanes• Jenkins
    • Web Apps Deployment: Tools
    • Web Apps Deployment: Tools App Metrics: StatsD & Graphite
    • Web Apps Deployment: Tools Logging: LogstashShip logs from any source, parse them, get the righttimestamp, index them, and search them
    • Web Apps Deployment: Tools Logging: LogstashConfigure 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_jsonResult{ "@timestamp": "2012-08-22T14:35:19-0700", "client": "","duration_usec": 532, "status": 404, "request": "/favicon.ico","method": "GET", "referrer": "-" }
    • Web Apps Deployment: Tools Logging: Graylog
    • Web Apps Deployment: Tools Logging: KibanaKibana is a user friendly way to view, search and visualizeyour log data
    • Web Apps Deployment: Tools Packaging: fpmBuild 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 https://github.com/jordansissel/fpm
    • Web Apps Deployment: Summary
    • •Stop using FTP
    • •Stop using FTP•Plan early
    • •Stop using FTP•Plan early•Practice
    • •Stop using FTP•Plan early•Practice•Monitor
    • •Stop using FTP•Plan early•Practice•Monitor•AUTOMATE!
    • QUESTIONS?Slides: http://slideshare.net/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com
    • Thank you!Slides: http://slideshare.net/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com