[Series AWS Product][ElasticBeanstalk] Triển khai nhanh dự án Rails lên AWS bằng ElasticBeanstalk
Bài đăng này đã không được cập nhật trong 6 năm
Triển khai một ứng dụng Rails có thể là một công việc khó khăn đối với các lập trình viên ít có kinh nghiệm về config server, hay cả đối với các nhà phát triển Rails dày dạn kinh nghiệm đôi lúc còn phải đau đầu vì những lỗi xảy ra trong quá trình config server. Nào là config Nginx, Unicorn, Redis đủ thứ phải làm, bắt đầu từ 1 VPS linux rỗng để xây dựng môi trường chạy Rails không phải là điều dễ dàng.
Nhưng với một product của Amazon có tên gọi là Elastic Beanstalk đã giúp chúng ta giải quyết vấn đề đó.
Vậy Elastic Beantalk là gì?
AWS Elastic Beanstalk
là dịch vụ dễ sử dụng, dùng để triển khai và mở rộng các ứng dụng web và dịch vụ được phát triển trên các máy chủ quen thuộc như Apache, Nginx, Passenger với Java, .NET, PHP, Node.js, Python, Ruby, Go và Docker , và IIS.
Bạn chỉ cần upload project của mình lên và Elastic Beanstalk tự động xử lý việc triển khai, từ việc cung cấp dung lượng, cân bằng tải, tự động mở rộng theo dõi tình trạng ứng dụng. Đồng thời, bạn vẫn giữ toàn quyền kiểm soát các tài nguyên AWS cung cấp cho ứng dụng của bạn và có thể truy cập các tài nguyên cơ bản bất cứ lúc nào.
Ok. Vậy các bạn có thể hình dung phần nào về công dụng và chức năng của Elastic Beanstalk, nó giống như Heroku vậy, nhưng cao cấp hơn.
Chuẩn bị: - 1 tài khoảng AWS - 1 máy tính chạy HDH linux hoặc MacOS. ( Riêng Window cũng có thể sử dụng được nhưng thường phát sinh rất nhiều lỗi )
Install EB CLI
EB CLI là một client command sử dụng để tạo, cấu hình và quản lý môi trường Elastic Beanstalk. EB CLI được phát triển bằng Python và yêu cầu Python phiên bản 2.7, phiên bản 3.4, hoặc mới hơn.
Install Python.
$ sudo apt-get update && sudo apt-get -y upgrade
$ sudo apt-get install python-pip
Install EB CLI
$ pip install awsebcli --upgrade --user
Muốn deploy project Rails thì trước hết phải có project đã nhá
$ rails new YOUR_PROJECT
// Mình sẽ tạo project có tên là word-doc
$ git init
$ git remote add YOUR_REPO
$ git add .
$ git commit -m "first commit"
Create enviroment EB
$ cd word-doc
$ eb init
Sau đó các bạn chọn lần lượt các option
Select a default region
> 1) us-east-1 : US East (N. Virginia)
Select an application to use
> 1)[ Create new Application ]
Enter Application Name
> (default is "word-doc"):
Application rails5app has been created.
> It appears you are using Ruby. Is this correct?
> (y/n): y
Select a platform version.
> 1) Ruby 2.4 (Puma)
Do you want to set up SSH for your instances?
> (y/n): y
> Select a keypair.
> 1) [ Create new KeyPair ]
> (default is 1): 1
Nếu lần đầu các bạn chay eb init nó sẽ bắt các bạn nhập Access Key ID
và Secret Access Key
, các bạn có thể lấy nó ở đây. https://console.aws.amazon.com/iam/home?#/security_credential , click vào Access keys (access key ID and secret access key)
Sau đó các bạn chạy lệnh
$ eb create word-doc
Creating application version archive "app-4117-180129_173006".
Uploading word-doc/app-4117-180129_173006.zip to S3. This may take a while.
Upload Complete.
Environment details for: word-doc
Application name: word-doc
Region: us-west-2
Deployed Version: app-4117-180129_173006
Environment ID: e-cbkaqhbppg
Platform: arn:aws:elasticbeanstalk:us-west-2::platform/Puma with Ruby 2.4 running on 64bit Amazon Linux/2.6.5
Tier: WebServer-Standard-1.0
CNAME: UNKNOWN
Updated: 2018-01-29 10:30:13.952000+00:00
Printing Status:
INFO: createEnvironment is starting.
INFO: Using elasticbeanstalk-us-west-2-617788525353 as Amazon S3 storage bucket for environment data.
INFO: Created security group named: sg-a8aa53d7
INFO: Created load balancer named: awseb-e-c-AWSEBLoa-E91I3NXR0P23
INFO: Created security group named: awseb-e-cbkaqhbppg-stack-AWSEBSecurityGroup-1TT8IAQY4C814
INFO: Created Auto Scaling launch configuration named: awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingLaunchConfiguration-P4KVCW46PQS5
INFO: Created Auto Scaling group named: awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingGroup-YT0HU0XZ7DX
INFO: Waiting for EC2 instances to launch. This may take a few minutes.
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-west-2:617788525353:scalingPolicy:3957c5c9-68f2-44c7-9ba7-d7eae5736a34:autoScalingGroupName/awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingGroup-YT0HU0XZ7DX:policyName/awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingScaleDownPolicy-FD8YFW4EB618
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-west-2:617788525353:scalingPolicy:4f6f9f4a-c4bc-40b8-8a60-92af3b3336da:autoScalingGroupName/awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingGroup-YT0HU0XZ7DX:policyName/awseb-e-cbkaqhbppg-stack-AWSEBAutoScalingScaleUpPolicy-1AKTS4QFWTYCI
INFO: Created CloudWatch alarm named: awseb-e-cbkaqhbppg-stack-AWSEBCloudwatchAlarmLow-ZOSHA45K0MHY
INFO: Created CloudWatch alarm named: awseb-e-cbkaqhbppg-stack-AWSEBCloudwatchAlarmHigh-1060ZYCKYG0BO
INFO: Successfully launched environment: word-doc
Và đợi 1 lát. Ngay bây giờ Elastic Beanstalk đang thiết lập tất cả mọi thứ cho bạn, nhóm bảo mật, máy chủ EC2...
Các bạn có thể xem thông tin enviroment
$ eb status
Environment details for: word-doc
Application name: word-doc
Region: us-west-2
Deployed Version: app-4117-180129_173006
Environment ID: e-cbkaqhbppg
Platform: arn:aws:elasticbeanstalk:us-west-2::platform/Puma with Ruby 2.4 running on 64bit Amazon Linux/2.6.5
Tier: WebServer-Standard-1.0
CNAME: word-doc.2sr2ipa8jr.us-west-2.elasticbeanstalk.com
Updated: 2018-01-29 10:34:17.752000+00:00
Status: Ready
Health: Green
Các bạn chú ý dòng CNAME
. Đó là link production của project: word-doc.2sr2ipa8jr.us-west-2.elasticbeanstalk.com
Add SECRET_BASE_KEY
lên EB instance.
$ eb setenv SECRET_KEY_BASE=$(rails secret)
Tạo biến môi trường.
Lưu ý: Vì filepublic.html
không chạy trên production nên bạn phải tạo 1 action
làm root
.
$ rails g controller home index
Config root routes
Rails.application.routes.draw do
root 'home#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
Vì hiện tại nhưng thay đổi chỉ ở dưới local.
$ git add .
$ git commit -m "Controller root app"
$ git push origin master
$ eb deploy
Lệnh$ eb deploy
sẽ deploy những thay đổi lên Elastic Beanstalk. Sau này sau khi thay đổi gì các bạn chỉ cần chay $ eb deploy
là ok.
Đợi 1 lát.
Creating application version archive "app-c1f5-180129_173804".
Uploading word-doc/app-c1f5-180129_173804.zip to S3. This may take a while.
Upload Complete.
INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
INFO: New application version was deployed to running EC2 instances.
INFO: Environment update completed successfully.
Ok bây giờ truy cập vào word-doc.2sr2ipa8jr.us-west-2.elasticbeanstalk.com
và DONE.
Vậy là mình đã hướng dẫn các bạn deploy Rails app thông qua ElasticBeanstalk. Easy đúng k nào.
All rights reserved