2. Typowy proces
Aktualizacja kodu
Kon鍖guracja
Instalacja zale甜noci
Aktualizacja bazy danych
Uruchomienie aplikacji
3. Proste rozwizanie
1. Pobierz najnowsz wersje kodu
2. Zaktualizuj wartoci w plikach kon鍖guracyjnych
3. Zainstaluj zale甜ne biblioteki A, B i C
4. Uruchom w bazie plik migrate.sql
5. Zrestartuj serwer
4. Problemy
Plan awaryjny
Aktualizacja wielu serwer坦w jednoczenie
Wsp坦dzielenie plik坦w pomidzy releasami
Zero downtime
5. Capistrano
Narzdzie do zautomatyzowanego zarzdzania
zdalnymi serwerami
Pozwala w przyjazny spos坦b de鍖niowa i
wykonywa zadania lub cae cigi zada na
zdalnych maszynach
Ruby gem
Nakadka na gem SSHKit
8. Cap鍖le
# Load DSL and Setup Up Stages
require 'capistrano/setup'
!
# Includes default deployment tasks
require 'capistrano/deploy'
!
# Includes tasks from other gems included in your Gemfile
#
# require 'capistrano/rails'
# require 'capistrano/laravel'
# require 'capistrano/symfony'
# require 'capistrano/npm'
!
# Loads custom tasks from `lib/capistrano/tasks' if you have any
defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
10. deploy.rb
set :application, "my_app"
set :scm, "git"
set :repo_url,
"git@github.com/me/my_app.git"
!
set :branch, "master"
set :deploy_to,
"/var/www/#{fetch(:application)}"
20. Flow
# check everything, start a deployment
deploy:starting
!
# update server(s) with a new release
deploy:updating
!
# publish the new release
deploy:publishing
!
# finish the deployment, clean up everything
deploy:finishing
30. Best practices
Trzyma kon鍖guracj deploymentu w repozytorium
Nie trzyma wra甜liwych danych w repozytorium, tylko w shared
na serwerze
Kompilowa kod na serwerze zamiast trzyma skompilowany kod
w repozytorium
Dla customowych zada napisa hooki do deploy:starting i
deploy:reverting
Rozbudowa deploy:check o sprawdzanie zale甜nych bibliotek
Nie pr坦bowa zautomatyzowa absolutnie wszystkiego