-6

Deploy rails app bằng capistrano

Khi phát triển ứng dụng web bằng Ruby on Rails, việc deploy là một công việc hết sức quen thuộc, hết sức thường xuyên.

Khi deploy, bạn sẽ phải upload source code, migrate database, install gem, precompile assets, sym link files, run rake...

Bạn sẽ nghĩ sao khi cứ mỗi lần deploy, sẽ làm từng bước trên. Rắc rối đúng không.

Chính vì vậy, các auto deployment tool ra đời. Nó sẽ giúp bạn làm hết các công việc trên, việc của bạn chỉ là cấu hình cho nó biết phải làm những gì (1 lần duy nhất), những lần sau muốn deploy chỉ việc chạy 1 lệnh, thế là xong.

Hôm nay mình sẽ hướng dẫn bạn làm điều đó với Capistrano. https://github.com/capistrano/capistrano.

Capistrano là gì ?

  • Capistrano là một chương trình được viết bằng Ruby cung cấp cho bạn một bộ công cụ tiên tiến để triển khai các ứng dụng web đến các máy chủ của bạn.

  • Capistrano cho phép bạn sao chép mã từ (SVN hoặc Git) đến máy chủ thông qua SSH, và thực hiện chức năng trước và sau khi triển khai như khởi động lại một máy chủ web, bộ nhớ cache busting, đổi tên tập tin, chạy di chuyển cơ sở dữ liệu và vv.

  • Với Capistrano nó cũng có thể để triển khai đến nhiều máy cùng một lúc.

Bắt đầu.

  • Trước hết ta cần thêm một số gem vào project của bạn.
gem 'capistrano'
gem 'capistrano-rails'
gem 'capistrano-bundler'
gem 'capistrano-unicorn-nginx'
gem 'unicorn'
gem 'capistrano-rvm'
  • Chạy lệnh cap install.
├── Capfile
├── config
│   ├── deploy
│   │   ├── production.rb
│   │   └── staging.rb
│   └── deploy.rb
└── lib
    └── capistrano
            └── tasks
  • Lệnh cap install dùng để tạo ra những file config cần thiết của capistrano. Xem trong thư mục deploy, bạn sẽ thấy 2 file là production.rbstaging.rb đây là 2 config cho 2 môi trường cần deploy lên.

  • Tiếp theo ta config cho deploy.rb

#config/deploy.rb
# DemoDeploy là tên ứng dụng của bạn.
set :application, 'DemoDeploy'
#Repository của bạn
set :repo_url, 'https://github.com/nhatnkv/demo_deploy.git'
#Đường dãn chứa source trên server sau khi deploy
set :deploy_to, '/home/nhatnkv/DemoDeploy'
set :scm, :git
  • Vậy là ta thiết lập những cấu hình chung để deploy. Giờ tùy vào từng môi trường ta sẽ thiết lập riêng. Bài viết này mình sẽ thiết lập trên môi trường production. Mở file production.rb.
#config/deploy/production.rb
#Set user và và server_name của bạn
set :user, 'nhatnkv'
set :server_name, '1.2.3.4'
#Set branch trên Git mà bạn muốn deploy
set :branch, 'master'
#Set môi trường, ở đây mình thiết lâp cho môi trường production
set :rails_env, 'production'
set :bundle_flags, "--no-deployment"

role :app, ["#{fetch(deploy_user)}@#{fetch(server_name)}"]
role :web, ["#{fetch(deploy_user)}@#{fetch(server_name)}"]
role :db,  ["#{fetch(deploy_user)}@#{fetch(server_name)}"]

server fetch(server_name), user: fetch(deploy_user), roles: %w{web app db}, primary: true

  • Trong trường hợp server của bạn bắt xác thực bằng ssh thì bạn thêm tùy chọn.
#config/deploy/production.rb
#home/anhn/.ssh/demo_deploy.pem là đường dẫn mà mình dùng `.pem` để xác thực
set :ssh_options, {
  keys: %w(/home/nhatnkv/.ssh/demo_deploy.pem),
  forward_agent: false,
 }
  • Vậy là xong quá trình config cho capistrano, việc cần làm bây giờ là gõ lệnh.

cap production deploy

  • Ta chỉ việc ngồi và đợi kết quả.

RollBack

  • Nếu sau khi deploy, bạn không muốn dùng bản mới nhất, mà dùng bản cũ. Mặc định cap lưu cho ta 5 lần deploy gần đây nhất, bạn hoàn toàn có thể rollback về các phiên bản đó:

cap deploy:rollback

  • Còn nếu muốn về 1 phiên bản cụ thể nào đó thì sao?

cap deploy:rollback -s previous_release=/path/to/release/on/server


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí