Vận hành một website free vĩnh viễn với heroku

Deploy một ứng dụng rails lên heroku thật dễ dàng đúng không? Tuy nhiên, đôi khi bạn chỉ dùng heroku để demo một số app đơn giản mà không nghĩ nó có thể hỗ trợ các website thông thường chạy ổn định và lâu dài được. Sau đây là một số mẹo nhỏ giúp bạn điều chỉnh các khó khăn khi app chạy trên heroku và cho phép app chạy free lâu dài mà không cần lo nghĩ về kinh phí hàng tháng phải bỏ ra khi site chưa có nguồn thu:

 

 

heroku-Logo-1

 

1. Limit database

Heroku cho phép app bạn sử dụng hạn chế và số records được phép với các dạng free, tuy nhiên, đối với các website hoạt động lâu dài hoặc có lượng dữ liệu lớn, thì phải chịu phí với các gói khác nhau, tuy nhiên chi phí này tính ra không hề rẽ và có thể còn đắc hơn cả giá thuê 1 vps.

Solution: Như đã nói ở trên là chi phí sử dụng các gói db khác của heroku đắc hơn nhiêu so với thuê riêng một VPS, vì vậy giải pháp đơn giản ở đây là bạn sử dụng (nếu đã có sẵn VPS) hoặc reg một cái để chạy DB server, hỗ trợ remote connection cho nhiều apps. Dưới đây là lệnh config lạ DATABASE_URL trỏ đến một DB server khác.

 

2. Lưu files

Đối với các ứng dụng chạy trên heroku thì việc tạo ra các files sẽ chỉ có thể tồn tại trong thời gian ngắn hoặc cho đến lần deploy tiếp theo. Nếu app bạn cho phép post hình ảnh hoặc files không thể tồn tại lâu dài trong quá trình sử dụng được.

Solution: Sử dụng Amazon S3 để store files, hầu hết các gem upload files đều hỗ trợ tích hợp upload lên S3 một cách rất dễ dàng. Hiện nay Amazon Services đang hỗ trợ các startup với mức giá khá hợp lý, bao gồm free 1 năm đầu trong một giới hạn cho phép, chi phí để lưu trữ files trên S3 có thể nói là giải pháp tiết kiệm nhất hiện nay.

Với Paperclip

 

3. Domain

Bạn không muốn dùng tên miền .herokuapp.com mà muốn dùng với chính tên miền bạn đang kí.

Solution: Heroku hỗ trợ việc trỏ tên miền vào app khá đơn giản, với hạn chế là chỉ trỏ được với domain www . Bạn cần thực hiện theo 2 bước sau

Bước 1: Trỏ cname www record trỏ đến địa chỉ app của bạn. VD www –> sample.herokuapp.com

Bước 2: Add domain của bạn vào setting của app trên heroku để cho phép domain này trỏ đến app.

 

4. Hỗ trợ với domain non-www

Các app chạy trên heroku đơn giản là không được cấp 1 ip tĩnh nào cố định như lúc chạy trên VPS, vì vậy bạn không thể config A @ record trong DNS trỏ đến IP tĩnh được. VD bạn muốn sample-app.com trỏ đến app của bạn trên heroku thì rất khó, ngoại trừ dùng DNS Simple với một mức phí nào đó.

Solution: cách đơn giản là bạn add một A record @ trỏ đến một VPS, có thể là VPS chứa DB đã nói ở trên của bạn. Sau đó config apache hay nginx để redirect non-www to www đối với domain này.

 

5. Tốc độ

Do mỗi app chỉ được free 1 dyno, từ 2 dynos trở lên sẽ phải trả một khoảng phí tương đối không phải nhỏ. Tuy nhiên app vẫn có thể chạy tốt với tốc độ thỏa yêu cầu cơ bản mà không cần phải tốn chi phí để mua thêm 1 dyno khác từ heroku.

Solution: Giải pháp đơn giản trong trường hợp này là sử dụng unicorn để chạy web app thay vì rails server như thông thường, unicorn cho phép cấu hình file config với số processes và thời gian timeout tùy chọn, vì vậy chỉ cần bạn tăng số process xử lý của unicorn từ 1 lên 3, vậy là app của bạn đã đảm bảo được tương đối những yêu cầu về tốc độ rồi đúng không.

Cách config unicorn cho app trên heroku

  • Tạo file Procfile tại root của app với nội dung

  • Thêm gem ‘unicorn’ vào Gemfile
  • Thêm file config/unicorn.rb như sau:

 

Thật đơn giản đúng không? Bạn có muốn thử một app đang chạy trên heroku không? http://www.codad.com.vn, trang Codad này vẫn hoạt động khả ổn đúng không bạn 🙂

 

 

Hoài An

Admin at RubySG.com. Website: http://jacky.rubysg.com/

You may also like...