Thứ tư, 29/01/2014 | 00:00 GMT+7

Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.5

Thử thách không bao giờ thực sự kết thúc, đặc biệt nếu bạn chưa quen với một lĩnh vực nào đó của lập trình máy tính. Trong trường hợp này, chủ đề của ta là Rails và cách tải (các) ứng dụng web dựa trên Ruby On Rails của bạn trực tuyến - cách đơn giản và nhanh nhất có thể.


Sau khi giải quyết các câu đố để bắt đầu làm việc trên ứng dụng của bạn bằng ngôn ngữ lập trình Ruby và khung phát triển ứng dụng web Rails, khi đến lúc chia sẻ ứng dụng của bạn với phần còn lại của thế giới, bạn có thể bối rối với tất cả các lựa chọn có sẵn và vô số các kết hợp có thể tồn tại.

Trong bài viết DigitalOcean này, ta sẽ chỉ cho bạn - từ đầu đến cuối - cách triển khai ứng dụng Rails vững chắc (tức là được xuất bản trực tuyến) bằng cách sử dụng hệ điều hành CentOS mới nhất nổi tiếng về độ ổn định của nó. Điều này sẽ cùng với server ứng dụng Phusion Passenger, được biết đến với sự đơn giản và các tính năng tuyệt vời, cùng với server Nginx HTTP chạy phía trước để xử lý và quản lý các kết nối.

Lưu ý: Trong buổi giới thiệu này, bạn nên kiểm tra và đọc nội dung của các liên kết được cung cấp. Họ sẽ giúp bạn nâng cao hiệu suất, bảo mật, v.v.

Bảng chú giải


1. Triển khai ứng dụng web, server và role của chúng


  1. Server ứng dụng hành khách Phusion
  2. Server HTTP Nginx đang chạy như Reverse-Proxy

2. Chuẩn bị Server Triển khai


  1. Cập nhật và chuẩn bị hệ điều hành
  2. Cài đặt Môi trường Ruby và Rails
  3. Download và cài đặt ứng dụng server

3. Chuẩn bị ứng dụng để triển khai


  1. Tạo một ứng dụng mẫu / tải lên mã nguồn của bạn
  2. Tạo tập lệnh quản lý Nginx
  3. Cấu hình Nginx

4. Đọc thêm


Triển khai ứng dụng web, server và role của chúng


Khi nói đến việc triển khai các ứng dụng web hoặc đưa chúng trực tuyến, thường có nhiều lớp ứng dụng được sử dụng cho mục đích. Chắc chắn một chiếc có thể làm được việc, nhưng có lẽ không tốt lắm, vì chúng không được tạo ra phù hợp cho mọi mục đích.

Trong hướng dẫn này, ta sẽ sử dụng Phusion Passenger làm server ứng dụng. Công việc của server ứng dụng bao gồm chứa các ứng dụng web hiện đại (ví dụ như Ruby Rack, Python WSGI, v.v.) và hoạt động như điểm nhập phụ của các yêu cầu web đến.

Mặt khác, Nginx được thiết kế từ đầu để hoạt động như một server HTTP đa mục đích. Nó có khả năng phục vụ các file tĩnh (ví dụ: hình ảnh, file văn bản, v.v.) cực kỳ tốt, cân bằng kết nối và đối phó với một số nỗ lực khai thác nhất định. Nó hoạt động như điểm nhập đầu tiên của tất cả các yêu cầu và chuyển chúng cho Hành khách để ứng dụng web xử lý và trả lời phản hồi.

Server ứng dụng hành khách Phusion


Hành khách ngày nay đã trở thành server khuyến khích cho các ứng dụng Ruby on Rails. Nó là một sản phẩm hoàn thiện, giàu tính năng nhằm đáp ứng các nhu cầu cần thiết và các lĩnh vực triển khai ứng dụng đồng thời đơn giản hóa đáng kể các thủ tục cài đặt và bắt đầu. Nó loại bỏ kiến trúc cài đặt server trung gian truyền thống bằng cách tích hợp trực tiếp với Nginx (và cả Apache). Nó còn gọi là mod_rails.

Hành khách rất phổ biến và được sử dụng rộng rãi trong nhiều kịch bản production . Rất dễ dàng liên hệ và tìm các chuyên gia cũng như giải quyết các vấn đề của bạn trực tuyến.

Phiên bản open-souce mà ta sẽ sử dụng có chế độ hoạt động đa quy trình đơn stream . Phiên bản Enterprise của nó có thể được cấu hình để hoạt động đơn stream hoặc đa stream .

Để tìm hiểu thêm về Hành khách, bạn có thể truy cập trang web chính thức của Hãng tại https://www.phusionpassenger.com/ .

Server HTTP Nginx đang chạy như Reverse-Proxy


Nginx là một web server / ( ngược) -proxy có hiệu suất rất cao. Nó đã trở nên phổ biến do trọng lượng nhẹ, tương đối dễ làm việc và dễ mở rộng (với các tiện ích bổ sung / trình cắm thêm). Nhờ kiến trúc của nó, nó có khả năng xử lý rất nhiều yêu cầu (hầu như không giới hạn), điều này - tùy thuộc vào tải ứng dụng hoặc trang web - có thể thực sự khó giải quyết bằng cách sử dụng một số lựa chọn thay thế cũ hơn khác.

Lưu ý : "Xử lý" các kết nối về mặt kỹ thuật nghĩa là không làm rơi chúng và có thể phục vụ chúng bằng một thứ gì đó . Bạn vẫn cần ứng dụng và database của bạn hoạt động tốt để Nginx phục vụ các phản hồi của client không phải là thông báo lỗi.

Do sự phổ biến và thành công của nó, ta sẽ triển khai ứng dụng của bạn chạy sau Nginx để hưởng lợi từ các tính năng mạnh mẽ của nó.

Để tìm hiểu thêm về Nginx, bạn có thể truy cập trang web chính thức của nó tại nginx.com .

Chuẩn bị Server Triển khai


Trong phần này, ta sẽ thực hiện các bước sau để có được một server vững chắc, sẵn sàng phục vụ ứng dụng của bạn.

  • Cập nhật hệ điều hành

  • Nhận các công cụ cơ bản cần thiết để triển khai

  • Cài đặt Ruby, Rails và thư viện

  • Cài đặt Ứng dụng (tức là Hành khách) và server HTTP (Nginx)

Cập nhật và chuẩn bị hệ điều hành


Để cài đặt Ruby và ứng dụng cần thiết khác (ví dụ: server của ta ), trước tiên ta cần chuẩn bị server CentOS được vận chuyển tối thiểu và trang bị cho nó một số công cụ phát triển mà ta cần trong quá trình này.

Chạy lệnh sau để cập nhật các công cụ mặc định của server dựa trên CentOS của bạn:

yum -y update  # This command will update all the base applications # that come with CentOS by default. Which are mostly # reserved for use by the operating system.  

Cài đặt gói chứa các công cụ phát triển bằng cách chạy lệnh sau:

yum groupinstall -y 'development tools'  # With more recent versions of CentOS, such as 6.5 in our case, # you can simply run: # yum groupinstall -y development # instead.  # This bundle of applications contains various tools # Such as: gcc, make, automake, binutils, git etc. 

Một số gói ta cần cho hướng dẫn này (ví dụ: libyaml-devel, nginx, v.v.) không được tìm thấy trong repository lưu trữ CentOS chính thức. Để đơn giản hóa mọi thứ và không phải đối phó với việc cài đặt chúng theo cách thủ công, ta sẽ thêm repository EPEL để YUM và các trình quản lý gói khác sử dụng.

# Enable EPEL Repository sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'  # Update everything, once more. yum -y update 

Cuối cùng, để Passenger làm việc với Nginx, mà ta sẽ cài đặt trong các phần tiếp theo, ta cần thư viện curl-devel và editor nano. Ngoài ra đối với Rails, ta cần sqlite-devel .

Để cài đặt curl-devel và nano, hãy chạy như sau:

yum install -y curl-devel nano sqlite-devel libyaml-devel 

Cài đặt Môi trường Ruby và Rails


Lưu ý: Phần này là phần tóm tắt của bài viết dành riêng của ta Cách cài đặt Ruby 2.1.0 trên CentOS 6.5 .

Ta sẽ sử dụng Trình quản lý version Ruby (RVM) để download và cài đặt trình thông dịch Ruby (hoặc “hồng ngọc”, được gọi là RVM).

Chạy hai lệnh sau để cài đặt RVM và tạo môi trường hệ thống cho Ruby:

curl -L get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh 

Cuối cùng, để hoàn tất quá trình cài đặt Ruby trên hệ thống của ta , hãy tải RVM để download và cài đặt version Ruby 2.1.0:

rvm reload rvm install 2.1.0 

Sau Ruby, ta có thể sử dụng trình quản lý gói RubyGems để giúp ta có được phần còn lại của các công cụ dựa trên Ruby, chẳng hạn như khung công tác Rails.

Vì Rails trước hết cần một trình thông dịch JavaScript để hoạt động, ta cũng cần cài đặt Node.js. Vì mục đích này, ta sẽ sử dụng trình quản lý gói hệ thống mặc định YUM.

Chạy phần sau để download và cài đặt nodejs bằng yum:

yum install -y nodejs 

Thực thi lệnh sau bằng cách sử dụng gem của RubyGems để download và cài đặt rails :

gem install bundler rails 

Download và cài đặt ứng dụng server


Lưu ý: Nếu VPS của bạn có ít hơn 1 GB RAM, bạn cần thực hiện quy trình đơn giản dưới đây để chuẩn bị một không gian đĩa SWAP được sử dụng làm nơi chứa dữ liệu tạm thời (thay thế RAM). Vì server DigitalOcean đi kèm với đĩa SSD nhanh, điều này không tạo thành một vấn đề trong khi thực hiện các việc cài đặt ứng dụng server .

# Create a 1024 MB SWAP space sudo dd if=/dev/zero of=/swap bs=1M count=1024 sudo mkswap /swap sudo swapon /swap 

Hành khách Phusion


Trình quản lý gói mặc định của Red Hat Linux là RPM (Trình quản lý gói RPM) gửi các ứng dụng có trong file .rpm . Thật không may, trong trường hợp của Passenger, chúng đã khá lỗi thời. Do đó, ta sẽ sử dụng RubyGem, , để download và cài đặt version mới nhất hiện có của Passenger - phiên bản 4 .

Sử dụng lệnh dưới đây để tải về và cài đặt hành khách một cách đơn giản:

gem install passenger  # This command will fetch Passenger v4.0(.35+) for you. 

Để kiểm tra Hành khách được download và cài đặt chính xác, hãy thử chạy passenger .

Bạn sẽ thấy kết quả tương tự như bên dưới:

Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.  Available commands:    passenger start            Start Phusion Passenger Standalone.  .. 

Nginx


Thông thường, để download và cài đặt Nginx, bạn có thể thêm kho EPEL và tải Nginx qua yum. Tuy nhiên, để Nginx làm việc với Passenger, nguồn của nó phải được biên dịch với các module cần thiết. Đừng lo lắng, mặc dù! Hành khách đi kèm với một công cụ tiện dụng để làm cho quá trình đơn giản như thực hiện một lệnh duy nhất.

Chạy phần sau để bắt đầu biên dịch Nginx với module Hành khách root :

passenger-install-nginx-module 

Khi bạn chạy lệnh, nhấn Enter và xác nhận (các) ngôn ngữ lựa chọn của bạn (ví dụ như Ruby, trong trường hợp của ta ). Bạn có thể sử dụng các phím mũi tên và phím cách để chọn Ruby một mình, nếu muốn.

Use <space> to select. If the menu doesn't display correctly, ensure that your terminal supports UTF-8.   ‣ ⬢  Ruby    ⬢  Python    ⬢  Node.js    ⬡  Meteor 

Trong bước tiếp theo, hãy chọn Mục 1:

1. Yes: download, compile and install Nginx for me. (recommended)     The easiest way to get started. A stock Nginx 1.4.4 with Passenger     support, but with no other additional third party modules, will be     installed for you to a directory of your choice. 

Và nhấn Enter để tiếp tục.

Bây giờ, nguồn Nginx sẽ được download , biên dịch và cài đặt với sự hỗ trợ của Passenger.

Lưu ý: Hành động này có thể mất một chút thời gian - có thể lâu hơn những gì người ta mong muốn hoặc mong đợi!

Chuẩn bị ứng dụng để triển khai


Lưu ý: Trong phần này, ta sẽ làm việc với một ứng dụng Ruby On Rails rất đơn giản làm ví dụ. Để triển khai ứng dụng thực tế, bạn nên tải lên codebase của bạn và đảm bảo đã cài đặt tất cả các phần phụ thuộc của nó.

Tạo một ứng dụng mẫu / tải lên mã nguồn của bạn


Hãy bắt đầu với việc tạo một ứng dụng Rails rất cơ bản bên trong folder chính của ta để phục vụ với Passenger và Nginx.

Thực thi lệnh sau để Rails tạo một ứng dụng mới có tên my_app bên trong folder /var/www :

# Create a sample Rails application cd /var mkdir www cd www rails new my_app  # Enter the application directory cd my_app  # Create a sample resource rails generate scaffold Task title:string note:text  # Create a sample database RAILS_ENV=development rake db:migrate 

Để kiểm tra xem ứng dụng của bạn có được đặt chính xác hay không và mọi thứ hoạt động tốt, hãy nhập folder ứng dụng và chạy một server đơn giản với rails s :

# Enter the application directory cd /var/www/my_app  # Run a simple server rails s  # You should now be able to access it by # visiting: http://[your server's IP]:3000/tasks  # In order to terminate the server process, # Press CTRL+C 

Lưu ý: Để triển khai thực tế, khi bạn muốn tải cơ sở mã của bạn lên server , bạn có thể sử dụng SFTP hoặc một công cụ đồ họa [] như FileZilla] để truyền và quản lý các file từ xa một cách an toàn.

Tạo tập lệnh quản lý Nginx


Sau khi biên dịch Nginx, để điều khiển nó một cách dễ dàng, ta cần tạo một script quản lý đơn giản.

Chạy các lệnh sau để tạo tập lệnh:

nano /etc/rc.d/init.d/nginx 

Copy paste các nội dung dưới đây:

#!/bin/sh . /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING" = "no" ] && exit 0  nginx="/opt/nginx/sbin/nginx" prog=$(basename $nginx)  NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"  lockfile=/var/lock/subsys/nginx  start() {     [ -x $nginx ] || exit 5     [ -f $NGINX_CONF_FILE ] || exit 6     echo -n $"Starting $prog: "     daemon $nginx -c $NGINX_CONF_FILE     retval=$?     echo     [ $retval -eq 0 ] && touch $lockfile     return $retval }  stop() {     echo -n $"Stopping $prog: "     killproc $prog -QUIT     retval=$?     echo     [ $retval -eq 0 ] && rm -f $lockfile     return $retval }  restart() {     configtest || return $?     stop     start }  reload() {     configtest || return $?     echo -n $”Reloading $prog: ”     killproc $nginx -HUP     RETVAL=$?     echo }  force_reload() {     restart }  configtest() {     $nginx -t -c $NGINX_CONF_FILE }  rh_status() {     status $prog }  rh_status_q() {     rh_status >/dev/null 2>&1 }  case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac 

Nhấn CTRL + X và xác nhận với Y để lưu và thoát.

Đặt chế độ của tập lệnh quản lý này là có thể thực thi:

chmod +x /etc/rc.d/init.d/nginx 

Cấu hình Nginx


Trong bước cuối cùng của việc cấu hình server , ta cần tạo một khối server Nginx, tạm dịch là các server ảo của Apache.

Như bạn có thể nhớ đã thấy trong quá trình cài đặt Nginx của Passenger, quy trình này bao gồm việc thêm một khối mã vào file cấu hình nginx.conf của Nginx. Theo mặc định, trừ khi bạn nêu cách khác, bạn có thể tìm thấy file này trong /opt/nginx/conf/nginx.conf .

Nhập lệnh sau để mở file cấu hình này và chỉnh sửa nó bằng editor nano:

nano /opt/nginx/conf/nginx.conf 

Như là bước đầu tiên, tìm ra http { nút và thêm những điều sau đây ngay sau khi passenger_rootpassenger_ruby chỉ thị:

# Only for development purposes. # For production environment, set it accordingly (i.e. production) # Remove this line when you upload an actual application. # For * TESTING * purposes only. passenger_app_env development; 

Cuộn xuống file và tìm server { .. Comment vị trí mặc định, tức là:

..  #    location / { #            root   html; #            index  index.html index.htm; #        }  .. 

Và xác định root ứng dụng mặc định của bạn:

root /var/www/my_app/public; passenger_enabled on; 

Nhấn CTRL + X và xác nhận với Y để lưu và thoát.

Chạy phần sau để reload Nginx với cấu hình ứng dụng mới:

/etc/init.d/nginx restart 

Để kiểm tra trạng thái của Nginx, bạn có thể sử dụng:

/etc/init.d/nginx status 

Để kiểm tra ứng dụng của bạn (và ứng dụng mẫu của ta ), bạn có thể truy cập:

http://[Your server's IP addr]/tasks  # Listing tasks  # Title    Note   # New Task 

Lưu ý: Để tìm hiểu thêm về Nginx, vui lòng tham khảo Cách cấu hình web server Nginx trên VPS .

Đọc thêm


Bức firewall


Cài đặt firewall bằng Bảng IP

Bảo mật SSH


Cách bảo vệ SSH bằng fail2ban trên Ubuntu
Cách bảo vệ SSH bằng fail2ban trên CentOS 6

Tạo cảnh báo


Cách gửi cảnh báo qua e-mail trên VPS CentOS để giám sát hệ thống

Theo dõi và xem log truy cập server hàng ngày


Cách cài đặt và sử dụng Trình phân tích và báo cáo log Logwatch

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan

Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
2014-01-29
Cách thêm module ngx_pagespeed vào Nginx trong Debian Wheezy
2014-01-15
Cách cấu hình cài đặt trang web WordPress đơn và nhiều trang với Nginx
2013-11-26
Cách triển khai ứng dụng Node.js bằng Systemd và Nginx
2013-11-26
Cách thiết lập server block Nginx trên Debian 7
2013-10-30
Cách thiết lập FastCGI Caching với Nginx trên VPS của bạn
2013-10-29
Cách phân phát nhiều blog ma trên một VPS bằng cách sử dụng server block Nginx
2013-10-21
Cách cài đặt Drupal với Nginx trên VPS Ubuntu 13.04
2013-10-16
Cách cài đặt TTRSS với Nginx cho Debian 7 trên VPS
2013-10-07
Cách biên dịch Nginx từ Nguồn trên VPS CentOS 6.4 x64
2013-09-23