zfconf 2012: capistrano для деплоймента php-приложений (Роман...

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

Upload: zfconf-conference

Post on 18-Jan-2015

2.291 views

Category:

Technology


1 download

DESCRIPTION

http://www.zfconf.ru/2012/talks/capistrano-for-deployment-php-applications/

TRANSCRIPT

Page 1: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

@memphys, [email protected]

Page 2: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

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

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

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

Сбросить кэш

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

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

Page 4: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 5: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

FTP-клиенты

VCS, hooks

Phing

Shell script

Rsync

WePloy

Page 6: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 7: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

SSH

Git/SVN/Mercurial/...

Server

Page 8: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

© http://capifony.org/

Page 9: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

├── releases

│   ├── 20120414204853

│   │   ├── application

│   │   ├── ...

│   └── 20120414205035

│   ├── application

│   ├── ...

└── shared

├── cached-copy

│   ├── application

│   ├── ...

└── public

└── uploads

Page 10: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ gem install capistrano

Page 11: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

Page 12: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

config/deploy.rb

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

Page 13: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ cap -h$ cap -T

Page 16: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ gem install railsless-deploy

Capfile

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

Page 18: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ cap deploy:setup$ cap deploy:check

Page 19: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ cap deploy

Page 20: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 21: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ cap deploy:update$ cap deploy:cleanup

Page 22: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 23: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

$ cap deploy:rollback

Page 24: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 25: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

Capfile (ZF1)

load 'config/deploy'

Page 26: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

Capfile (ZF1)

load 'config/deploy'

Page 27: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

Capfile (ZF1)

load 'application/configs/deploy'

load 'config/deploy'

Page 28: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

application/configs/deploy.rb

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

...    endend

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

Page 29: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

config/deploy.rb (ZF2)

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

...    endend

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

Page 31: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

...    endend

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

application/configs/deploy.rb

Page 33: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

application/configs/deploy.rb

task :disable do...

end

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

Page 35: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

application/configs/deploy.rb

task :enable do...

end

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

Page 37: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

application/configs/deploy.rb

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

task :enable do...

end

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

Page 38: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

task :migrate do...

end

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

application/configs/deploy.rb

Page 39: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

Multistage

Capifony (http://capifony.org)

Webistrano

Page 43: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
Page 44: ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)

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

Рома ЛапинEvercode Lab

[email protected]

@memphys