Chuyển đến nội dung chính
Giảm 50% tất cả các gói, có thời hạn. Khởi điểm từ $2.48/mo
17 min left
Công cụ lập trình và DevOps

Cách triển khai ứng dụng localhost ra công khai mà không cần VPS

B Bởi Bill 17 phút đọc
Thẻ tiêu đề "Triển khai localhost ra công khai không cần VPS": một ứng dụng cục bộ trên laptop tỏa ra qua tunnel tới điện thoại, cửa sổ trình duyệt và mạng gia đình

Ứng dụng của bạn chạy được. Bạn đã khởi động dev server, mở http://localhost:3000, và nó làm đúng việc cần làm. Rồi ai đó xin một đường link, và bạn nhận ra URL trên màn hình của mình chẳng có ý nghĩa gì với bất kỳ ai ngoài bạn.

Có ba cách để cấp URL công khai cho một ứng dụng localhost mà không cần VPS, cộng thêm một lựa chọn nhanh hơn khi người kia đang ở trong mạng nội bộ của bạn, và việc chọn giữa chúng không phải là câu hỏi về công cụ. Đó là câu hỏi ứng dụng cần được truy cập trong bao lâu, và liệu nó có thể chạy ở nơi nào khác ngoài laptop của bạn hay không. Dưới đây là từng con đường, lệnh cho ra URL, và chính xác điều gì sẽ khiến URL đó ngừng hoạt động.

Tóm tắt nhanh

  • Ai đó trong Wi-Fi của bạn cần xem: gắn dev server vào tất cả giao diện mạng và đưa IP LAN của bạn cho họ. Sẵn sàng trong vài giây, chết ngay khi khách rời khỏi mạng của bạn.
  • Bạn cần một link mà ai cũng mở được trong một giờ tới: chạy một tunnel (cloudflared, ngrok, localtunnel, localhost.run). URL HTTPS công khai trong khoảng một phút, không đụng đến router, và nó chết cùng tiến trình đã khởi động nó.
  • Nó phải tiếp tục chạy khi laptop của bạn đã gập lại: đẩy ứng dụng lên một gói hosting miễn phí. Việc này tách ứng dụng khỏi laptop của bạn và kéo theo các quy tắc mới về thẻ tín dụng, mục đích thương mại, và liệu dữ liệu của bạn có sống sót sau khi khởi động lại hay không.
  • Ứng dụng của bạn không cần mã phía server tại thời điểm request: build nó và đặt đầu ra tĩnh lên một host tĩnh. Nó có thể trực tuyến mà không cần laptop của bạn và không có tiến trình ứng dụng nào cần đánh thức, miễn là tài khoản và hạn mức sử dụng của host vẫn phù hợp.
  • Một mặc định đáng biết: next devpython -m http.server đã lắng nghe trên mọi giao diện mạng mà không cần cờ nào. Nếu bạn tưởng dev server của mình là riêng tư và chỉ trên laptop của bạn, thì không phải vậy.

Con đường nào phù hợp với ứng dụng của bạn

Sơ đồ quyết định từ ứng dụng cục bộ của bạn đến một trong bốn con đường: chỉ LAN, tunnel công khai, host ứng dụng, hoặc bản build tĩnh, kèm thời gian thiết lập, laptop có thể tắt hay không, và trường hợp dùng tốt nhất của mỗi con đường

Ba trong bốn con đường này cấp cho ứng dụng của bạn một URL công khai trên internet; con đường đầu tiên chỉ tới được mạng của riêng bạn, khiến nó vừa nhanh nhất vừa hạn chế nhất. Sắp xếp chúng theo thời gian URL cần tồn tại và lựa chọn gần như tự hiện ra.

Chạy WireGuard hoặc OpenVPN trên một VPS Linux, rồi trỏ router hoặc từng thiết bị riêng lẻ của bạn đến server đó. Đây không phải việc mua một router phần cứng. Đó là một chiến lược endpoint khác, nên những đánh đổi xứng đáng có phần riêng của chúng ở dưới đây.Thời gian để có URLTồn tại bao lâuĐiều gì làm nó chếtDành cho ai
Cùng mạngVài giâyKhi cả hai còn trong mạngKhách của bạn chuyển sang Wi-Fi khácĐồng nghiệp ở bàn bên, hoặc chính điện thoại của bạn
TunnelKhoảng một phútKhi tiến trình còn chạyGập laptop, tắt terminal, chạm hạn mức của góiMột bản demo, một buổi trình bày cho khách hàng, một bài kiểm tra webhook
Gói hosting miễn phí10 đến 30 phútVô thời hạn, có điều kiệnNgủ đông, hệ thống tệp tạm thời, hoặc điều khoản của góiThứ gì đó phải phản hồi trong lúc bạn ngủ
Bản build tĩnh10 đến 20 phútVô thời hạnCần mã phía server tại thời điểm requestỨng dụng có thể được tạo hoàn toàn lúc build hoặc chạy phía client

Những hàng nào mở ra cho bạn phụ thuộc vào ba điều bạn có thể kiểm tra ngay trong dự án của mình:

  • Ứng dụng có cần mã server của bạn chạy tại thời điểm request không? Một route Flask hoặc FastAPI, một endpoint trong server.js , hoặc logic server riêng theo từng request đều cần host phía server. Mã server chạy lúc build không tự động loại trừ triển khai tĩnh: Server Components của Next.js có thể chạy trong next build, và các GET Route Handler tĩnh có thể được prerender. Nếu mọi request lúc chạy có thể được phục vụ dưới dạng tài nguyên tĩnh hoặc gửi thẳng từ trình duyệt tới API bên ngoài, con đường tĩnh vẫn mở.
  • Nó có đọc hay ghi một tệp cần giữ lại không? Một tệp cơ sở dữ liệu (.db, .sqlite), một thư mục upload, một tệp JSON mà nó chỉnh sửa. Nếu có, hãy kiểm tra mô hình lưu trữ của host trước khi triển khai. Web service miễn phí của Render và instance miễn phí của Koyeb dùng bộ nhớ cục bộ tạm thời, trong khi Vercel Functions có hệ thống tệp chỉ đọc với không gian /tmp tạm. Hãy đặt trạng thái lâu dài vào volume bền vững, cơ sở dữ liệu hoặc object storage thay vì mặc định rằng đĩa cục bộ của ứng dụng sẽ tồn tại.
  • Nó có cần secret lúc chạy không? Một khóa trong tệp .env hoạt động nguyên vẹn trên hai con đường đầu, vì ứng dụng vẫn chạy trên máy của bạn. Trên hai con đường còn lại, bạn nhập lại nó trong phần cài đặt môi trường của nhà cung cấp, và nó không được nằm trong repo bạn push lên.

Chia sẻ trong mạng của chính bạn

next dev đã lắng nghe trên mọi giao diện mạng của máy bạn (đó là toàn bộ ý nghĩa của 0.0.0.0 khi bạn thấy nó), và python -m http.servercũng vậy. Cả hai đều không cần cờ, nên dev server bạn đang chạy lúc này có lẽ đã truy cập được từ điện thoại của bạn trên cùng Wi-Fi.

Next.js ghi nhận -H là cách để đổi hostname đó, với mặc định là 0.0.0.0, còn tài liệu Python nói rằng module gắn với tất cả giao diện trừ khi bạn truyền --bind 127.0.0.1. Điều đó khiến đây là cách nhanh nhất để chia sẻ một ứng dụng localhost: không tài khoản, không cài đặt, không triển khai. Các dev server phổ biến khác thì phải được chỉ định rõ.

# Already listening on all interfaces. Nothing to add.
next dev
python -m http.server 8000
streamlit run app.py

# Needs the flag.
npm run dev -- --host             # Vite
flask run --host=0.0.0.0
uvicorn main:app --host 0.0.0.0   # FastAPI

Tài liệu của Vite: server.host mặc định là localhost, và nhận --host trên CLI hoặc server.host: '0.0.0.0' trong tệp cấu hình. Uvicorn mặc định là 127.0.0.1, điều này bao gồm cả FastAPI vì chính nó chạy FastAPI. Streamlit để server.address không được đặt, và tài liệu cấu hình của nó ghi rằng đặt giá trị này sẽ giới hạn truy cập vào đúng địa chỉ đó: không đặt nghĩa là không giới hạn.

Sau đó bạn cần địa chỉ để đưa ra. Đó là IP của chính máy bạn trong mạng nội bộ, không phải localhost:

# macOS
ipconfig getifaddr en0

# Linux
hostname -I

# Windows (PowerShell)
ipconfig | findstr IPv4

Đưa cho khách của bạn http://<that-address>:3000 và họ vào được. Cái bẫy nằm ở hình dạng của toàn bộ con đường: địa chỉ đó chẳng có ý nghĩa gì bên ngoài mạng của bạn. Ngay khi họ sang Wi-Fi khác, dùng mạng di động hay về nhà, link đó chết với họ.

Lưu ý: nếu lệnh chạy ổn mà thiết bị kia vẫn không kết nối được, thì gần như lần nào cũng là do tường lửa của hệ điều hành, không phải do lệnh. Tài liệu tường lửa của Apple nói macOS hiện cảnh báo với ứng dụng bạn chưa cho phép và từ chối kết nối cho đến khi bạn xử lý. Windows thì hỏi hồ sơ mạng nào được áp dụng, và giữ các quy tắc riêng cho mạng riêng tư và công cộng . Chọn Riêng tư trên mạng ở nhà hoặc văn phòng. Không bao giờ chọn Công cộng.

Đặt nó sau một tunnel

Tunnel là một chương trình nhỏ chạy cạnh ứng dụng của bạn và cấp cho nó một địa chỉ HTTPS công khai. Một lệnh là có tunnel miễn phí tới localhost trong khoảng một phút, và nên biết trước rằng URL sẽ chết ngay khi lệnh đó dừng:

cloudflared tunnel --url http://localhost:3000

Router của bạn không thay đổi gì, vì hướng đi của kết nối. Máy của bạn mở một kết nối đi ra tới edge của nhà cung cấp, cùng loại kết nối mà trình duyệt của bạn tạo để tải bất kỳ trang nào, và nhà cung cấp giữ nó mở rồi đẩy các request đến ngược trở lại qua kết nối đó. Các cổng vào phía bạn vẫn đóng, đó là lý do cách này chạy được trên Wi-Fi khách sạn, điểm phát sóng điện thoại, và đường mạng ở nhà mà bạn không kiểm soát router.

Lưu ý: trường hợp cuối này đáng bỏ ra sáu mươi giây kiểm tra trước khi bạn cân nhắc mở cổng thay thế. Mở trang trạng thái của router, tìm IP WAN mà nó báo, rồi so với IP công khai thực của bạn từ bất kỳ dịch vụ "IP của tôi là gì". Nếu IP WAN nằm trong 100.64.0.0/10, CGNAT có lẽ là nguyên nhân. Nếu IP WAN và IP công khai chỉ đơn giản là khác nhau, bạn biết có thêm một lớp NAT phía trên, nhưng đó có thể là CGNAT hoặc double NAT thông thường. Dù là trường hợp nào, mở cổng chỉ trên router này có thể chưa đủ. Dải địa chỉ đó được RFC 6598 dành riêng làm không gian địa chỉ dùng chung, chính là thứ ISP đặt bạn phía sau khi họ hết địa chỉ.

Các lựa chọn khác nhau chủ yếu ở việc chúng đòi hỏi gì ở bạn trước.

Quick tunnel của Cloudflare chính là lệnh ở trên: không tài khoản, không tên miền, một tên miền phụ ngẫu nhiên trên trycloudflare.com . Cloudflare giới hạn chúng ở 200 request đang xử lý, vượt quá sẽ trả về 429, không hỗ trợ Server-Sent Events, và cũng trong tài liệu đó nói rằng tunnel miễn phí dành cho thử nghiệm và phát triển, không phải để triển khai website production.

ngrok yêu cầu đăng ký trước, rồi ngrok http 3000. Gói miễn phí hiện tại cho bạn 5 $ sử dụng kèm theo một lần, không làm mới hằng tháng, tối đa 3 endpoint trực tuyến, 1 GB lưu lượng, 20.000 request HTTP/S, và một trang cảnh báo trung gian mà khách của bạn phải bấm qua. Bạn cũng nhận được một tên miền phát triển miễn phí được cấp tự động, điều mà ngrok đã công bố năm 2023 để chấm dứt lời than phiền cũ về việc URL đổi sau mỗi lần khởi động lại.

localtunnel không cần đăng ký và không cần cài gì ngoài npx: npx localtunnel --port 3000. Bạn nhận được một tên miền phụ ngẫu nhiên, và README nói rõ rằng --subdomain yêu cầu một tên nhưng không đảm bảo có được.

localhost.run không cài gì cả, vì nó dùng SSH client có sẵn trong hệ điều hành của bạn: ssh -R 80:localhost:3000 localhost.run. Tài liệu của nó ghi rằng không cần tải gì và không cần lập tài khoản cho tên miền miễn phí.

VS Code có tính năng này trong bảng Ports, tiện nếu bạn vốn sống trong trình soạn thảo. Nó đòi đăng nhập GitHub hoặc Microsoft, và mặc định sẽ làm bạn vấp: cổng được chuyển tiếp là Riêng tư, nghĩa là khách của bạn bị yêu cầu đăng nhập bằng tài khoản của bạn cho đến khi bạn chuyển cổng sang Công khai. (Ổn với đồng đội. Vô dụng với khách hàng chỉ muốn bấm vào một link.)

Tailscale Funnel cũng làm được việc này, với hai ràng buộc thường quyết định luôn: URL chỉ có thể nằm trên tên miền tailnet của riêng bạn, và nó chỉ có thể lắng nghe trên các cổng 443, 8443 và 10000.

Dù chọn gì, hãy rõ ràng về thứ bạn đã đưa ra. Với một tunnel công khai không có kiểm soát truy cập, mọi thứ dev server phục vụ đều tới được với bất kỳ ai cầm URL đó, kể cả những route bạn chưa từng liên kết và bất kỳ giao diện debug nào bạn để mở. Ổn cho một bản demo mười lăm phút. Kém ổn hơn nhiều với một URL bạn dán vào Discord công khai.

Việc hết hạn khiến bạn bất ngờ vì trông như ứng dụng bị hỏng. Hầu hết các đường nhanh ở đây vẫn phụ thuộc vào phần mềm tunnel chạy trên laptop của bạn: dừng cloudflared, ngrok, localtunnel, hoặc phiên SSH localhost.run là việc chuyển tiếp dừng lại. Tailscale Funnel là ngoại lệ khi bạn chạy nó với --bg, giữ cấu hình Funnel chạy nền và khôi phục sau khi khởi động lại. Không cái nào phục vụ được ứng dụng cục bộ của bạn khi chính laptop đang offline. Bạn có thể để tunnel chạy nhiều ngày, và nó sẽ hoạt động cho tới khi nắp máy gập xuống hoặc bạn chạm giới hạn request.

Tunnel là công cụ đúng cho demo và công cụ sai cho hosting: uptime của nó là uptime của laptop bạn.

Để ứng dụng rời khỏi máy của bạn

Đây là con đường đầu tiên mà laptop của bạn không còn là trụ đỡ, và là con đường đầu tiên mà điều khoản quan trọng hơn công cụ. Thứ kết thúc nó ở đây không phải đồng hồ. Đó là ngủ đông, reset hệ thống tệp, hoặc một gói quyết định rằng ứng dụng của bạn không phải thứ họ muốn trên instance miễn phí.

Các lựa chọn dưới đây trải từ gói miễn phí lâu dài đến bản dùng thử ngắn hạn. Một số có thể giữ ứng dụng trực tuyến vô thời hạn trong hạn mức của họ; số khác dừng sau thời gian dùng thử cố định hoặc yêu cầu tài khoản trả phí cho tài nguyên tính toán. Hãy kiểm tra quy tắc thanh toán, ngủ đông và lưu trữ trước khi triển khai.

Điều khoản gói miễn phí dưới đây đã được đối chiếu với trang giá hoặc tài liệu của từng nhà cung cấp vào ngày 7 tháng 9 năm 2026.

Nhà cung cấpDùng thương mại?Dữ liệu sống sót sau khởi động lại?Cái bẫy
NetlifyĐược phépCó, với Netlify Blobs hoặc DatabaseKhông cần thẻ để bắt đầu; dùng hết tín dụng hằng tháng của gói Free sẽ tạm dừng dự án đến chu kỳ thanh toán tiếp theo trừ khi bạn nâng cấp
RenderKhông nêu rõMất khi khởi động lạiKhông cần thẻ để bắt đầu; ngủ sau 15 phút không hoạt động; Postgres miễn phí hết hạn 30 ngày sau khi tạo
Cloudflare Pages / WorkersKhông nêu rõCó, với KV, D1, R2 hoặc Durable Objects500 lượt build Pages mỗi tháng; Workers miễn phí giới hạn ở 100.000 request mỗi ngày
VercelKhông trên HobbyMất khi khởi động lạiHobby chỉ dành cho mục đích cá nhân; hệ thống tệp của function là chỉ đọc
GitHub PagesKhông được phépChỉ đầu ra tĩnhKhông kinh doanh trực tuyến, thương mại điện tử hay SaaS thương mại; thời gian chờ triển khai 10 phút
PythonAnywhereKhông nêu rõTài khoản miễn phí chỉ truy cập được danh sách host bên ngoài được cho phép; ứng dụng web miễn phí hết hạn sau một tháng trừ khi được gia hạn
Fly.ioKhông nêu rõCó, với một Fly VolumeKhông có gói miễn phí lâu dài: 2 giờ máy hoặc 7 ngày; Machine dùng thử tự dừng sau 5 phút chạy, và bản dùng thử gồm 20 GB lưu trữ volume; ứng dụng dừng khi hết dùng thử cho đến khi bạn thêm thẻ
KoyebKhông nêu rõKhông có lưu trữ cục bộ bền vữngBắt buộc có thẻ; Koyeb tạm giữ rồi hủy khoản ủy quyền trước 29 $, nhưng đăng ký mặc định chọn Pro và tính phí theo tỷ lệ trừ khi bạn chuyển sang Starter
Hugging Face SpacesKhông nêu rõMất khi khởi động lạiStatic Spaces miễn phí; Gradio và Docker nhìn chung cần gói trả phí, nhưng tài khoản cá nhân miễn phí đủ điều kiện có thể host tối đa hai Gradio Space trên ZeroGPU
RailwayKhông nêu rõCó, nếu ứng dụng dùng volume 0,5 GB đi kèmDùng thử 30 ngày với 5 $ tín dụng một lần, sau đó là gói Free 0 $ với 1 $ tín dụng tài nguyên mỗi tháng; không cần thẻ

"Không nêu" nghĩa là trang của chính nhà cung cấp không trả lời câu hỏi này cho gói miễn phí của họ. Hãy xem đó là chưa rõ, chứ không phải có hay không.

Ba hàng trong số đó đáng xem kỹ thêm trước khi bắt đầu. Fly.io không có gói miễn phí lâu dài: bản dùng thử kết thúc sau 2 giờ máy hoặc 7 ngày. Koyeb có một instance miễn phí, nhưng quy trình đăng ký và thanh toán cần chú ý trước khi triển khai. Hugging Face giữ Static Spaces miễn phí, trong khi Gradio và Docker Space mới cần tài khoản trả phí, trừ ngoại lệ hạn chế của ZeroGPU. Railway không còn thuộc danh sách cảnh báo này: sau 30 ngày dùng thử với 5 $ tín dụng, giờ nó chuyển sang gói Free 0 $ với 1 $ tín dụng tài nguyên mỗi tháng.

Rồi đến câu hỏi về dữ liệu, nơi một ứng dụng đang chạy tốt âm thầm trở thành ứng dụng hỏng. Web service miễn phí của Render chạy trên hệ thống tệp tạm thời, và tài liệu của họ nói thẳng rằng mọi thứ được ghi ở đó, bao gồm rõ ràng cả ảnh upload và cơ sở dữ liệu SQLite cục bộ, đều mất sau mỗi lần triển khai lại, khởi động lại và ngủ đông. Function của Vercel chạy trên hệ thống tệp chỉ đọc với chỉ một vùng nháp tạm thời, nên tệp SQLite mà ứng dụng của bạn ghi cũng không an toàn ở đó. Nếu ứng dụng của bạn giữ trạng thái trong tệp, hãy chuyển nó sang lưu trữ bền vững: cơ sở dữ liệu được host, object storage, hoặc volume bền vững ở nơi nền tảng hỗ trợ.

Ngủ đông là thứ đáng cảm nhận trước khi bạn cam kết. Trên gói miễn phí của Render, 15 phút không hoạt động khiến dịch vụ ngủ, và request tiếp theo đánh thức nó trong khoảng một phút, kèm một trang đang tải hiện ra với người bấm vào link của bạn. Với một dự án portfolio, chỉ nhún vai. Với một khách hàng mở link giữa cuộc gọi, đó là sáu mươi giây tệ hại.

PythonAnywhere có phiên bản tinh vi hơn của cái bẫy này. Không có ngủ đông khi rảnh, nhưng ứng dụng web miễn phí có hạn một tháng và dừng lại trừ khi bạn bấm vào link gia hạn PythonAnywhere gửi qua email, và tài khoản miễn phí bị giới hạn truy cập internet đi ra và chỉ tới được danh sách host bên ngoài được cho phép. Một ứng dụng gọi API ngoài danh sách đó vẫn trực tuyến hoàn hảo nhưng thất bại ở mọi request tới API không được phép đó (một kiểu debug kinh khủng, vì chẳng có gì ở đâu trông như đang sập cả).

Xuất bản dưới dạng site tĩnh

Nếu không có gì ứng dụng của bạn làm cần mã server tại thời điểm request, host tĩnh là lựa chọn gần nhất với "thiết lập rồi quên": nó có thể trực tuyến mà không cần laptop của bạn, và không có tiến trình ứng dụng nào chờ được đánh thức. Tài khoản và hạn mức sử dụng của host vẫn áp dụng. Nhiều ứng dụng đủ điều kiện hơn bạn nghĩ, đó là lý do câu hỏi đầu tiên trong ba câu kia đáng được trả lời trước khi bạn mặc định mình cần host phía server.

Quy tắc hẹp hơn "nó có backend không". Ứng dụng của bạn đủ điều kiện nếu mọi request nó tạo ra đều đi tới tệp tĩnh của bạn hoặc thẳng từ trình duyệt tới API của người khác. Gọi Supabase hay một API công khai từ trình duyệt là ổn, với một lưu ý duy nhất: khóa nằm trong mã trình duyệt là khóa bạn đã công bố. Thứ đóng cánh cửa lại là việc cần mã của chính bạn chạy trên server cho mỗi request.

Nếu đủ điều kiện, quy trình rất ngắn:

npm run build   # Vite writes to dist/, a Next.js static export writes to out/

Sau đó triển khai đầu ra build đó lên host tĩnh. Cloudflare Pages, Netlify và Vercel có thể build từ repo được kết nối. GitHub Pages có thể xuất bản tệp tĩnh từ một nhánh hoặc dùng GitHub Actions để chạy build của framework và triển khai đầu ra được tạo.

GitHub Pages có những ràng buộc đủ sắc để đáng lưu ý ngay từ đầu. Chỉ tĩnh, một site người dùng hoặc tổ chức cho mỗi tài khoản, và giới hạn sử dụng nêu rõ nó không phải hosting miễn phí cho doanh nghiệp, site thương mại điện tử hay SaaS thương mại. Nếu ứng dụng của bạn sẽ nhận thanh toán, điều đó loại nó ra trước khi bạn bắt đầu.

Con đường này không có hạn dùng của tiến trình ứng dụng. Nó tiếp tục chạy miễn là tài khoản hosting còn hoạt động và trong hạn mức, và ngừng phù hợp ngay khi ứng dụng cần xử lý phía server tại thời điểm request.

Nơi các con đường miễn phí kết thúc

Các con đường miễn phí thất bại ở những chỗ khác nhau, không phải cùng lúc. Host tĩnh đã giải quyết được uptime của laptop và cho bạn một URL ổn định từ nhà cung cấp. Host ứng dụng miễn phí cũng làm được vậy, và một số giờ đã có lưu trữ bền vững. VPS bắt đầu hợp lý khi các yêu cầu chồng lên nhau: tiến trình phía server của riêng bạn cần luôn trực tuyến, bạn cần lưu trữ bền vững có thể dự đoán, và quy tắc tài nguyên hay sử dụng của gói miễn phí không còn phù hợp.

Ngưỡng đó đáng được tôn trọng. Một bản demo không phải lý do để mua server, một dự án tĩnh ít lưu lượng cũng vậy. Hãy ở lại với tunnel cho việc chia sẻ ngắn hạn, ở lại với host tĩnh khi ứng dụng thực sự tĩnh, và ở lại với host ứng dụng miễn phí khi hạn mức của nó còn phù hợp với thứ bạn đang chạy.

Hãy chuyển sang VPS khi bạn cần một server luôn bật do bạn kiểm soát và sẵn sàng gánh phần việc vận hành đi kèm. Linux VPS của chúng tôi là một lựa chọn, và một VPS tương đương từ nhà cung cấp khác cũng làm được việc đó. Hãy chọn kích cỡ server theo ứng dụng thay vì mặc định gói nhỏ nhất là đủ.

Xem các gói Linux

Xây dựng trên VPS Linux với quyền root, NVMe và sức mạnh AMD EPYC.

Xem các gói Linux

Hai điều thay đổi khi bạn làm vậy. Quy trình triển khai push-lên-git mà host nền tảng từng cho bạn không còn tự động nữa. Bạn có thể tái tạo nó bằng một PaaS tự host như Coolify hoặc Dokku, hoặc xây đường CI/CD của riêng mình, và dù cách nào thì giờ bạn cũng phải tự lo cập nhật và bảo trì.

Thay đổi còn lại là chiếc máy chứa nhiều hơn chỉ ứng dụng. Nó sẽ vui vẻ chạy Code Server và Claude Code nếu bạn muốn trình soạn thảo của mình cũng ở đó, và tùy bạn, đó hoặc là một phần thưởng dễ chịu hoặc là cả một cuối tuần mới.

Câu hỏi thường gặp

Tại sao URL công khai của tôi ngừng hoạt động sau khi tôi gập laptop?

Vì tunnel gắn với tiến trình đã tạo ra nó, không phải với ứng dụng của bạn. Gập laptop hoặc tắt terminal kết thúc tiến trình đó, URL công khai chết, còn ứng dụng của bạn vẫn ổn. Khởi động lại tunnel cho bạn URL mới trừ khi công cụ cấp cho bạn một tên miền dành riêng. Nếu link cần sống sót qua lúc laptop ngủ, ứng dụng phải rời khỏi máy của bạn.

Tôi có cần tên miền để đưa ứng dụng cục bộ lên URL công khai không?

Không, trong hầu hết mọi trường hợp. Quick tunnel của Cloudflare, tên miền phát triển ngrok cấp, localtunnel, localhost.run, và các gói hosting miễn phí ở trên đều cấp cho bạn một tên miền phụ trên tên miền của họ mà không mất phí. Ngoại lệ là named tunnel của Cloudflare, cần một tên miền bạn đã thêm vào Cloudflare DNS.

Người ở mạng Wi-Fi khác có mở được địa chỉ IP cục bộ của tôi không?

Không. Một địa chỉ như 192.168.1.42 trỏ tới thiết bị nào đang giữ nó trong mạng bạn hiện đang kết nối, mà ở bất kỳ mạng nào khác thì đó là một thiết bị khác hoặc chẳng có gì cả. Bất kỳ ai ngoài Wi-Fi của bạn đều cần tunnel, gói hosting miễn phí hoặc host tĩnh.

Cách nào trong số này dùng được nếu ứng dụng của tôi có đăng nhập và cơ sở dữ liệu?

Con đường cùng mạng và tunnel hoạt động không đổi vì ứng dụng vẫn chạy trên máy của bạn. Triển khai tĩnh cũng có thể hoạt động nếu request đăng nhập và cơ sở dữ liệu đi thẳng từ trình duyệt tới một dịch vụ được host và không có mã phía server riêng nào phải chạy cho mỗi request. Nếu mã xác thực hoặc cơ sở dữ liệu của chính bạn cần server tại thời điểm request, hãy dùng host phía server. Trên host ứng dụng miễn phí, hãy giữ dữ liệu lâu dài trong lưu trữ bền vững thay vì mặc định hệ thống tệp cục bộ của ứng dụng sẽ tồn tại.

Chia sẻ

Thảo luận

Bình luận

Đăng nhập để tham gia thảo luận.

Thêm bài viết từ blog

Tiếp tục đọc.

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.