Trong bài này, chúng ta sẽ cấu hình Capistrano trong ứng dụng Ruby on Rails. Sau đó deploy app lên cloud instance chạy Ubuntu làm OS, độc lập hosting provider. Bạn dùng bất kỳ cloud service, hoặc on-premises server, để test/replicate steps.
Sau deploy, chúng ta xem ngắn cách monitor app deployments dùng AppSignal.
Nhưng trước, bạn có thể hỏi: tại sao dùng Capistrano?
Tại Sao Chọn Capistrano Cho Ruby on Rails App?
Bạn có thể thắc mắc có còn hợp lý dùng Capistrano deploy ngày nay. Giờ nhiều tool và service cho deployment và CI.
Để trả lời, cần revisit origin Capistrano và evolution đến nay. Tag đầu Capistrano repo là 2006. Mục tiêu: cho phép execute commands remotely qua SSH parallel trên nhiều máy, dùng DSL. Kể từ đó, Capistrano evolved, thêm features mỗi version.
Hiện tại version 3 sau 16 năm, Capistrano tiếp tục actively developed, known as framework building automated deployment scripts.
Vì vậy không chỉ tool chạy command remote. Ngoài features Capistrano, nhiều plugins và gems specifically run với Capistrano.
Vì vậy và community lớn vẫn dùng, Capistrano vẫn great tool automated deployment.
Thêm Capistrano Vào Ruby on Rails App
Đầu tiên, cần cấu hình Rails app tích hợp Capistrano. Bạn follow Capistrano docs. Tuy nhiên, nó nhiều info hơn scope bài. Vì đơn giản, bài chỉ bao gồm steps và config cần thiết.
Để bắt đầu config, thêm Capistrano gem vào development section Gemfile:
Cần capistrano-rails gem chạy migration database và handle assets phần sau.
Chạy bundle install thêm Capistrano:
Sau đó cài Capistrano:
Lệnh tạo file Capfile import và config required libraries. Thêm, file deploy.rb (tạo trong folder config) chứa tất cả config nên include trong deployment với Capistrano.
Lưu ý: Capistrano tạo file override deploy.rb config cho staging và production, nhưng không cover bài này.
Với đó, bạn sẵn sàng config và communicate giữa Rails app và server.
Server Configuration Với Capistrano Cho Rails App
Bước này, thêm instructions vào Capistrano config file. Instructions communicate server nơi app deploy. Đây nơi define access info và security config.
Đảm bảo production environment chạy same Ruby version development, dùng Ruby version manager, như RVM hoặc rbenv (Capistrano support both).
Bài này dùng RVM. Đảm bảo RVI cài trên dev machine và production server. Check Ruby version same environments và project.
Thêm Gem capistrano-rvm
Dự án Capistrano cung cấp gem capistrano-gem config RVM dễ dàng. Include vào project, thêm Gemfile development group, chạy bundle install lại.
Update Capfile với capistrano-rvm import:
Trong deploy file, thêm config set Ruby version và path RVM (đặc biệt nếu dùng path khác cài RVM).
Nếu không define Ruby version, Capistrano chọn latest version cài trên server deploy app.
Capistrano::RVM có settings khác, nhưng những gì hiện ở đây đủ bắt đầu.
Thiết Lập Server Configuration
Good practice define user cho deployment. Đừng quên steps trên server trước deploy:
- Thêm public key generated local machine vào
~/home/YOUR_USER/.ssh/authorized_keys. - Tạo key và include public key trong code repo. Cho access clone project trong production server. Nếu dùng GitHub, follow docs.
- Set permissions write vào
/var/www/.
Bạn config Capistrano cho environment cần. Chỉ tạo config file mới trong config/deploy/<environment_name>.rb, config IP/DNS, username, connect server.
Hoàn thiện deployment setup, include info app: application name, code repository URL. Info same all environments thêm vào config/deploy.rb. Config specific environment vào config/deploy/<environment_name>.rb.
Thiết Lập Gem capistrano-secrets-yml Cho Rails App
Nên setup capistrano-secrets-yml gem.
Thêm gem Gemfile, chạy bundle install:
Import vào Capfile:
Tạo config/secret.yml app, include secret key base as environment variable. Variable tạo trên production server. Nhớ không commit file này repo.
Trong application folder terminal, chạy lệnh generate secret key base:
Copy key generated, dùng set SECRET_KEY_BASE production server. Access production server, export SECRET_KEY_BASE variable trong ~/.bashrc cuối, luôn available:
Chạy source làm instantly available environment:
Quay lại machine, access application folder terminal, chạy Capistrano command tạo config/secrets.yml production server:
Xong! Bây giờ config Capistrano chạy migration.
Cấu Hình Capistrano Thực Hiện Database Migration
Bây giờ config Capistrano chạy database-related commands.
Gem capistrano-rails đã trong Gemfile config perform migration mỗi deploy. Chỉ import vào Capfile:
Nhưng muốn chạy seeds deploy, cần tạo task mới chạy sau migration:
Với đó, app sẵn sàng deploy!
Bắt Đầu Deploy Ruby on Rails App
Xem cách perform deploy từ local machine direct update server new version app.
Khi execute deploy command, Capistrano connect server. Từ đó, Capistrano thử clone code từ repo defined config file (config/deploy.rb). Các task khác perform, theo deployment flow.
Command deploy:check Capistrano validate Git config ok và Capistrano correct access directories dùng deployment.
Để dùng, pass environment. Case này, production:
Nếu config ok, bắt đầu deploy production:
Thêm, check all available tasks Capistrano với command:
Bước cuối, integrate Rails app với AppSignal và bắt đầu monitor.
Cách Tích Hợp AppSignal Với Capistrano Và Rails App
AppSignal monitoring tool, bạn thắc mắc tại sao trong bài. Câu hỏi hợp lý, monitoring không directly related deployments.
Đó nói, AppSignal valuable tool monitoring Rails app và track deployments mỗi environment. Xem cách setup AppSignal app.
Cần AppSignal account, tạo trên sign-up page. Chọn Ruby language, follow steps install AppSignal app.
Sau install, file tạo config AppSignal. Quan trọng: define revision — info check sau deploy xem new version app deployed. Case này, dùng Git log làm revision info đảm bảo mỗi new code deploy notify AppSignal.
Cũng good practice export AppSignal env variables production server (đặc biệt API key, không giữ config file).
Rồi rerun deploy. Nếu setup đúng, thấy message như sau cuối deploy:
Bây giờ thấy app trong AppSignal! 🎉

Và info về deployments:

Visit AppSignal deployment documentation page để học thêm deployment integration và features khác cho Rails.
Kết Luận & Bước Tiếp Theo
Trong bài, chúng ta explore dùng Capistrano deploy Rails app. Thêm Capistrano vào app, config và deploy, cuối setup monitoring AppSignal.
Nếu muốn explore thêm, config Capistrano chạy từ integration connected repository pipeline. Tools như Bitbucket, GitHub, GitLab cung cấp settings manage process và dùng conjunction với Capistrano.
Chúc viết mã vui vẻ!
P.S. Nếu bạn muốn đọc các bài Ruby Magic ngay khi chúng xuất bản, hãy đăng ký bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ bất kỳ bài viết nào!