Hỏi về cách deploy ứng dụng ruby on rails
chào các anh chị,
Em là newbie ruby on rails, gần đây em đang tự đọc thêm mấy phần liên quan đến deploy và em có một thắc mắc như sau:
Giả sử, project em đang làm, cần làm việc với sidekiq, trên máy cá nhân, thì em chỉ việc
trỏ vào thư mục project rồi chạy lệnh bundle exec sidekiq
để chạy sidekiq lên cho dự án.
Vậy còn trên server, em thấy hình như không ai trỏ vào thư mục project trên server rồi gõ lệnh chạy sidekiq cả
tương tự như vậy,em thấy không ai cần rails s để chạy project (trên server).
Vậy cách để chạy auto project (và các phần mềm cần thiết) trong deploy gọi là gì và em có thể tìm hiểu thêm vấn đề này bằng cách google với các keywords nào?
Mong các anh chị giải đáp giúp em. Xin lỗi mọi người vì hiểu biết em còn hạn hẹp nên cách mô tả vấn đề không được tường mình (bow)
2 CÂU TRẢ LỜI
Câu hỏi của bạn quá chung chung, lại có những điểm khá chi tiết nên mình cũng không chắc phải trả lời thế nào cho phải Nên mình cũng sẽ trả lời chung chung
Deploy một web service nói chung lên môi trường production mà một phần việc tương đối phức tạp (thuộc về mảng infrastructure) mà không phải ngày một ngày hai mà lĩnh hội hết được. Giải thích nôm na là bạn cần cài cắm khá nhiều thứ lên một hoặc nhiều server, liên kết chúng với nhau để có thể thực hiện được nhiều tác vụ khác nhau như vận hành HTTP server (phổ biến thì có Nginx hay Apache), web server (với Rails thì có các lựa chọn như Unicorn, Puma, Passenger...), dababase (MySQL, Postgres...), các công cụ monitor (Monit, Munin)...
Thực ra trên máy tính của bạn (môi trường development) bạn cũng đã và đang làm những điều tương tự như là cài đặt database, khởi động database, khởi động web server (chạy rails s
) tuy nhiên là ở môi trường development với độ ổn định và chịu tải không cao, do nó chỉ phục vụ cho mục đích phát triển. Môi trường production yêu cầu phải có nhiều thành phần và cơ chế hơn để đảm bảo tính ổn định (khó bị down, có bị down thì phải có cơ chế auto restart) và chịu tải tốt (rails s của bạn ở máy nếu bạn access từ 10 tabs khác nhau trên trình duyệt thì sẽ thấy các request sẽ phải xếp hàng chờ nhau, trong khi môi trường production thì phải đảm bảo xử lý cho nhiều user request 1 lúc, mà cái nào cũng phải nhanh)
Bạn vẫn có thể thử vào server online của bạn, cài đặt rails, database, git, pull project về và chạy rails s -e production
và nó vẫn sẽ chạy (ngày xưa làm cái dịch vụ đặt sữa chua cho công ty bọn mình cũng làm vậy cho ... nhanh) nhưng nó sẽ bất ổn đúng như khi bạn chạy môi trường development trên máy bạn
Trả lời kỹ hơn cho những ý chi tiết của bạn
Không ai trỏ vào thư mục project trên server rồi gõ lệnh chạy sidekiq cả
Không ai cần rails s để chạy project (trên server)
Là bởi vì sau khi deploy xong thì web server(s) hay worker(s) phục vụ cho sidekiq sẽ được tự khởi động và theo dõi nhờ các commands được config từ trước.
Một ví dụ nhỏ bạn có thể tham khảo nhanh file này
Trong đó có command cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D
để khởi động unicorn đó. Tham khảo nhanh thôi nhé, đọc kỹ lại bị hoang mang
Nói chung mình nghĩ ai mới bắt đầu thì cũng có thắc mắc như bạn cả thôi. Mình ngày xưa cũng vậy
Mình không phải chuyên về infra nên mình chọn cách đọc guide làm theo cho chạy được đã rồi dần dần ngộ ra về cách vận hành của từng thành phần, kiến tha lâu cũng có ngày đầy tổ.
Keywords tìm kiếm thì cũng có nhiều lắm, cũng như cách deploy thì cũng có hàng chục hàng trăm cách khác nhau, có cách ăn sẵn chả phải làm gì, có cách thì phải làm rất nhiều bước phức tạp và pro. Ăn sẵn thì bạn có thể dùng HEROKU https://www.heroku.com/ vô cùng thân thiện với Rails, cho đến giờ mình vẫn dùng với các dự án cá nhân và các dự án nhỏ. Nếu bạn có kiến thức về Docker thì đó cũng là một cách ăn sẵn, mọi thứ để nằm đó chờ bạn sử dụng thôi.
https://viblo.asia/p/deploy-rails-app-on-heroku-qm6RWqAnGeJE
https://viblo.asia/p/dockerize-rails-app-using-docker-and-docker-compose-924lJW765PM
Phức tạp hơn thì bạn tham khảo các bài viết sau trên Viblo để lấy các từ khoá nhé
https://viblo.asia/p/deploy-ung-dung-rails-voi-capistrano-va-unicorn-1VgZvoJ7lAw
https://viblo.asia/p/deploy-rails-application-voi-nginx-va-passenger-Ljy5VXy9Zra
TL;DR Chúc bạn thành công!
Câu trả lời có tâm quá anh ơi
hay qúa anh ơi, cảm ơn anh nhiều nhiều :
Bạn tìm hiểu cách dùng Nginx và Unicorn nhé. "How to deploy ruyby of rails using nginx and unicorn". Ngoài ra tìm hiểu thêm về Docker, để deploy nhanh hơn.
cảm ơn bạn nhiều nhiều