Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deployment kodu z Capistrano

Deployment kodu z Capistrano

(In polish)

Presented at Bydgoszcz Web Development Meetup #2

Michał Szajbe

May 21, 2014
Tweet

More Decks by Michał Szajbe

Other Decks in Programming

Transcript

  1. Typowy proces • Aktualizacja kodu • Konfiguracja • Instalacja zależności

    • Aktualizacja bazy danych • Uruchomienie aplikacji
  2. Proste rozwiązanie 1. Pobierz najnowszą wersje kodu 2. Zaktualizuj wartości

    w plikach konfiguracyjnych 3. Zainstaluj zależne biblioteki A, B i C 4. Uruchom w bazie plik migrate.sql 5. Zrestartuj serwer
  3. Problemy • Plan awaryjny • Aktualizacja wielu serwerów jednocześnie •

    Współdzielenie plików pomiędzy releasami • Zero downtime
  4. Capistrano • Narzędzie do zautomatyzowanego zarządzania zdalnymi serwerami • Pozwala

    w przyjazny sposób definiować i wykonywać zadania lub całe ciągi zadań na zdalnych maszynach • Ruby gem • Nakładka na gem SSHKit
  5. Instalacja "## Capfile "## config $ "## deploy $ $

    "## production.rb $ $ %## staging.rb $ %## deploy.rb %## lib %## capistrano %## tasks
  6. Capfile # 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 }
  7. deploy.rb set :application, "my_app" set :scm, "git" set :repo_url, "[email protected]/me/my_app.git"

    ! set :branch, "master" set :deploy_to, "/var/www/#{fetch(:application)}"
  8. Zadania $ cap -T cap deploy cap deploy:check cap deploy:rollback

    ! $ cap production deploy $ cap production deploy:check
  9. Setup serwera /var/www/my_app "## releases %## shared "## bin "##

    config "## log "## public "## tmp %## vendor
  10. Przydatne opcje set :linked_files, %w{config/database.yml} ! set :linked_dirs, %w{bin log

    tmp vendor public/system} ! set :keep_releases, 5 ! ask :branch, "master"
  11. 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
  12. Ruby on Rails Flow deploy deploy:starting [before] deploy:ensure_stage deploy:set_shared_assets deploy:check

    deploy:started deploy:updating deploy:updated deploy:publishing deploy:published deploy:finishing deploy:finished
  13. Ruby on Rails Flow deploy deploy:starting deploy:started deploy:updating git:create_release deploy:symlink:shared

    deploy:updated deploy:publishing deploy:published deploy:finishing deploy:finished
  14. Ruby on Rails Flow deploy deploy:starting deploy:started deploy:updating deploy:updated [before]

    deploy:bundle [after] deploy:migrate deploy:compile_assets deploy:normalize_assets deploy:publishing deploy:published deploy:finishing deploy:finished
  15. Ruby on Rails Flow deploy deploy:starting deploy:started deploy:updating deploy:updated deploy:publishing

    deploy:symlink:release deploy:restart deploy:published deploy:finishing deploy:finished
  16. Ruby on Rails Flow deploy deploy:starting deploy:started deploy:updating deploy:updated deploy:publishing

    deploy:published deploy:finishing deploy:finished deploy:log_revision
  17. Best practices • Trzymać konfigurację 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