Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
Server ứng dụng được thiết kế đơn giản có thể giúp bạn cài đặt và chạy chỉ trong vài phút khi bạn triển khai ứng dụng web dựa trên Rails của bạn . Tuy nhiên, nếu bạn muốn kiểm soát nhiều hơn việc cài đặt server của bạn hoặc muốn thử một cái gì đó mới linh hoạt hơn, thì việc sử dụng một group các thành phần có thể giúp bạn đạt được mục tiêu của bạn - cho dù đó là việc triển khai trong tương lai hay cần giới thiệu các yếu tố của bên thứ ba như server bộ nhớ đệm.Trong bài viết DigitalOcean này, ta sẽ xem xét cách lắp ráp cài đặt triển khai nhiều lớp để lưu trữ các ứng dụng web Ruby dựa trên Rails. Đối với sự sắp xếp này, ta sẽ sử dụng server ứng dụng Unicorn cực kỳ mạnh mẽ, linh hoạt và cực kỳ thành công chạy sau Nginx. Mặc dù ta sẽ xây dựng cấu trúc này trên một server duy nhất cho mục đích demo , nhưng bạn có thể dễ dàng sử dụng nhiều server để phân tán mọi thứ và mở rộng quy mô một cách dễ dàng - theo cả chiều ngang và chiều dọc!
Bảng chú giải
1. Triển khai ứng dụng web, server và role của chúng
- Server ứng dụng Unicorn
- Server HTTP Nginx chạy như một Reverse Proxy phía trước
2. Chuẩn bị Server Triển khai
- Cập nhật và chuẩn bị hệ điều hành
- Cài đặt Môi trường Ruby và Rails
- Cài đặt Nginx
- Cài đặt Unicorn
3. Chuẩn bị ứng dụng Rails để triển khai
- Tạo một ứng dụng mẫu
- Tải lên mã nguồn của bạn
4. Cấu hình server
- con kỳ lân
- Nginx
- Quản lý Server
5. Đọ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, thường có vô số ứng dụng tham gia, được cài đặt trong các lớp và hoạt động với nhau. Kiểu cài đặt triển khai trong thế giới thực này rất khác với việc sử dụng một server phát triển đơn lẻ, được thiết kế để chỉ sử dụng cho mục đích thử nghiệm vì chúng không thể hoạt động dưới tải lượng truy cập trang web thực tế do thiếu chức năng và tính năng.
Nói về các tính năng, cần lưu ý có một số server phổ biến để lựa chọn với mỗi server cung cấp chức năng khác nhau: một số tập trung vào sự đơn giản, một số tốc độ và một số ít mọi thứ có khả năng cấu hình các tùy chọn để phù hợp với nhu cầu production phức tạp.
Trong bài viết này, lựa chọn server ứng dụng của ta là Unicorn. Unicorn là một server ứng dụng đáng chú ý có chứa ứng dụng Rails của bạn để xử lý các yêu cầu đến, tốt nhất là sau khi chúng được lọc và gửi bởi một server HTTP front-end như Nginx.
Mặt khác, server Nginx HTTP được thiết kế từ đầu để hoạt động như một web server đa năng, mặt trước. 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 đến Unicorn để ứng dụng web xử lý và trả lại phản hồi.
Lưu ý: Để tìm hiểu về các server ứng dụng web Ruby khác nhau và hiểu “Rack” là gì, hãy xem bài viết So sánh các Server Web (Rack) dành cho Ứng dụng Web Ruby của ta .
Server ứng dụng Unicorn
Unicorn là một server ứng dụng web rất trưởng thành cho các ứng dụng web dựa trên Ruby / Rack. Nó có đầy đủ tính năng, nhưng nó phủ nhận bởi thiết kế cố gắng làm mọi thứ. Hiệu trưởng của Unicorn đang làm những gì cần phải được thực hiện bởi một server ứng dụng web và giao các trách nhiệm còn lại.
Quy trình tổng thể của Unicorn tạo ra các công nhân , theo yêu cầu của bạn, để phục vụ các yêu cầu. Quá trình này cũng giám sát công nhân để ngăn chặn bộ nhớ và xử lý các vấn đề đáng kinh ngạc liên quan. Điều này nghĩa là đối với administrator hệ thống là nó sẽ giết chết một quy trình, ví dụ, nếu mất quá nhiều thời gian để hoàn thành một tác vụ hoặc sự cố bộ nhớ xảy ra.
Như đã đề cập ở trên, một trong những lĩnh vực mà Unicorn giao nhiệm vụ là sử dụng hệ điều hành để cân bằng tải. Điều này cho phép các yêu cầu không chồng chất lên các công nhân bận rộn được sinh ra.
Server HTTP Nginx chạy như một Reverse Proxy phía trước
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 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.
Để 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ậ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à Unicorn) 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ụ như 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 cần thiết trong quá trình thực hiện.
Chạy lệnh sau để cập nhật các công cụ mặc định của CentOS VPS 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 cho trình quản lý gói YUM để 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, ta cần lấy curl-devel
và một số công cụ và thư viện khác cho hướng dẫn này (ví dụ: Rails cần sqlite-devel).
Để cài đặt chúng, 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.
Chạy hai lệnh sau để cài đặt RVM và tạo môi trường hệ thống cho Ruby:
gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 \curl -sSL https://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
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 hiện lệnh sau để download và cài đặt rails
bằng gem
:
gem install bundler rails
Cài đặt Nginx
Vì ta đã bật repository EPEL, nên có thể tải Nginx bằng cách sử dụng yum.
Chạy phần sau để download và cài đặt Nginx bằng yum
:
yum install -y nginx
Lưu ý: Ta sẽ cấu hình công cụ này trong các phần sau.
Cài đặt Unicorn
Có một số cách để dễ dàng download Unicorn. Vì nó là một phụ thuộc liên quan đến ứng dụng, cách hợp lý nhất là sử dụng RubyGems.
Chạy phần sau để download và cài đặt Unicorn bằng gem
:
gem install unicorn
Lưu ý: Ta sẽ xem cách làm việc với công cụ này trong các phần tiếp theo.
Chuẩn bị ứng dụng Rails để 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ức là bundle
).
Tạo một ứng dụng mẫu
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 Unicorn.
Thực thi lệnh sau để Rails tạo một ứng dụng mới có tên là “my_app”:
# 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 RAILS_ENV=production rake db:migrate # Create a directory to hold the PID files mkdir pids
Để 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
Tải lên mã nguồn của bạn
Đối với việc triển khai thực tế, tất nhiên, bạn cần tải cơ sở mã của bạn lên server . Với mục đích này, bạn có thể sử dụng SFTP hoặc một công cụ đồ họa, chẳng hạn như FileZilla, để truyền và quản lý các file từ xa một cách an toàn. Tương tự như vậy, bạn có thể sử dụng Git và một repository trung tâm như Github để download và cài đặt mã của bạn .
Để tìm hiểu về cách làm việc với SFTP, hãy xem bài viết: Cách sử dụng SFTP .
Để tìm hiểu về FileZilla, hãy xem bài viết về chủ đề: Cách sử dụng FileZilla .
Cấu hình server
con kỳ lân
Unicorn có thể được cấu hình theo một số cách. Đối với hướng dẫn này, tập trung vào các yếu tố chính, ta sẽ tạo một file từ đầu sẽ được Unicorn sử dụng khi bắt đầu quy trình daemon của server ứng dụng.
Mở tài liệu unicorn.rb
trống, tài liệu này sẽ được lưu trong folder config/
:
nano config/unicorn.rb
Đặt khối mã bên dưới, sửa đổi nó nếu cần:
# Set the working application directory # working_directory "/path/to/your/app" working_directory "/var/www/my_app" # Unicorn PID file location # pid "/path/to/pids/unicorn.pid" pid "/var/www/my_app/pids/unicorn.pid" # Path to logs # stderr_path "/path/to/log/unicorn.log" # stdout_path "/path/to/log/unicorn.log" stderr_path "/var/www/my_app/log/unicorn.log" stdout_path "/var/www/my_app/log/unicorn.log" # Unicorn socket listen "/tmp/unicorn.[app name].sock" listen "/tmp/unicorn.myapp.sock" # Number of processes # worker_processes 4 worker_processes 2 # Time-out timeout 30
Lưu và thoát bằng cách nhấn CTRL+X
và xác nhận với Y
Lưu ý: Để đơn giản kiểm tra ứng dụng của bạn với Unicorn, bạn có thể chạy unicorn_rails
bên trong folder ứng dụng.
Nginx
Tiếp theo, ta cần cho Nginx biết cách nói chuyện với Unicorn. Với mục đích này, ở cấp độ này chỉ cần chỉnh sửa file cấu hình mặc định: default.conf
và để nginx.conf
như đã cung cấp - file này đã được đặt để bao gồm các cấu hình mặc định.
nano /etc/nginx/conf.d/default.conf
Thay thế nội dung file bằng những nội dung từ bên dưới, sửa đổi các bit cần thiết để phù hợp với nhu cầu của bạn:
upstream app { # Path to Unicorn SOCK file, as defined previously server unix:/tmp/unicorn.myapp.sock fail_timeout=0; } server { listen 80; server_name localhost; # Application root, as defined previously root /root/my_app/public; try_files $uri/index.html $uri @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; }
Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.
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 .
Quản lý Server
Sau khi ta hoàn tất việc cấu hình cả hai server , đã đến lúc trực tuyến!
Hãy khởi động Unicorn và chạy nó dưới dạng daemon bằng cách sử dụng file cấu hình:
# Make sure that you are inside the application directory # i.e. /my_app unicorn_rails -c config/unicorn.rb -D # You can set the environment by chaining -E flag # i.e. unicorn_rails .. .. .. -E [env. name]
Tiếp theo, ta đã sẵn sàng reload và khởi động lại Nginx:
service nginx restart
Và đó là nó! Đến đây bạn có thể kiểm tra việc triển khai của bạn bằng cách truy cập địa chỉ IP của server của bạn (hoặc domain được liên kết với nó).
http://[Your server's IP addr]/tasks # Listing tasks # Title Note # New Task
Đọc thêm
Bức firewall :
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à theo dõi 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
Tối ưu hóa Công nhân Unicorn:
Cách tối ưu hóa Unicorn worker trong ứng dụng Ruby on Rails
<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>
Các tin liên quan
Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.52014-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