Với tinh thần "thử làm cho biết", hôm nay mình sẽ thử tìm hiểu về các bước tạo 1 EC2 và thực hiện deploy 1 ứng dụng rails lên con EC2 này.
Mục đích
- Tạo được 1 con EC2
- Deploy được 1 ứng dụng rails đã viết sẵn trên github.
Chuẩn bị
- 1 tài khoản AWS (chỉ cần loại Free-Tier thôi)
- 1 ứng dụng rails đã chạy ngon lành và được lưu trên github
Phần 1: Tạo AWS EC2
- Sau khi login vào tài khoản AWS, ở thanh điều hướng, lựa chọn phần Services, rồi chọn EC2
- Ở phần Create Instance, click vào buton Launch Instance
- Step 1: Choose an Amazon Machine Image (AMI) -> Ở bước này, cho phép chúng ta lựa chọn các dạng server (có ubuntu, linux, window...)
Mình lựa chọn Ubuntu 18.04 LTS
- Step 2: Choose an Instance Type -> Lựa chọn type của Instance, ở đây mình sẽ lựa chọn type nào nằm trong Free-Tier là được.
- Step 3: Configure Instance Details -> Bước này mình giữ nguyên default và chọn Next
- Step 4: Add Storage -> Next
- Step 5: Add Tags -> Ở bước này, mình add tag với key = Name và Value = Webserver.
- Step 6: Configure Security Group -> Click Review and Launch
- Step 7: Review Instance Launch -> Click Launch
- Step 8: Download keypair -> Đặt tên file cho keypair và click download (file này sẽ dùng để thực hiện ssh vào EC2 này)
- Như vậy là mình đã tạo xong được 1 Instance EC2 (coi như mục đích 1 đã hoàn thành)
- Khi chọn View Instance thì có thể nhìn thấy trạng thái của instance như sau
Phần 2: Thực hiện SSH vào EC2 và chuẩn bị môi trường để deploy Rails app
Phần 1 thực sự rất đơn giản khi chỉ cần thực hiện step by step theo hướng dẫn của AWS.
Tuy nhiên phần 2 có phần rắc rối và phiền hà hơn 1 chút.
- Connect vào EC2 Ở màn hình view instance, click vào button Connect, sẽ có 1 cửa sổ hướng dẫn ssh vào server rất cụ thể
Thực hiện đúng hướng dẫn trên thì khi connect thành công, terminal sẽ nhìn thấy như sau
- Sau khi connect thành công vào server, mình sẽ thực hiện tạo 1 user dùng để deploy. User này cũng sẽ được setting quyền sudo để có thể cài đặt môi trường.
sudo useradd -d /home/deploy -m deploy sudo passwd deploy
- Sau đó thực hiện cấp quyền sudo cho user này bằng cách mở file sudoers.tmp với command
sudo nano /etc/sudoers
và thực hiện add thêm đoạn text %deploy ALL=(ALL) ALL
- Sau khi add quyền sudo cho user deploy thành công, ta chuyển qua user này để thực hiện cài đặt môi trường
sudo su - deploy
- Đầu tiên sẽ thực hiện tạo keypair để có thể clone code từ github
Ở bước này hoàn toàn giống với việc add ssh vào github từ 1 máy local nên có thể tham khảo như hướng dẫn này.
- Tiếp theo sẽ tiến hành cài đặt 1 số package
Cài Git sudo apt-get install git
Cài rvm -> cài ruby -> cài rails Thực hiện theo hướng dẫn này
Sau khi cài xong ruby và rails theo đúng version phù hợp với ứng dụng của mình
- Sau khi đã cài xong ruby và rails thì thực hiện clone source code từ github về
git clone [email protected]:ngodinhnhathoang/alpha-blog.git
- Sau khi clone thành công thì cd vào thư mục ứng dụng
- Từ đây mình có thể thao tác như là ở máy local của mình. Thực hiện cài bundle, migrate data,... (Lúc này nếu ứng dụng báo thiếu cái gì thì cứ cài thêm cái đó)
Phần 3: Khởi chạy server
- Vì server Rails chạy trên cổng 3000 nên trước tiên chúng ta sẽ tiến hành mở cổng này cho server.
Ở màn hình console AWS, chọn vào Security Group của phần NetWork & Security. Sau đó chọn vào tab Inbound và chọn Edit
- Thêm vào rule như hình
- Sau đó thực hiện khởi chạy server như thông thường
rails server
- Truy cập vào web app qua URL: http://3.14.7.134:3000
-> Mục tiêu thứ 2 coi như hoàn thành
Kết luận
Đối với các service của AWS, mình nghĩ ngoài việc đọc lý thuyết khô khan thì việc bắt tay vào thực hành sẽ mang lại cho chúng ta không ít trải nghiệm thú vị.