Slide 1

Slide 1 text

Build & deploy PHP applications* brief introduction

Slide 2

Slide 2 text

Who am I ? Anton Babenko @antonbabenko Tech lead at Zoozoo.com Symfony2/PHP/MySQL

Slide 3

Slide 3 text

Develop > Build > Test > Deploy

Slide 4

Slide 4 text

Develop > Build > Test > Deploy Develop locally, run some tests, commit and push code…

Slide 5

Slide 5 text

Develop > Build > Test > Deploy ?

Slide 6

Slide 6 text

Develop > Build > Test > Deploy Automate

Slide 7

Slide 7 text

Develop Build Test Deploy Automate and get: ● Faster development cycle ● Easier handover to new team members ● Improves quality ● Reduces errors ● Saves time ● Establish routine process which team can rely on

Slide 8

Slide 8 text

Develop Build Test Deploy What to automate: ● Dependency & configuration management ○ Using Puppet, Chef, Ansible, bash scripting ● Compilation, minification of your assets ● Running tests ● Creation of documentation and changelogs ● Packaging ● Deployment

Slide 9

Slide 9 text

Develop Build Test Deploy How to build?

Slide 10

Slide 10 text

Develop Build Test Deploy How to build? Why do you need a build tool? ● To prepare a project to act in a specific environment Should be no room for misconfiguration ● Staging should have environment similar to production

Slide 11

Slide 11 text

Develop Build Test Deploy Example flow: ● Get project files from VCS ● Configure ● DB Migration ● Run package managers and builders (npm, bower, grunt) ● Upload ● Cache warmup ● Clear opcache

Slide 12

Slide 12 text

Develop Build Test Deploy Popular build & deployment tools for PHP projects: ● Bash scripting (Still hit #1) ● Apache Ant ● Phing ● Capistrano ● Fabric ● http://en.wikipedia.org/wiki/List_of_build_automation_software or use PaaS

Slide 13

Slide 13 text

Develop Build Test Deploy PHP PaaS Providers: PagodaBox AppFog Heroku fortrabbit Engine Yard Cloud Red Hat OpenShift Platform dotCloud http://www.phptherightway.com/#servers_and_deployment AWS Elastic Beanstalk cloudControl Windows Azure Zend Developer Cloud Google App Engine Jelastic

Slide 14

Slide 14 text

Develop Build Test Deploy ● Bash scripting = be creative as you wish ● Jenkins CI + Apache Ant + jenkins-php.org = great starting point ● Phing = “Apache Ant written in PHP” ● Capistrano ● Fabric

Slide 15

Slide 15 text

Develop Build Test Deploy ● Bash scripting = be creative as you wish ● Jenkins CI + Apache Ant + jenkins-php.org = great starting point ● Phing = “Apache Ant written in PHP” ● Capistrano = for builds and deployments ● Fabric

Slide 16

Slide 16 text

Develop Build Test Deploy Capistrano is an open source tool for running scripts on multiple servers. It’s primary use is for easily deploying applications. capifony is a deployment recipes collection that works with both symfony and Symfony2 applications. Source: capifony.org

Slide 17

Slide 17 text

Develop Build Test Deploy # gem install hipchat newrelic_rpm if exists?(:config_hipchat_token) require 'hipchat/capistrano' set :hipchat_token, "#{config_hipchat_token}" set :hipchat_room_name, "Developers chat" end # Recipe: # github.com/ekino/EkinoNewRelicBundle/blob/master/Resources/recipes/newrelic.rb if exists?(:config_newrelic_license) require 'new_relic/recipes' set :newrelic_license_key, "#{config_newrelic_license}" set :newrelic_appname, "You name it" after "deploy", "newrelic:notice_deployment" end Capifony sugar (1/4):

Slide 18

Slide 18 text

Develop Build Test Deploy after "symfony:composer:install", "symfony:verify_console" namespace :symfony do task :verify_console do capifony_pretty_print "--> Run app/console to verify if parameters.yml has all required keys and application is runnable" if capture("#{try_sudo} sh -c 'cd #{latest_release} && #{php_bin} #{symfony_console} > /tmp/app_console_output 2>&1 ; echo $?'").to_s.strip != "0" run "cat /tmp/app_console_output && rm -rf /tmp/app_console_output" raise CommandError.new("There was an unrecoverable error.") end capifony_puts_ok end end Capifony sugar (2/4):

Slide 19

Slide 19 text

Develop Build Test Deploy # Update assets_version # Source: https://github.com/kachkaev/KachkaevAssetsVersionBundle namespace :assets_version do task :increment do capifony_pretty_print "--> Increment assets_version" run "#{try_sudo} sh -c 'cd #{latest_release} && #{php_bin} #{symfony_console} assets_version:increment --env=#{symfony_env_prod}'" capifony_puts_ok end end Capifony sugar (3/4):

Slide 20

Slide 20 text

Develop Build Test Deploy # Run migration on one DB server instead of all: role :web, "www1.mysite.com", "www2.mysite.com" role :app, "www1.mysite.com", "www2.mysite.com" role :db, "db1.mysite.com", :primary => true role :db, "db2.mysite.com" role :db, "db3.mysite.com" Capifony sugar (4/4):

Slide 21

Slide 21 text

Develop Build Test Deploy Capifony questions? http://stackoverflow.com/questions/tagged/capifony Want something with GUI? http://www.deployhq.com/

Slide 22

Slide 22 text

Develop Build Test Deploy Questions? Questions? Questions? Questions?

Slide 23

Slide 23 text

Thanks!