Share
Trang chủ / Tất cả hướng dẫn / Lập trình web / Đưa local online bằng ngrok

Đưa local online bằng ngrok

Hướng dẫn sử dụng ngrok để đưa localhost online mà không cần mở port, giúp người ngoài có thể truy cập lcoalhost

Một vấn đề mà chúng ta vẫn thường hay gặp, đó là cho phép các máy bên ngoài mạng truy cập vào localhost. Có rất nhiều nguyên nhân dẫn chúng ta đến vấn đề này, có thể là demo với khách hàng, có thể là test thử một cái gì đó với bạn bè, mà nhu cầu lớn và chính đáng nhất chính là integration test với các api của bên thứ ba như paypal, facebook, hoặc các dịch vụ có postback ngầm khác.

Lúc này bạn có nhiều lựa chọn, hoặc là mở port, rồi trỏ domain tới IP của bạn, nhưng IP của người dùng thông thường là IP động, cho nên bạn sẽ phải thay đổi record cho domain thường xuyên, và sẽ mất một khoản thời gian để chờ DNS server cập nhật. Như vậy nhiều khi mất thời gian. Hoặc cũng có thể sử dụng các dịch vụ Dynamic DNS. Nhưng vẫn phải mở port. Mở port không có khó, nhưng nhiều khi bất khả thi khi sử dụng chung mạng, và bạn không có quyền mở port.

Hôm nay mình sẽ giới thiệu đến các bạn một giải pháp khác, tiện lợi hơn giải pháp mở Port. Đó là sử dụng Ngrok.

Ngrok là gì?

Ngrok là một reverse proxy giúp người dùng internet bên ngoài mạng của bạn có thể truy cập vào localhost của bạn. Vì nó đứng giữa kết nối, nên nó có thể ghi lại các thông số và hỗ trợ bạn nhiều chức năng can thiệp khác như phân tích, log, repeate request…

Ngork được viết bằng golang. Hiện tại sourcode của v1 đã được public lên github, nhưng họ không còn phát triển, support cho version đó nữa. bạn có thể clone về xem thử tại repo của ngrok.

Ngork viết bằng golang, nên tất nhiên là nó có thể biên dịch cho nhiều hệ điều hành khác nhau. Bạn có thể tải về tại trang download Ngrok. Mình dùng linux, vì vậy sau khi tải về mình bỏ vào thư mục ~/bin để tiện chạy command, Tùy theo hệ điều hành của bạn như thế nào mà bạn tự biết cách settup cho phù hợp.

Tùy theo hệ điều hảnh của bạn mà khi tải về sẽ có những file thực thi khác nhau. Bạn có nguyên một trang tài liệu rất chi tiết để tự mình tìm hiểu tại đây: Docs.

Ngrok có miễn phí không?

Ngrok có nhiều plan, có miễn phí và có trả phí, các tính năng trong gói miễn phí cũng vừa phù hợp với nhu cầu test của các nhân, các gói tính phí chỉ hướng vào đối tượng là các công ty mà thôi.

Screen Shot 2016-09-11 at 9.02.01 PM

Còn đây là gói free:

  1. HTTP/TCP tunnels on random URLs/ports
  2. 1 online ngrok process
  3. 4 tunnels per ngrok process
  4. 40 connections / minute

Cài đặt vào auth

Sau khi tải file về, bạn có file thực thi, có thể chạy ngay mà không cần phải cài đặt gì thêm. Với linux/mac mình sẽ đặt vào thư mục ~/bin để có thể chạy tiện hơn.

Đầu tiên bạn cần phải tạo account tại trang ngrok.com. Sau đó truy cập trang dashboard bạn sẽ thấy token và hướng dẫn auth:

ngrok authtoken [your code]

Sử dụng ngrok

Đầu tiên thì hãy đảm bảo rằng phần mềm webserver đã được chạy. Sau đó tùy theo port mà server đang lắng nghe hoặc virtualhost mà bạn chạy ngrok cho phù hợp, Ví dụ webserver của mình đang nghe port 80. Mình sẽ chạy  lệnh sau:

ngrok http 80

Giờ bạn sẽ thấy public url và local url mà ngrok map.

Truy cập vào địa chỉ trên, bạn sẽ thấy giống như local host của bạn.

Screen Shot 2016-09-11 at 6.22.50 PM

Mặc định như lệnh trên thì ngrok sẽ map vào localhost:80. Nếu bạn có settup virtualhost thì có thể thêm tham số vào:

ngrok http senviet.dev:80

Screen Shot 2016-09-11 at 6.24.26 PM

Dùng Subdomain

Nếu bạn dùng gói free, thì không có quyền tùy chỉnh subdomain, subdomain sẽ là một chuỗi ngẫu nhiên. Có phần hơi bất tiện, vì bạn sẽ phải config lại trên các dịch vụ của bên thứ ba. Nhưng nếu bạn dùng gói paid, thì hãy tiếp tục.

ngrok http -subdomain=senviet 80

Lúc này bạn sẽ nhận được kết quả giống như sau:

ngrok by @inconshreveable

...
Forwarding http://senviet.ngrok.io -> 127.0.0.1:80
Forwarding https://senviet.ngrok.io -> 127.0.0.1:80

Dùng domain riêng

Đây cũng là một tính năng trả phí. Bạn sẽ cần phải truy cập vào dashboard. Trong phần Reserved Domains bạn sẽ thấy một subdomain của ngrok. Đăng nhập vào trong dashboard của domain và tạo một cname tới subdomain này, và đợi đến khi DNS cập nhật

Giờ bạn có thể dùng tham số hostname để ngrok sử dụng domain của bạn.

ngrok http -hostname=senviet.org 80

Wildcard domain

Tương tự như domain riêng, với wildcard domain, bạn phải trỏ wildcard record ( record có name là * ) đến subdomain của ngrok. Và dùng hostname có dấu *. là được:

ngrok http --hostname *.senviet.org 80

Lời kết

Ngrok là một lựa chọn nhanh chóng và đơn giản để đưa localhost của bạn ra thế giới. Bạn cũng có thể lạm dụng nó để đưa localhost của mình ra production, chỉ là không nên làm như vậy, sẽ có rất nhiều vấn đề khác phát sinh, Nhưng nếu chỉ là tạm thời thì rất phù hợp.