12/08/2018, 13:13

Tìm hiểu về phusion passenger và sử dụng nó để deploy một rails application

I. Passenger là gì? Phusion passenger được hiểu như một webserver và một ứng dụng server cho web apps của bạn. Nếu bạn có 1 web applications, và một vps, bạn muốn deploy lên vps chạy với websever như nginx or apache, khi đó passenger sẽ giúp bạn tự động kết nối giữa web apps và webserver. ...

I. Passenger là gì?

Phusion passenger được hiểu như một webserver và một ứng dụng server cho web apps của bạn. Nếu bạn có 1 web applications, và một vps, bạn muốn deploy lên vps chạy với websever như nginx or apache, khi đó passenger sẽ giúp bạn tự động kết nối giữa web apps và webserver.

Nếu như trước kia ta hay dùng unicorn để kết nối rails apps với web server và capistrano để tự động compile assets, đóng gói code ... thì nay bạn có thể sử dụng passerger bởi nó hiện đại và triển khai dễ dàng hơn nhiều. Dưới đây là bẳng so sánh tốc độ. Có thể nói passenger chạy nhanh gấp 4 lần so với các ruby web server khác.

xxx1.png

Các bạn có thể đọc thêm bản so sánh giữa passenger và các ruby web server khác tại:

https://www.phusionpassenger.com/compare_ruby

và có thể đọc thêm lý do tại sao nó lại cải thiện được tốc đô như vậy tại:

https://www.phusionpassenger.com/handle_more_traffic

II. Lợi ích cũng như các tính năng mạnh mẽ.

Tại sao lại sử dụng passenger? Phusion passenger cung cấp rất nhiều tính năng nâng cao hơn so với các ruby app server khác như Puma, unicorn, Torquebox và chạy nhanh hơn rất nhiều.

III. Các bước deploy rails app với phusion passenger và nginx.

1. Chuẩn bị

Một vps mình chọn vps ubuntu 14.04 LTS ram 1GB đã được cài đặt sẵn môi trường cần thiết như: ruby-2.2.1, rails 4.2.4, nodejs, mysql...

xxx2.png

Bước 1: Cài nginx Bạn chạy lệnh sau:

sudo apt-get update
sudo apt-get install nginx

Và khởi động nginx:

sudo service nginx start

Bước 2: Cài đặt passenger

Ta có thể cài đặt Passenger theo cách bình thường qua ruby gem: passenger-install-nginx-module bằng lệnh sau:

gem install passenger

và module kết nối với nginx

rvmsudo passenger-install-nginx-module

Tuy nhiên mình sẽ hướng dẫn qua cách cài qua APT. Đầu tiên ta install PGP:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

tiếp đến tạo một APT file:

sudo nano /etc/apt/sources.list.d/passenger.list

sau dó insert dòng này vào file trên và save lại Chmod cho file trên với quyền 600.

sudo chown ubuntu: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

chạy update:

sudo apt-get update

Cuối cùng install passenger với nginx

sudo apt-get install nginx-extras passenger

Cài xong ta kiểm tra phiên bản phusion passenger. Ở đây mình đã cài thành công version 5.0.23

xxx3.png

Sau đó ta cần config trong nginx. Mở file /etc/nginx/nginx.conf và uncomment 2 dòng

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

Sau khi cài xong nginx sẽ bị stop. bạn cần restart lại.

Bây giờ việc tiếp theo là deploy rails app.

Bước 3 Tạo một rails app có tên myapp và bundle install. Thiết lâp cấu hính về database, gem cần thiết( ở đây tôi ko hướng dẫn vì cái này có rất nhiều hướng dẫn rồi)

Tiếp theo sẽ disable default Nginx config bằng comment các dòng listen:

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

và cấu hình lại như sau: tạo 1 file config mới để kết nối rails app của bạn với tên myapp

sudo vi /etc/nginx/sites-available/myapp

Bây h thay vì đọc config default thỳ nginx sẽ đọc config từ file này. Sau đó ta cấu hình máy chủ

server {
  listen 80 default_server;
  server_name www.xxx.com;
  passenger_enabled on;
  root /ubuntu/Chuyen/myapp/public;
}

xxx4.png

Thư mục root là nơi chưa thư mục public project của bạn. Passenger sẽ chạy với môi trường production làm mặc định. Sau đó ta save file lại và tạo symlink cho nó.

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp

Và restart lại nginx ta sẽ thấy thành quả             </div>
            
            <div class=

0