Tôi đã tiết kiệm $5 mỗi tháng với Heroku như thế nào?
heroku
1
deployment
9
cloudflare
3
White

Cẩm Huỳnh viết ngày 27/09/2017

Vừa rồi mình vừa tiết kiệm được $5 mỗi tháng sau khi migrate cái blog cá nhân từ Digital Ocean sang Heroku Free Dyno.

alt text

Kết quả thật mĩ mãn vì hầu như những thứ mình cần cho một một blog cá nhân, Heroku Free Dyno đều đáp ứng cả, với một số thủ thuật cần thiết.

Deploy lên Heroku

Blog cá nhân mình được viết dùng Elixir và trước đây mình đã từng viết một số bài về cách deployrelease ứng dụng Elixir.

Tuy nhiên với Heroku thì bạn không thể release bằng cách dùng Dicon, vì Heroku không phải là một host như Digital Ocean, nên ta sẽ bày keo khác.

Thật may vì một đồng môn Luyện Dịch Viên đã viết sẵn buildpack cho Elixir app tại https://github.com/HashNuke/heroku-buildpack-elixir, tuy nó không phải một buildpack được Heroku hỗ trợ chính thức nhưng được sử dụng khá rộng rãi (theo mình biết theo trang hex.pm cũng dùng buildpack này) nên các bạn có thể yên tâm sử dụng.

Bạn có thể config buildpack bằng cách

heroku buildpacks:set https://github.com/HashNuke/heroku-buildpack-elixir.git

Bạn có thể commit thêm file elixir_buildpack.config vào repo để chọn config Erlang/Elixir version hay tương tự.

elixir_version=1.4.2
erlang_version=19.2

Và Procfile

web: PORT=$PORT MIX_ENV=prod mix run --no-halt

Không còn gì có thể đơn giản hơn đúng không?

Always running

Có hai thứ gây khá nhiều sự khó chịu khi dùng Heroku Free Dyno đó là

  • Heroku chỉ cho 550 giờ mỗi tháng để sử dụng.
  • dyno sẽ bị tắt khi không có traffic trong vòng 30 phút (khi bạn thấy bạn truy cập vào mà trang web bị đơ chừng 15s, đó là do dyno đã bị tắt).

Tuy nhiên bạn có thể tăng số lượng giờ đồng hồ sử dụng lên con số 1000 nếu như bạn cài đặt phương thức thanh toán vào trong tài khoản. 1000 giờ đồng hồ là quá đủ để blog cá nhân của bạn chạy êm ru cả tháng (31 ngày * 24 giờ = 744 giờ). Xem thêm chi tiết cài đặt ở https://devcenter.heroku.com/categories/billing.

Về việc dyno bị tắt khi không có traffic, cách đơn giản nhất là tự tạo traffic cho nó. Cách dễ nhất là dùng Pingdom để ping trang blog của bạn thường xuyên giữ cho dyno không bị tắt.

Cài đặt Pingdom khá đơn giản, chỉ việc điền thông tin và nhấn chừng 3-4 cái nút. Cài đặt tại: https://www.pingdom.com/free

SSL

Trước đây mình dùng Let's Encrypt SSL cho host DO, nhưng khi qua Heroku thì phải dùng cách khác.

Heroku Free Dyno cho bạn kết nối SSL miễn phí nếu truy cập trang web qua subdomain *.herokuapp.com nhưng nếu bạn muốn dùng domain của riêng bạn, thì cần một số thủ thuật.

Ở đây mình dùng Cloudflare để làm DNS và Cloudflare hỗ trợ miễn phí kết nối Full SSL đến host.

alt text

Khác với Flexible SSL, với Full SSL thì kết nối từ user đến host của Cloudflare và từ host của Cloudflare đến host của bạn (ở đây là Heroku) sẽ đều là kết nối SSL.

SSL Cert miễn phí của Cloudflare là loại chứng chỉ chia sẻ (hình như chừng 5 tài khoản khác), nên nguy cơ bảo mật ở đây không phải là không có, các bạn cần chú ý điều này nếu bạn cần cái gì đó bảo mật tuyệt đối :scream:
Đồng thời với Full SSL, nguy cơ dính lỗ hổng bảo mật Man in the middle ở đây khá khó nhưng không phải là không có. Xem thêm ở đây.
Bạn cũng nên cân nhắc thêm một số drawbacks của Cloudflare trước khi dùng nó https://www.reddit.com/r/privacy/comments/41cb4k/be_careful_with_cloudflare/

Để tiến hành thì trước hết bạn sẽ phải trỏ một CNAME record về heroku app của bạn (my-xyz-app.herokuapp.com chẳng hạn).

alt text

Sau đó thì bạn chỉ cần bật Full SSL mode trong tab Crypto là xong, có thể bạn sẽ cần phải chờ 24 giờ để SSL cert có hiệu lực, nhưng thường bạn sẽ thấy sau vài phút. ¯\_(ツ)_/¯Tất cả phụ thuộc vào tạo hóa.

alt text

Hết

Xong, bây giờ thì vào và tận hưởng thành quả thôi.


Edit:

Có vẻ hơi nóng vội và chủ quan cơ mà thành quả trước mắt sau khi migrate là throughput đã tăng lên gần 5 lần (~2000req/s so với ~400req/s với wrk trên máy local của mình) dù không để làm gì.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Cẩm Huỳnh

35 bài viết.
279 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
36 9
(Ảnh) Vì sao lại là Bật Đèn? Ai từng đọc qua Tắt Đèn hẳn đã biết tác phẩm được kết thúc bằng tình huống: Buông tay, chị vội choàng dậy, mở cửa...
Cẩm Huỳnh viết 9 tháng trước
36 9
White
31 4
(Ảnh) Bắt đầu một câu chuyện Vài ngày trước một người bạn nhờ tui xem giùm trang web của nó bị người dùng phàn nàn là hack tiền ảo. Tui mò vào ...
Cẩm Huỳnh viết 4 tháng trước
31 4
White
28 6
Einstein có câu nói được quote khá nhiều. (Ảnh) Mình không hiểu vì sao Eistein lại nói thế (cũng không biết ông có thực sự nói không), với lại co...
Cẩm Huỳnh viết 6 tháng trước
28 6
Bài viết liên quan
White
2 0
Nhận thấy một số bạn khi pull code về server gặp phải trường hợp như sau. Tiêu Phong deploy lên server nên khi clone code về đã dùng lệnh git clon...
Ôm Boom viết 1 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
35 bài viết.
279 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!