Deploy Rails Application trên Amazon (EC2) - Part 1
Bài đăng này đã không được cập nhật trong 6 năm
Giới thiệu
Mình đang tìm hiểu về deploy trên EC2 và config Unicorn, Nginx, mySql. Vì vậy bài viết đầu tiên trong loạt bài này mình xin được giới thiệu về dịch vụ AWS, và deploy ứng dụng rails trên AWS
Amazon EC2 là gì?
Theo định nghĩa trên trang chủ của amazon
Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides secure, resizable compute capacity in the cloud. It is designed to make web-scale cloud computing easier for developers.
Dễ hiểu thì EC 2 viết tắt bởi Elastic Cloud nó cho phép người dùng có thể tạo và cấu hình 1 server. Khi có nhu cầu người dùng có thể dễ dàng scale công năng của server một cách dễ dàng.
Đăng ký EC2
Bạn phải có 1 tài khoản AWS lưu ý để đăng ký tài khoản và sử dụng dịch vụ EC2 bạn cần phải có 1 thẻ thanh toán quốc tế.
-
Đăng nhập vào EC2 console page https://us-west-2.console.aws.amazon.com/console/home?region=us-west-2
-
tìm và chọn dich vụ EC2
-
click button launch intance để tạo 1 intance (để bắt đầu sử dụng dịch vụ EC2 và chạy 1 vitrual server)
-
Chọn Amazon Machine Image (AMI)
ở đây mình chọn Ubutu server 16.4 LTS
-
Cấu hình phần cứng cho Intance ở đây mình chọn
t2.micro
vì cấu hình của nó ok (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only) và còn miễn phí 1 năm nữa. chọn t2.micro và clickNext:Configure Instance Details
-
Bước này cứ để mặc định thôi và click
Next: Add Storage
-
Sử dụng cấu hình default là ổn, tiếp tục và click
Next: Add Tags
-
Đặt tên cho Intance và click
Next: Configure Security Group
-
Click Add Rule và chọn type là HTTP, config thế này để request từ bên ngoài internet có thể tới được Nginx server. Rồi click
Review And Launch
-
Kiểm tra lại config và click launch.
-
Tạo key và Click
Launch Instance
Nếu bạn chưa có thì chọncreate a new key pair
và đặt tênkey pair name
xong download key pair về. -
Chờ 1 chút bạn sẽ thấy Instance đang chạy. Vậy là 12 bước để bạn đăng ký dịch vụ ec2 và cấu hình xong 1 con instance(VPS)
Connect tới VPS của mình bằng ssh
Việc đăng nhập bằng ssh sẽ bảo mật hơn là mật khẩu.
-
Click Connect : AWS hướng dẫn mình các connect tới VPS bằng ssh
-
Ssh vào server
ssh -i "MinhDT-Key.pem" ubuntu@ec2-34-217-95-70.us-west-2.compute.amazonaws.com
Như vậy là mình đã connect thành công vs VPS
-
Tạo 1 tài khoản khác với quyền sudo Như ta đã biết việc sử dụng tài khoản
non-root
là cần thiết vì tài khoản này sẽ bị giới hạn phạm vi hoạt động, muốn huỷ hoại server mình thì chỉ gói gọn trong phạm vi tài khoản đó thôi, nếu muốn lấn quyền thì phải nhập mật khấu cho sudo-
create user non-root
sudo adduser username
-
nhập password và confirm password
-
nhập thông tin của user
ex:
-
set quyền cho user mới tạo
sudo visudo
và add dòng%username ALL=(ALL) ALL
ex:%minhdt ALL=(ALL)ALL
-
login account
su - username
ex :su - minhdt
-
-
ssh user với github (bạn có thể không dùng ssh nhưng như mình nói ở trên password có thể bị đánh cắp chứ mất cặp key thì gần như không thể xảy ra)
- generate key
ssh-keygen
- cat .ssh/id_rsa.pub
- copy output và paste vào https://github.com/settings/keys Như vậy là ta đã ssh user với tài khoản github thành công
- generate key
-
Note: Như bạn thấy ở mục 2 ssh vào server
ssh -i "MinhDT-Key.pem" ubuntu@ec2-34-217-95-70.us-west-2.compute.amazonaws.com
nó khá là dài và khó nhớ vì vậy các bạn có thể config sau đó là cấu hình 1 alias tương ứng cho ssh:- `vim ~/.ssh/config
- add vào file
Host alias-name HostName xx.yy.zz.tt User user_name Port xxx IdentityFile path/to/ssh/file
ex:
Host rails-server HostName ec2-34-217-95-70.us-west-2.compute.amazonaws.com User ubuntu Port 22 IdentityFile ~/.ssh/MinhDT-key.pem
- sau đó chỉ việc gõ
ssh alias-name
ex :ssh rails-server
Cài đặt mỗi trường trên EC2
Installing Ruby
Mình sử dụng rbenv để install ruby
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs yarn
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
rbenv install 2.5.0
rbenv global 2.5.0
ruby -v
Installing Rails
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
gem install rails -v 5.1.4
Installing MySql
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
Run Rails Server trên EC2
Sau khi cài đặt xong việc chạy rails server khác là đơn giản:
-
Bạn tạo 1 application
-
Push code lên github
-
Trên EC2 bạn clone app
-
RAILS_ENV=production rake assets:precompile (precompile assets của app để image, css, js đc load)
-
RAILS_ENV=production rails server
-
mở cổng 3000 cho server:
- trong mục
security groups
clicklaunch-wizard-6
- chỉnh sửa mở cổng 3000 như trong hình
- trong mục
-
http://IPv4_Public_IP:3000 (IPv4_Public_IP sẽ được lấy trên EC2 console) Vậy là đã xong ^^
Kết luận
Phần này mình xin đề cập tới việc giới thiệu ec2 và deploy lên ec2. Bài sau mình sẽ nói về unicorn, nginx,...
All rights reserved