Thứ năm, 20/02/2014 | 00:00 GMT+7

Cách tự động hóa triển khai ứng dụng Ruby On Rails bằng Capistrano

Nếu bạn vẫn chưa chán với việc lặp đi lặp lại các nhiệm vụ nhàm chán giống nhau để cập nhật các server ứng dụng của bạn để đưa dự án của bạn trực tuyến, thì có lẽ cuối cùng bạn sẽ cảm thấy niềm vui khi phát triển dự án của bạn có xu hướng thành công khi nói đến những điều nhàm chán quản trị hệ thống (ví dụ: tải lên cơ sở mã của bạn, sửa đổi cấu hình, thực thi lệnh lặp đi lặp lại, v.v.)


Nhưng đừng sợ! Capistrano, công cụ tự động hóa tác vụ, sẵn sàng trợ giúp.

Trong bài viết DigitalOcean này, ta sẽ tạo một cài đặt server vững chắc, chạy version mới nhất của CentOS để lưu trữ các ứng dụng Ruby-on-Rails bằng Nginx và Passenger. Ta sẽ tiếp tục tìm hiểu cách tự động hóa quá trình triển khai - và cập nhật - bằng cách sử dụng công cụ tự động hóa dựa trên Ruby Capistrano.

Lưu ý: Bài viết này dựa trên kiến thức từ bài viết Capistrano trước đây của ta : Tự động triển khai với Capistrano: Bắt đầu . Để có được kiến thức tốt về công cụ này, bạn nên đọc kỹ trước khi tiếp tục phần này. Tương tự như vậy, nếu bạn muốn tìm hiểu thêm về cách chuẩn bị một server mới cho việc triển khai ứng dụng dựa trên Rails với Passenger (và Nginx), hãy xem bài viết Cách triển khai ứng dụng Rails bằng Passenger With Nginx .

Lưu ý: Capistrano dựa vào Git để triển khai. Để tìm hiểu thêm, hãy xem xét đọc các bài báo cộng đồng DigitalOcean về chủ đề này bằng cách nhấp vào đây .

Bảng chú giải


1. 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 HTTP
  4. Tạo tập lệnh quản lý Nginx
  5. Cấu hình Nginx để triển khai ứng dụng
  6. Download và cài đặt Capistrano
  7. Tạo user hệ thống để triển khai

2. Chuẩn bị ứng dụng Rails để triển khai Capistrano dựa trên Git


  1. Tạo một ứng dụng Ruby-On-Rails cơ bản
  2. Tạo repository Git

3. Làm việc với Capistrano để tự động hóa triển khai


  1. Cài đặt Capistrano Inside The Project Directory
  2. Làm việc với config/deploy.rb bên trong Project Directory
  3. Làm việc với config/deploy/production.rb Inside The Project Directory
  4. Triển khai tới server production

Chuẩn bị Server Triển khai


Lưu ý: Để hiểu rõ hơn về phần dưới đây, có thể được coi là một bản tóm tắt dài dòng, hãy xem toàn bộ bài viết về chủ đề: Cách triển khai ứng dụng Rails bằng Passenger With Nginx .

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


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 

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' 

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.

Chạy phần sau để thêm kho EPEL:

sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'  yum -y update 

Cuối cùng, để cài đặt một số thư viện và công cụ bổ sung, hãy chạy lệ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 .

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 rvm reload rvm install 2.1.0 

Vì Rails cần một trình thông dịch JavaScript, ta cũng cần cài đặt Node.js.

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 HTTP


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 

Nginx


Lưu ý: Thông thường, để download và cài đặt Nginx, bạn có thể thêm repository EPEL (như ta đã làm) và tải Nginx qua yum . Tuy nhiên, để Nginx hoạt động với Passenger, nguồn của nó phải được biên dịch với các module cần thiế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 Item 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!

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 để triển khai ứng dụng


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 quy định khác, file này có thể được tìm thấ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. # 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:

# Set the folder where you will be deploying your application. # We are using: /home/deployer/apps/my_app root              /home/deployer/apps/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:

# !! Remember to create an Nginx management script #    by following the main Rails deployment article for CentOS #    linked at the beginning of this section.  /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 

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 .

Download và cài đặt Capistrano


Một khi ta đã sẵn sàng hệ thống của bạn , việc tải version mới nhất của Capistrano nhờ RubyGems thật dễ dàng.

Bạn chỉ cần sử dụng những cách sau để tải Capistrano version 3:

gem install capistrano 

Tạo user hệ thống để triển khai


Trong bước này, ta sẽ tạo một user hệ thống CentOS để thực hiện các hành động triển khai. Đây sẽ là user cho Capistrano sử dụng.

Lưu ý: Để giữ mọi thứ cơ bản, ta sẽ tạo một user deployer với các quyền cần thiết. Để cài đặt hoàn chỉnh hơn, hãy xem xét sử dụng ví dụ group từ hướng dẫn giới thiệu Capistrano.

Tạo một trình deployer user hệ thống mới:

adduser deployer 

Cài đặt password của người deployer :

passwd deployer  # Enter a password # Confirm the password 

Chỉnh sửa /etc/sudoers bằng editor nano :

nano /etc/sudoers 

Cuộn xuống file và tìm nơi root được xác định:

..  ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root    ALL=(ALL)   ALL  .. 

Nối phần sau ngay sau root ALL=(ALL) ALL :

deployer ALL=(ALL) ALL 

Phần này của file /etc/sudoers bây giờ sẽ trông giống như sau:

..  ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root     ALL=(ALL)  ALL deployer ALL=(ALL) ALL  .. 

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

Chuẩn bị ứng dụng Rails để triển khai Capistrano dựa trên Git


Khi hệ thống của ta đã sẵn sàng, với tất cả các ứng dụng cần thiết được cài đặt và hoạt động chính xác, ta có thể chuyển sang tạo một ứng dụng Rails mẫu để sử dụng làm mẫu.

Trong giai đoạn thứ hai, ta sẽ tạo một repository Git và đẩy cơ sở mã đến một vị trí trung tâm, có thể truy cập tại Github để Capistrano sử dụng cho việc triển khai.

Lưu ý: Ở đây, ta đang tạo một ứng dụng mẫu. Đối với các triển khai thực tế, bạn nên tự mình thực hiện các hành động này, sau khi đảm bảo mọi thứ đã được backup - đề phòng! Ngoài ra, xin lưu ý bạn cần chạy Capistrano từ một vị trí khác với server nơi ứng dụng cần được triển khai.

Tạo một ứng dụng Ruby-On-Rails cơ bản


Lưu ý: Bước dưới đây là để tạo một ứng dụng Rails thay thế để dùng thử Capistrano.

Việc cài đặt Ruby và Rails đã khiến ta chỉ cần một lệnh duy nhất để bắt đầu.

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

# Create a sample Rails application 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 thông qua rails s :

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

Tạo repository Git


Lưu ý: Để tìm hiểu thêm về cách làm việc với Git, hãy xem hướng dẫn Cách sử dụng Git hiệu quả tại các trang cộng đồng DigitalOcean.

Lưu ý: Để theo dõi phần này, bạn cần có account Github. Ngoài ra, bạn có thể cài đặt một server để lưu trữ kho Git của bạn sau này bài viết DigitalOcean về đề tài này. Nếu bạn chọn làm như vậy, hãy đảm bảo sử dụng URL có liên quan trên các file triển khai.

Ta sẽ sử dụng các hướng dẫn mẫu do Github cung cấp để tạo một repository nguồn.

Thực thi các lệnh sau, tự giải thích bên trong folder my_app để khởi tạo một repository :

# !! These commands are to be executed on #    your development machine, from where you will #    deploy to your server. #    Instructions might vary slightly depending on #    your choice of operating system. # #    Make sure to set correct paths for application #    Otherwise Nginx might not be able to locate it.  # Initiate the repository git init  # Add all the files to the repository git add .  # Commit the changes git commit -m "first commit"  # Add your Github repository link  # Example: git remote add origin git@github.com:[user name]/[proj. name].git git remote add origin git@github.com:user123/my_app.git  # Create an RSA/SSH key # Follow the on-screen instructions ssh-keygen -t rsa  # View the contents of the key and add it to your Github # by copy-and-pasting from the current remote session by # visiting: https://github.com/settings/ssh # To learn more about the process, # visit: https://help.github.com/articles/generating-ssh-keys cat /root/.ssh/id_rsa.pub  # Set your Github information # Username: # Usage: git config --global user.name "[your username]" git config --global user.name "user123"  # Email: # Usage: git config --global user.email "[your email]" git config --global user.email "user123@domain.tld"  # Push the project's source code to your Github account git push -u origin master 

Làm việc với Capistrano để tự động hóa triển khai


Như bạn sẽ nhớ từ bài viết Capistrano đầu tiên của ta , cách để bắt đầu sử dụng thư viện là cài đặt nó bên trong folder dự án. Trong phần này, ta sẽ xem cách thực hiện điều đó, tiếp theo là tạo các file cần thiết để đặt server .

Cài đặt Capistrano Inside The Project Directory


Một bước đơn giản khác trong bài viết của ta là cài đặt các file Capistrano. Lệnh dưới đây sẽ tạo một số folder và file được công cụ sử dụng để triển khai.

Chạy phần sau để bắt đầu (tức là cài đặt ) file Capistrano:

cap install  # mkdir -p config/deploy # create config/deploy.rb # create config/deploy/staging.rb # create config/deploy/production.rb # mkdir -p lib/capistrano/tasks # Capified 

Làm việc với config / deploy.rb bên trong Project Directory


Tệp deploy.rb chứa các đối số và cài đặt liên quan đến (các) server triển khai. Tại đây, ta sẽ cho Capistrano biết (các) server mà ta muốn kết nối và triển khai cũng như cách thức.

Lưu ý: Khi chỉnh sửa file (hoặc xác cấu hình ), bạn có thể comment chúng hoặc thêm các dòng mới. Đảm bảo không để một số cài đặt mẫu overrides lên những cài đặt bạn đang thêm vào.

Chạy các bước sau để chỉnh sửa file bằng editor văn bản nano :

nano config/deploy.rb 

Thêm khối mã bên dưới, sửa đổi nó cho phù hợp với cài đặt của bạn :

# Define the name of the application set :application, 'my_app'  # Define where can Capistrano access the source repository # set :repo_url, 'https://github.com/[user name]/[application name].git' set :scm, :git set :repo_url, 'https://github.com/user123/my_app.git'  # Define where to put your application code set :deploy_to, "/home/deployer/apps/my_app"  set :pty, true  set :format, :pretty  # Set the post-deployment instructions here. # Once the deployment is complete, Capistrano # will begin performing them as described. # To learn more about creating tasks, # check out: # http://capistranorb.com/  # namespace: deploy do  #   desc 'Restart application' #   task :restart do #     on roles(:app), in: :sequence, wait: 5 do #       # Your restart mechanism here, for example: #       execute :touch, release_path.join('tmp/restart.txt') #     end #   end  #   after :publishing, :restart  #   after :restart, :clear_cache do #     on roles(:web), in: :groups, limit: 3, wait: 10 do #       # Here we can do anything such as: #       # within release_path do #       #   execute :rake, 'cache:clear' #       # end #     end #   end  # end 

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

Làm việc với config / deploy / production.rb Inside The Project Directory


Lưu ý: Tương tự như deploy.rb , bạn cần thực hiện một số sửa đổi đối với file production.rb . Tốt hơn bạn nên sửa đổi mã thay vì nối thêm khối bên dưới.

Chạy các bước sau để chỉnh sửa file bằng editor văn bản nano :

nano config/deploy/production.rb 

Nhập cài đặt server của bạn, tương tự như bên dưới:

# Define roles, user and IP address of deployment server # role :name, %{[user]@[IP adde.]} role :app, %w{deployer@162.243.74.190} role :web, %w{deployer@162.243.74.190} role :db,  %w{deployer@162.243.74.190}  # Define server(s) server '162.243.74.190', user: 'deployer', roles: %w{web}  # SSH Options # See the example commented out section in the file # for more options. set :ssh_options, {     forward_agent: false,     auth_methods: %w(password),     password: 'user_deployers_password',     user: 'deployer', } 

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

Triển khai tới server production


Khi ta đã hoàn tất các cài đặt, đã đến lúc triển khai.

Chạy mã sau trên máy phát triển của bạn để triển khai tới server production . Như đã định nghĩa trong các file trên, Capistrano sẽ:

  • Kết nối với server triển khai

  • Download nguồn ứng dụng

  • Thực hiện các hành động triển khai (tức là yêu cầu hành khách khởi động lại ứng dụng)

cap production deploy 

Để tìm hiểu thêm về Capistrano và những gì nó có thể làm, hãy xem xét việc đọc [tài liệu Capistrano] (capistranorb.com/documentation).

<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