twitter: @akrabatStress-freeDeployment     Rob Allen ConFoo March 2011
Rob Allen?•   PHP developer since 1999•   Wrote Zend_Config•   Tutorial at akrabat.com•   Zend Framework in Action!Next boo...
Why automatedeployment?
Getting your house in        order
Source code control
Branch!• Branch every new feature •   (that includes bug fixes)• Be ready go live at all times •   Trunk deployment •   Liv...
Trunk deployment
Live branch deployment
This is what I do
Databaseconsiderations
One master database• Live database holds master structure• Copy master to everywhere else• Advantages: • Simple to impleme...
Migrations• Versioned schemas• Use delta files with UP and DOWN functions• Advantages: •   version controlled •   destructi...
Migrations tools• DbDeploy• LiquiBase• Framework specific •   Doctrine •   Akrabat_Db_Schema_Manager •   Cake migrations • ...
For more info“Database version control without the pain”by Harrie Verveerhttp://slidesha.re/gwq0awAlso read http://www.har...
Codeconsiderations
Context awareness•   Configuration based on where the code has been    deployed•   Automatic    • Automatic detection based...
So whatʼs deployment     all about?
Things to think about• Transport to server • FTP? rsync? svn checkout? svn export?• File permissions• Preserve user upload...
Server organisation• Much easier if you control vhosts• For multiple sites on same server: •   Use predictable file locatio...
The deployment plan
Typical steps• Tag this release• Set “under maintenance” page• Transfer files to server• Set file permissions as required• D...
Hereʼs mine:1. Branch trunk to release-{yymmdd-hhmm}2. ssh into server3. Ensure staging is up to date (svn st -u)  If not,...
Finally• Switch “current” symlink to new directory
Tools for automation
Simple scripts• PHP, Bash or Bat files• Simple to write and run• Execute command line apps via exec()
Example PHP script$cmd = "svn cp -m "Tag for automatic deployment"    $baseUrl/$website/trunk $baseUrl/$website/tags/$date...
Phing• PHP based build system based on Ant• XML configuration files• PEAR installation• Integration with Subversion and DbDe...
Phing philosophy"• Like make, build scripts consist of targets• Targets can depend on other targets • “live” depends on “t...
Example build.xml<?xml version="1.0" encoding="UTF-8" ?><project name="BRIBuild" default="deploy" basedir=".">  <tstamp>  ...
My deployment system
deploy.php~$ deploy.php 23100BRI server side deploy scriptVersion 1.1, 2009Found /home/domains/bigroom/live/Tagging to 200...
Our server layout
deploy.php• Custom PHP script• Relies on environment variable: WWW_DIR• Advantages: •   Custom designed to fit our way of w...
FTP using Phing (1)<project name="project" basedir="." default="deploy">  <property file="build.properties" />  <property ...
FTP using Phing (2)  <target name="ftp-upload">    <echo msg="Deploying application files" />    <ftpdeploy      host="${f...
FTP with Phing• Per-website build.xml for custom deployments• Advantages: •   Leverages other peopleʼs experiences •   Was...
Rollback
Emergency roll-backJust change the symlink!
Complete roll-back• Write rollback.php or create a Phing build  task• Put the server back to where it was before •   Chang...
To summarise1. Automated deployment prevents mistakes2. Itʼs not hard3. Easy roll-back is priceless
Questions?      feedback: http://joind.in/2842          email: rob@akrabat.com                  twitter: @akrabat
Thank you      feedback: http://joind.in/2842          email: rob@akrabat.com                  twitter: @akrabat
Upcoming SlideShare
Loading in...5
×

Stress Free Deployment - Confoo 2011

1,267
-1

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,267
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Stress Free Deployment - Confoo 2011

  1. 1. twitter: @akrabatStress-freeDeployment Rob Allen ConFoo March 2011
  2. 2. Rob Allen?• PHP developer since 1999• Wrote Zend_Config• Tutorial at akrabat.com• Zend Framework in Action!Next book! Zend Framework 2 in Action (with Ryan Mauger)
  3. 3. Why automatedeployment?
  4. 4. Getting your house in order
  5. 5. Source code control
  6. 6. Branch!• Branch every new feature • (that includes bug fixes)• Be ready go live at all times • Trunk deployment • Live branch deployment
  7. 7. Trunk deployment
  8. 8. Live branch deployment
  9. 9. This is what I do
  10. 10. Databaseconsiderations
  11. 11. One master database• Live database holds master structure• Copy master to everywhere else• Advantages: • Simple to implement• Disadvantages: • Backwards compatibility required • Doesnʼt scale for multiple devs well • Easy to make mistakes
  12. 12. Migrations• Versioned schemas• Use delta files with UP and DOWN functions• Advantages: • version controlled • destructive changes possible (but donʼt do it!)• Disadvantages: • Canʼt think of any!
  13. 13. Migrations tools• DbDeploy• LiquiBase• Framework specific • Doctrine • Akrabat_Db_Schema_Manager • Cake migrations • PEAR: MDB2_Schema• Home-brew script
  14. 14. For more info“Database version control without the pain”by Harrie Verveerhttp://slidesha.re/gwq0awAlso read http://www.harrieverveer.com/?p=247
  15. 15. Codeconsiderations
  16. 16. Context awareness• Configuration based on where the code has been deployed• Automatic • Automatic detection based on URL? • Environment variable set in vhost defintion?• Local configuration file
  17. 17. So whatʼs deployment all about?
  18. 18. Things to think about• Transport to server • FTP? rsync? svn checkout? svn export?• File permissions• Preserve user uploaded files• Steps after upload • Stale cache? • Cache priming?
  19. 19. Server organisation• Much easier if you control vhosts• For multiple sites on same server: • Use predictable file locations for all sites • e.g: • /home/www/{site name}/live/current • /home/www/{site name}/staging/current• Multiple servers for one site: • Keep them the same!
  20. 20. The deployment plan
  21. 21. Typical steps• Tag this release• Set “under maintenance” page• Transfer files to server• Set file permissions as required• Delete old cache files• Run database migrations if required• Remove “under maintenance” page
  22. 22. Hereʼs mine:1. Branch trunk to release-{yymmdd-hhmm}2. ssh into server3. Ensure staging is up to date (svn st -u) If not, stop here!4. svn checkout new release branch to a new folder in live directory5. Set permissions on the /tmp folder for cache files
  23. 23. Finally• Switch “current” symlink to new directory
  24. 24. Tools for automation
  25. 25. Simple scripts• PHP, Bash or Bat files• Simple to write and run• Execute command line apps via exec()
  26. 26. Example PHP script$cmd = "svn cp -m "Tag for automatic deployment" $baseUrl/$website/trunk $baseUrl/$website/tags/$date";ob_start();system($cmd, $returnValue);$output = ob_get_clean();if (0 < $returnValue) { throw new Exception("Tagging failed.n" . $output);}echo "Tagged to $daten";
  27. 27. Phing• PHP based build system based on Ant• XML configuration files• PEAR installation• Integration with Subversion and DbDeploy• Expects to run build.xml in current directory• build.properties contains config info
  28. 28. Phing philosophy"• Like make, build scripts consist of targets• Targets can depend on other targets • “live” depends on “tag”, “checkout”, “migrate”• Each target does the minimum it can e.g. • Create svn tag • checkout files to destination • migrate database
  29. 29. Example build.xml<?xml version="1.0" encoding="UTF-8" ?><project name="BRIBuild" default="deploy" basedir="."> <tstamp> <format property="date" pattern="%Y%m%d-%H%M" /> </tstamp> <property file="build.properties" /> <property name="trunkpath" value="${svnpath}/${website}/trunk" /> <property name="tagpath" value="${svnpath}/${website}/tags/${date}" /> <target name="deploy" depends="tag" /> <target name="tag" description="Tag trunk"> <exec command="svn cp -m Tag for automatic deployment ${trunkpath} ${tagpath}" /> <echo msg="Tagged trunk to ${date}" /> </target></project>
  30. 30. My deployment system
  31. 31. deploy.php~$ deploy.php 23100BRI server side deploy scriptVersion 1.1, 2009Found /home/domains/bigroom/live/Tagging to 20091030-2303... doneDeploying 20091030-2303 ... doneChanging symlink to new checkoutCleaning up older checkouts23100 successfully deployed to /home/domains/bigroom/live/
  32. 32. Our server layout
  33. 33. deploy.php• Custom PHP script• Relies on environment variable: WWW_DIR• Advantages: • Custom designed to fit our way of working • PHP! Quick and easy to write.• Disadvantages: • Hard to alter for a specific server • Hard to change methodology
  34. 34. FTP using Phing (1)<project name="project" basedir="." default="deploy"> <property file="build.properties" /> <property name="trunkpath" value="${svnpath}/${website}/trunk" /> <fileset dir="${exportdir}/" id="files"> <include name="**/*" /> </fileset> <target name="deploy" depends="svnexport,ftp-upload" /> <target name="svnexport"> <delete dir="${exportdir}" /> <svnexport username="${username}" password="${password}" nocache="true" force="true" repositoryurl="${trunkpath}" todir="${exportdir}" /> </target>
  35. 35. FTP using Phing (2) <target name="ftp-upload"> <echo msg="Deploying application files" /> <ftpdeploy host="${ftp.host}" port="${ftp.port}" username="${ftp.username}" password="${ftp.password}" dir="${ftp.dir}"> <fileset refid="${files}" /> </ftpdeploy> </target></project>
  36. 36. FTP with Phing• Per-website build.xml for custom deployments• Advantages: • Leverages other peopleʼs experiences • Was very fast to create • Works where ssh not available!• Disadvantages: • New technology to be learnt • Phing beta and Pear_Version_SVN alpha
  37. 37. Rollback
  38. 38. Emergency roll-backJust change the symlink!
  39. 39. Complete roll-back• Write rollback.php or create a Phing build task• Put the server back to where it was before • Change the symlink • Delete the deployed directory• Database rollback • Run down() delta in your migration tool
  40. 40. To summarise1. Automated deployment prevents mistakes2. Itʼs not hard3. Easy roll-back is priceless
  41. 41. Questions? feedback: http://joind.in/2842 email: rob@akrabat.com twitter: @akrabat
  42. 42. Thank you feedback: http://joind.in/2842 email: rob@akrabat.com twitter: @akrabat
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×