Deploy Rails Application trên Amazon (EC2) - Part 1
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 Theo định nghĩa trên trang chủ của amazon Amazon Elastic Compute Cloud (Amazon EC2) is a web service ...
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
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.
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à click Next: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ọn create a new key pair và đặt tên key 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)
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
-
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
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
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 click launch-wizard-6
- chỉnh sửa mở cổng 3000 như trong hình
-
http://IPv4_Public_IP:3000 (IPv4_Public_IP sẽ được lấy trên EC2 console) Vậy là đã xong ^^
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,...