44
Capistrano для деплоймента PHP приложений Рома Лапин, Evercode Lab @memphys, [email protected]

Capistrano for PHP Applications Deployment

Embed Size (px)

DESCRIPTION

ZFConf 2012, 21.04.2012

Citation preview

Page 1: Capistrano for PHP Applications Deployment

Capistrano для деплоймента PHP приложенийРома Лапин, Evercode Lab

@memphys, [email protected]

Page 2: Capistrano for PHP Applications Deployment

If you cannot do your deployments with one command then you are

DOING IT WRONG.Chris Hartjes, “Infrastructure Debt”

(http://www.littlehart.net/atthekeyboard/2011/11/03/infrastructure-debt/)

Page 3: Capistrano for PHP Applications Deployment

Обновить файлы

Обновить базу

Создать файлы, папки, симлинки

Выставить права

Сбросить кэш

Сохранить контент

Откатиться в случае ошибки

Page 4: Capistrano for PHP Applications Deployment
Page 5: Capistrano for PHP Applications Deployment

FTP-клиенты

VCS, hooks

Phing

Shell script

Rsync

WePloy

Page 6: Capistrano for PHP Applications Deployment
Page 7: Capistrano for PHP Applications Deployment

SSH

Git/SVN/Mercurial/...

Server

Page 8: Capistrano for PHP Applications Deployment

© http://capifony.org/

Page 9: Capistrano for PHP Applications Deployment

├── current -> /var/www/zf-capistrano/releases/20120414205035

├── releases

│   ├── 20120414204853

│   │   ├── application

│   │   ├── ...

│   └── 20120414205035

│   ├── application

│   ├── ...

└── shared

├── cached-copy

│   ├── application

│   ├── ...

└── public

└── uploads

Page 10: Capistrano for PHP Applications Deployment

$ gem install capistrano

Page 11: Capistrano for PHP Applications Deployment

$ cd ~/Sites/mycoolproject$ capify .[add] writing './Capfile'[add] making directory './config'[add] writing './config/deploy.rb'[done] capified!

Page 12: Capistrano for PHP Applications Deployment

config/deploy.rb

set :application, "application_name"set :deploy_to, "/var/www/#{application}"

Page 13: Capistrano for PHP Applications Deployment

config/deploy.rb

set :scm, :gitset :repository, "[email protected]:user/app.git"set :deploy_via, :remote_cacheset :branch, "master"set :keep_releases, 3

Page 14: Capistrano for PHP Applications Deployment

config/deploy.rb

server "domain", :app, :web, :db, :primary => trueset :ssh_options, {:forward_agent => true, :port => 22}set :user, "deployer"set :use_sudo, false

Page 15: Capistrano for PHP Applications Deployment

$ cap -h$ cap -T

Page 16: Capistrano for PHP Applications Deployment

namespace :deploy do    task :start do    end

    task :stop do    end

    task :migrate do    end

    task :restart do    end end

config/deploy.rb

Page 17: Capistrano for PHP Applications Deployment

$ gem install railsless-deploy

Capfile

require 'railsless-deploy'load 'config/deploy'

Page 18: Capistrano for PHP Applications Deployment

$ cap deploy:setup$ cap deploy:check

Page 19: Capistrano for PHP Applications Deployment

$ cap deploy

Page 20: Capistrano for PHP Applications Deployment
Page 21: Capistrano for PHP Applications Deployment

$ cap deploy:update$ cap deploy:cleanup

Page 22: Capistrano for PHP Applications Deployment
Page 23: Capistrano for PHP Applications Deployment

$ cap deploy:rollback

Page 24: Capistrano for PHP Applications Deployment
Page 25: Capistrano for PHP Applications Deployment

Capfile (ZF1)

load 'config/deploy'

Page 26: Capistrano for PHP Applications Deployment

Capfile (ZF1)

load 'config/deploy'

Page 27: Capistrano for PHP Applications Deployment

Capfile (ZF1)

load 'application/configs/deploy'

load 'config/deploy'

Page 28: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

namespace :myproject do    task :symlink, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink"

Page 29: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

run "mkdir -p #{shared_path}/library"run "chmod -R 755 #{shared_path}/library"run "ln -nfs /path/to/zf/library/Zend #{shared_path}/library/Zend"run "ln -nfs #{shared_path}/library #{release_path}/library"

namespace :myproject do    task :symlink, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink"

Page 30: Capistrano for PHP Applications Deployment

config/deploy.rb (ZF2)

namespace :myproject do    task :symlink, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink"

Page 31: Capistrano for PHP Applications Deployment

config/deploy.rb (ZF2)

run "mkdir -p #{shared_path}/vendor/ZendFramework/library"run "chmod -R 755 #{shared_path}/vendor/ZendFramework/library"run "ln -nfs /path/to/ZendFramework-2.0.0beta3/library/Zend #{shared_path}/vendor/ZendFramework/library/Zend"run "rm -rf #{release_path}/vendor"run "ln -nfs #{shared_path}/vendor #{release_path}/vendor"

namespace :myproject do    task :symlink, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink"

Page 32: Capistrano for PHP Applications Deployment

namespace :myproject do    task :uploads, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink", "myproject:uploads"

application/configs/deploy.rb

Page 33: Capistrano for PHP Applications Deployment

namespace :myproject do    task :uploads, :roles => :app do

...    endend

after "deploy:symlink", "myproject:symlink", "myproject:uploads"

application/configs/deploy.rb

run "mkdir -p #{shared_path}/public/uploads"run "chmod -R 775 #{shared_path}/public/uploads"run "ln -nfs #{shared_path}/public/uploads #{release_path}/public/uploads"

Page 34: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

task :disable do...

end

after "deploy:update_code", "myproject:disable"

Page 35: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

run "echo 'Site is on maintenance right now. Sorry.' > #{shared_path}/public/maintenance.html"

run "cp #{shared_path}/public/maintenance.html #{latest_release}/public/maintenance.html"

task :disable do...

end

after "deploy:update_code", "myproject:disable"

Page 36: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

task :enable do...

end

after "deploy:symlink", "myproject:enable"

Page 37: Capistrano for PHP Applications Deployment

application/configs/deploy.rb

run "rm -f #{latest_release}/public/maintenance.html"

task :enable do...

end

after "deploy:symlink", "myproject:enable"

Page 38: Capistrano for PHP Applications Deployment

task :migrate do...

end

after "deploy:finalize_update", "myproject:migrate"

application/configs/deploy.rb

Page 39: Capistrano for PHP Applications Deployment

task :migrate do...

end

after "deploy:finalize_update", "myproject:migrate"

application/configs/deploy.rb

on_rollback { run "#{release_path}/bin/doctrine migrations:migrate down" }run "#{release_path}/bin/doctrine migrations:migrate"

Page 40: Capistrano for PHP Applications Deployment

task :unicornsandwizards do# notify by email# post to irc or group chat# send SMS# activate SkyNet# order some Pizza

end

after "deploy:finalize_update", "myproject:unicornsandwizards"

application/configs/deploy.rb

Page 41: Capistrano for PHP Applications Deployment

zf-capistrano

https://github.com/memphys/zf-capistrano

zf2-capistrano

https://github.com/memphys/zf2-capistrano

Capistrano home

https://github.com/capistrano/capistrano/wiki

Page 42: Capistrano for PHP Applications Deployment

Multistage

Capifony (http://capifony.org)

Webistrano

Page 43: Capistrano for PHP Applications Deployment
Page 44: Capistrano for PHP Applications Deployment

Спасибо за внимание

Рома ЛапинEvercode Lab

[email protected]

@memphys