Chạy server Ruby on Rails trên AWS sử dụng Unicorn và Nginx (phần 1)
Trong bài trước, tôi đã giới thiệu với các bạn về cách sử dụng miễn phí một số dịch vụ AWS với chế độ FreeTier, chúng ta hãy cùng sử dụng một trong các dịch vụ đó là EC2 để triển khai code Ruby on Rails nhé. Trong bài lần này chúng ta hãy tìm hiểu cách chạy server Ruby on Rails trên EC2 instance. ...
Trong bài trước, tôi đã giới thiệu với các bạn về cách sử dụng miễn phí một số dịch vụ AWS với chế độ FreeTier, chúng ta hãy cùng sử dụng một trong các dịch vụ đó là EC2 để triển khai code Ruby on Rails nhé.
Trong bài lần này chúng ta hãy tìm hiểu cách chạy server Ruby on Rails trên EC2 instance. Trước hết ta cần khởi động một EC2 instance.
Khởi động EC2 Instance
Để khởi động một EC2 instance, nếu bạn có ý định sử dụng chế độ FreeTier thì cần chú ý các thiết lập để không vượt quá giới hạn cho phép.
Bước 1: Hãy chọn vào Service, chọn mục EC2 như trong hình vẽ.
Bước 2: Sau khi bạn chọn, sẽ mở ra EC2 dashboard, hãy chọn Launch Instance
Bước 3: Bạn sẽ chuyển hướng tới màn hình thiết lập Instance EC2. Hãy chọn một loại AMI mà bạn quen sử dụng. Trong bài lần này tôi sẽ dùng Ubuntu.
Bước 4: Tiếp theo hãy chọn loại Instance. Ở đây, tôi chọn t2.micro vì nó miễn phí với chế độ FreeTier.
Bước 5: Bạn có thể bỏ qua bước thiết lập instance, chúng ta có thể sử dụng các thiết lập mặc định của EC2. Chọn Next, ta sẽ tiếp tục thiết lập Storage của Instance. Ở đây ta cũng cần chú ý đến giới hạn dung lượng cho phép của Instance.
Bước 6: Tiếp theo, chúng ta cần thiết lập Security group cho EC2 instance. Security Group cho phép ta thiết lập giới hạn các liên từ service ra ngoài và từ ngoài truy nhập vào Service. Ban đầu để có thể SSH được vào hệ thống, ta chỉ cần để như mặc định là đủ.
Bước 7: Sau khi đã kiểm tra lại các thiết lập, hãy ấn Launch. Một dialog để bạn tạo lập và download key pair sẽ hiện ra. Nếu bạn chưa có key pair nào để access vào instance, hãy tạo một key pair mới (ví dụ đặt tên là test.pem), Download về máy của bạn. Key pair này sẽ được sử dụng để bạn access vào server bằng giao thức SSH. Sau đó hãy ấn Launch Instances để khởi động EC2 Instances.
Truy cập vào EC2 với SSH
SSH vào EC2
Sau khi tạo xong instance EC2, điều tiếp theo bạn muốn làm tất nhiên sẽ là truy cập vào instance đó và cài đặt các package cần thiết để chạy server Rails. Để làm được điều này ta cần biết được Public IP.
Tuy nhiên bạn chưa thể ngay lập tức truy nhập vào DNS này, lúc này bạn sẽ gặp lỗi Permission Denied. Hãy sử dụng private key bạn vừa download lúc nãy (khi launch EC2 instance) để truy nhập. Bạn có thể dùng câu lệnh như sau
ssh -i ~/.Download/test.pem ubuntu@instance_ip
Chắc hẳn lúc này bạn vẫn chưa thể access. Lý do là SSH không chấp nhập để bạn sử dụng một private key mở để access server. Lúc này bạn cần sửa lại các quyền truy nhập vào file test.pem để bảo đảm không ai ngoài bạn có thể xem được nội dung file.
Hãy sử dụng câu lệnh sau:
sudo chown your_user test.pem sudo chmod 400 test.pem
Câu lệnh thứ nhất có tác dụng thay đổi chủ sở hữu của file thành user của bạn (có thể không cần thiết). Còn câu lệnh thứ hai chỉ cho phép chủ sở hữu của file đó có quyền đọc file.
Chúc mừng, bây giờ bạn đã có thể access vào Instance EC2 vừa tạo rồi.
Cài đặt thiết lập
Sau khi đã access được vào Instance EC2, chúng ta tiến hành cài đặt các thiết lập cần thiết.
- Tạo user deploy và cài đặt password
sudo useradd -d /home/deploy -m deploy sudo passwd deploy
Password này sẽ cần thiết khi bạn cài đặt Ruby bằng RVM. Bạn cũng cần thêm user `deploy` vào sudoers. Chạy `sudo visudo` và thêm nội dung sau đây vào.
deploy ALL=(ALL:ALL) ALL
Chúng ta sẽ sử dụng Github để lưu trữ code, do đó user `deploy` sẽ cần phải truy nhập vào repository của Github để tiến hành việc deploy. Ta cần generate một key pair cho user `deploy`
su - deploy
ssh-keygen
Đừng tạo passphrase cho key pair. Copy nội dung của keypair và thiết lập nó thành deploy key trên Github. Cách thiết lập bạn có thể xem ở [đây](https://help.github.com/articles/generating-ssh-keys/#step-4-add-your-ssh-key-to-your-account) Tiếp theo, nếu lần sau bạn muốn access vào instance không cần dùng keypair test.pem mà sử dụng key của chính bạn, bạn chỉ việc copy nội dung public key của bạn (thường nằm ở ~/.ssh/id_rsa.pub) vào trong file ~/.ssh/authorized_keys trên instance.
Cài đặt một số package cần thiết
-
Cài đặt Git
sudo apt-get install git
-
Cài đặt Java Virtual machine (JVM) nếu bạn sử dụng JRuby
sudo apt-get install openjdk-7-jdk
-
Cài đặt RVM và Ruby
Vào user deploy và cài đặt
su - deploy gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -sSL https://get.rvm.io | bash -s stable
Cài đặt xong hãy logout và login lại vào user deploy, sau đó cài đặt Ruby.
rvm install ruby
Như vậy bạn đã cài đặt xong các package cần thiết. Tiếp theo ta hãy cùng tiến hành chạy Rails server.
Chạy Rails server trên EC2
Đã làm được đến đây thì việc chạy server Rails khá đơn giản. Bạn tạo một application mới và thiết lập như bình thường, push code lên Github của bạn và Clone app đó về instance EC2 trong khi bạn đang trong user deploy
Hãy chạy câu lệnh sau:
RAILS_ENV=production rake assets:precompile
Mục đích là để precompile assets của app để các image, CSS và scripts được load.
Đến đây, hãy thử chạy server giống như bạn vẫn làm ở local xem sao, khác ở điểm môi trường ở đây là production.
RAILS_ENV=production rails server
Sau đó mở browser ra gõ địa chỉ public IP của Instance EC2 vào.
http://server_public_IP:3000
Bạn đã thấy gì chưa ? Tôi đoán là chưa. Vì server Rails chạy trên cổng 3000, nếu bạn chưa mở cổng 3000 cho server thì sẽ không access được. Lúc này ta lại quay lại giao diện console EC2 và mở cổng 3000 bằng cách chỉnh lại thiết lập của security group của instance EC2 của bạn.
Hãy thiết lập Inbound của Security Group như sau:
Lúc này cổng 3000 của server đã được mở, bạn đã gần xong rồi. Việc còn lại, hãy thêm option --binding=0.0.0.0.
Thử access lại vào public IP của bạn lần nữa xem. Olala, trang web đã mở ra rồi phải không. Chúc mừng bạn đã config thành công server rails trên AWS.
Lời kết
Đây là một trong những thiết lập đơn giản của AWS tuy nhiên đối với các bạn chưa quen sử dụng thì nó tương đối lằng nhằng, rắc rối. Hi vọng qua bài viết này bạn có thể nắm được cách cài đặt server Ruby trên AWS. Trong bài sau, tôi sẽ nói về cách chạy server bằng Unicorn kết hợp với Nginx và deploy code tự động với gem Capistrano. Chào thân ái và quyết thắng.