Implement Load Balancing with Nginx in EC2
Trong bài viết này, tôi sẽ sử dụng Capistrano cho việc deploy tự động. Chúng ta thêm vào Gemfile group :development do gem "capistrano" gem "capistrano-rails" gem "capistrano-rvm" gem "capistrano3-puma" end Sau khi cài đặt các gem liên quan đến Capistrano, ta tạo ra các ...
Trong bài viết này, tôi sẽ sử dụng Capistrano cho việc deploy tự động. Chúng ta thêm vào Gemfile
group :development do gem "capistrano" gem "capistrano-rails" gem "capistrano-rvm" gem "capistrano3-puma" end
Sau khi cài đặt các gem liên quan đến Capistrano, ta tạo ra các file config bằng cách:
bundle exec cap install
Tại file config/deploy.rb ta cần thiết lập các cài đặt chung cho các môi trường, có 2 cài đặt quan trọng là:
- repo_url đây chính là nơi Capistrano lấy code trên Git về và copy vào server mình muốn deploy.
- deploy_to là đường dẫn để copy code vào server.
# config/deploy.rb set :application, "load_balancing" set :repo_url, "git@github.com:NeverSmileK57CLC/load-balancing.git" set :branch, "master" set :deploy_to, "/var/www/html/app" set :local_user, "bachngoc"
Tiếp theo ta cần khai báo linked_files và linked_dirs nơi định nghĩa những file hay directory sẽ giữ nguyên qua các lần deploy.
# config/deploy.rb set :linked_files, fetch(:linked_files, []).push( "config/database.yml", "config/secrets.yml", ) set :linked_dirs, fetch(:linked_dirs, []).push( "log", "tmp/pids", "tmp/cache", )
Đầu tiên ta tạo server VPS, ở đây tôi tạo ra 4 con VPS ...
Tiếp theo, ta cài đặt Ruby, Rails, Nginx... trên các con server này
Config Nginx
Để cài đặt load balancer, ta sẽ cần sử dụng Nginx upstream module, mở file config Nginx ra:
sudo nano /etc/nginx/sites-available/default
Ta cần thêm cài đăt cho load balancer, ta cần upstream module và sau đó reference module đó vào server:
upstream loadbalancing { server 35.164.240.167; server 35.167.212.102; server 35.167.171.130; } server { location / { proxy_pass http://loadbalancing; } }
Restart nginx:
sudo service nginx restart
Deploy
Ta cần tạo các file đã khai báo là shared_files ở phía trên gồm database.yml và secrets.yml ở thư mục shared/config
Tiếp theo ta cần deploy Rails app mà ta vừa tạo lên VPS, ta đã config deploy tự động Capistrano ở phần trên nên ta chỉ cần:
cap production deploy
Sau đó ta thử vào http://35.163.155.2 đề xem kết quả.