Write php deploy everywhere   tek11
Upcoming SlideShare
Loading in...5

Write php deploy everywhere tek11






Total Views
Views on SlideShare
Embed Views



1 Embed 1

https://twitter.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

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

Write php deploy everywhere   tek11 Write php deploy everywhere tek11 Presentation Transcript

  • Write PHP, deploy anywhere Tek 11 - Chicago, IL (USA)
  • m aI’ p e r v e lo D e
  • I write code
  • Not a sysadminhttp://www.flickr.com/photos/scobleizer/4870003098/
  • Just want to run code
  • Deployment types
  • Live Hacking
  • Good old days
  • FTP deploy
  • Manual FTP deploy
  • Version control
  • Code management
  • Versioning concepts
  • Symlink switch oldpath/to/webapppath/to/webapp-1.0.2 -> path/to/webapppath/to/webapp-1.0.3
  • Symlink switch newpath/to/webapppath/to/webapp-1.0.2path/to/webapp-1.0.3 -> path/to/webapp
  • Automated deployment
  • Concept: build• required steps•- to “build” an application validate - test - document - package
  • PHP provides the tools!
  • Phing•- build tool written in PHP comparable to ANT - but written in PHP :-)• impressive list of task templates• extensible for missing tasks
  • Phing HelloWorld!<?xml version="1.0" encoding="UTF-8"?><project name="demo" default="build"> <target name="build"> <echo msg="Hello World!"/> </target></project>
  • Export from SVN<property name="buildpath" value="./build"/><property name="repopath" value="https://svn.myserver.com/demo/trunk"/> <target name="prepare"> <delete dir="${buildpath}" includeemptydirs="true" quiet="true" verbose="false" failonerror="false" /> <mkdir dir="${buildpath}"/> </target> <target name="getsources" depends="prepare"> <svnexport svnpath="/usr/bin/svn" force="true" nocache="true" repositoryurl="${repopath}" todir="${buildpath}"/> </target>
  • Deployment targets• scp• rsync• ftp•- VCM deployments cvs - svn - git - …
  • More info: phing.info
  • Anywhere deployment
  • Where to deploy to?• bare metal servers•- virtual servers even cloud instances• any OS (Windows, OSX, Linux, i5, …)
  • Linux server
  • Example deploy Linux<target name="deploy-linux"> <exec dir="./build" command="rsync -ruq user@server.com:/srv/www/demo"/></target>
  • Windows server
  • Deploy to windows<target name="deploy-windows" depends="version-bugfix"> <ftpdeploy host="${env.win-prod}" port="21" username="${auth.win-prod.username}" password="${auth.win-prod.password}" dir="/" mode="binary" clearfirst="false"> <fileset dir="."> <exclude=”./library/Zend”/> <exclude=”./library/ZendX”/> </fileset> </ftpdeploy></target>
  • Deploy to S3<target name="deploy-windows" depends="version-bugfix"> <ftpdeploy host="${env.win-prod}" port="21" username="${auth.win-prod.username}" password="${auth.win-prod.password}" dir="/" mode="binary" clearfirst="false"> <fileset dir="."> <exclude=”./library/Zend”/> <exclude=”./library/ZendX”/> </fileset> </ftpdeploy></target>
  • Windows Azure
  • A few remarks•- runs only on windows but still uses phing :-)• takes a considerable time to upload• instances are defined in the config
  • Setting properties<property name="cmd-cspack" value="c:Program FilesWindows Azure SDKv1.3bincspack.exe" override="false"/><property name="cmd-csrun" value="c:Program FilesWindows Azure SDKv1.3bincsrun.exe" override="false"/>
  • Prepare for Azure<target name="prepare-azure" depends="version-bugfix"> <!-- start building in ./bldtmp --> <mkdir dir="./bldtmp" /> <copy todir="./bldtmp" overwrite="true"> <fileset dir="./deploy/azure"> <include name="**/*.*" /> </fileset> </copy> <copy todir="./bldtmp/PhpOnAzure.Web" overwrite="true"> <fileset dir="."> <include name="**/*"/> <include name="*"/> </fileset> </copy></target>
  • Deploy to Azure<target name="deploy-azure" depends="prepare-azure"> <exec command="&quot;${cmd-cspack}&quot;ServiceDefinition.csdef /role:PhpOnAzure.Web;PhpOnAzure.Web /out:PhpAzure.cspkg" dir="./bldtmp" /> <mkdir dir="./release/${phing.project.name}-${version.number}/azure-prod" /> <copy todir="./release/${phing.project.name}-${version.number}/azure-prod" overwrite="true"> <fileset dir="./bldtmp"> <include name="PhpOnAzure.cspkg"/> <include name="ServiceConfiguration.cscfg"/> </fileset> </copy></target>
  • Continuous Integration
  • Continuous Building
  • With CI• always “ready to deploy” codebase• feedback on quality• documentation• more …
  • Considerations
  • Some reminders•- design your apps to work everywhere use OOP abstraction layers - use plugins - take care of sessions!• investigate “the other platform” - gives you a head start over competetion - teaches you the caveats• “cloud” solutions are in high-demand - see what works best for your customer
  • automate what you might forget under stress!
  • Conclusion
  • 1. deployment is simple2. automate the steps3. deploy to any platform
  • Thank you• source code: http://github.com/DragonBe/zftest• your rating: http://joind.in/3438•- follow me: twitter: @DragonBe - facebook: DragonBe Please use joind.in for feedback