Dịch vụ Vercel: Chạy toàn bộ stack trên Vercel

Đối với người dùng, một ứng dụng có giao diện người dùng Next.js và phần phụ trợ FastAPI có cảm giác giống như một sản phẩm và điều này cũng đúng đối với các kỹ sư xây dựng nó. Thay vào đó, hai phần này thường được triển khai trên các đám mây khác nhau với quy trình phát triển và triển khai khác nhau.
Hôm nay, chúng tôi sẽ giới thiệu Dịch vụ Vercel ở phiên bản beta công khai, cho phép bạn chạy nhiều khung trong một Dự án Vercel. Điều này mở khóa:
Triển khai nguyên tử: Giao diện người dùng, phụ trợ và các dịch vụ khác của bạn luôn được đồng bộ hóa và triển khai hoặc khôi phục cùng nhau
Triển khai bản xem trước được chia sẻ: Xem mọi thay đổi ảnh hưởng đến tất cả các dịch vụ của bạn như thế nào
Giao tiếp dịch vụ nội bộ: Các dịch vụ có thể nói chuyện với nhau mà không cần định tuyến qua Internet công cộng
Vercel xử lý phần còn lại: định tuyến, xây dựng, triển khai và tự động mở rộng quy mô trong sản xuất. Trải nghiệm nhà phát triển mà bạn đã biết từ Vercel hiện bao gồm toàn bộ ứng dụng của bạn.
Soạn ứng dụng với Dịch vụ Vercel
Khai báo các dịch vụ của bạn theo khóa dịch vụ trong vercel.json, giữ cấu hình định tuyến rõ ràng:
1{2 "services": {3 "my_frontend": {4 "root": "frontend/",5 "framework": "nextjs"6 },7 "my_backend": {8 "root": "backend/",9 "entrypoint": "main:app"10 }11 },12 // my_backend không có lộ trình công khai13 // nó chỉ có thể truy cập nội bộ từ my_frontend14 "rewrites": [15 { 16 "nguồn": "/(.*)", 17 "đích": { "service": "my_frontend" }18 }19 ]20}Các tuyến internet công cộng đến frontend. Phần phụ trợ không có tuyến đường công khai và chỉ có thể truy cập nội bộ thông qua ràng buộc dịch vụ.
Các dịch vụ có thể được gắn vào bảng định tuyến dùng chung mà không cần proxy ngược hoặc CORS.
Cấu hình dịch vụ được công nhận ở nhiều cấp độ của nền tảng Vercel:
Bảng Triển khai hiển thị trực quan hóa biểu đồ dịch vụ
Giao diện người dùng Nhật ký cho phép lọc theo dịch vụ riêng lẻ
Vercel dev CLI tự động chạy tất cả các dịch vụ mang lại cho bạn môi trường giống như sản xuất cục bộ


Ràng buộc dịch vụ
Các dịch vụ có thể giao tiếp nội bộ với các dịch vụ khác mà không cần định tuyến qua Internet công cộng. Đây là một ví dụ về cách khóa cấu hình liên kết mới cho phép điều đó:
1{2 "services": {3 "my_frontend": {4 "root": "frontend/",5 "framework": "nextjs",6 "binds": [7 {8 "type": "service",9 "service": "my_backend",10 "format": "url",11 "env": "BACKEND_INTERNAL_URL" 12 }13 ]14 },15 "my_backend": { ... }16 },17 "viết lại": [ ... ]18}Một liên kết đưa BACKEND_INTERNAL_URL vào giao diện người dùng, trỏ vào phần phụ trợ trên mạng nội bộ của Vercel
Giờ đây, mã giao diện người dùng JavaScript có thể giao tiếp nội bộ với dịch vụ Python thông qua URL được lưu trữ trong biến môi trường BACKEND_INTERNAL_URL:
1xuất hàm async GET() {2 const url = new URL("/users", process.env.BACKEND_INTERNAL_URL);3 const res = chờ tìm nạp(url);4 const user = chờ res.json();5 return Response.json(users);6}Giao diện người dùng gọi phần phụ trợ bằng cách sử dụng URL nội bộ được chèn. Lưu lượng truy cập không bao giờ rời khỏi mạng của Vercel.
Lưu lượng truy cập từ dịch vụ đến dịch vụ vẫn ở trên mạng Vercel thay vì truy cập vào Internet công cộng. Nhiều dịch vụ độc lập có thể trở thành một ứng dụng được kết nối bằng cùng một hệ thống dây, thay vì triển khai riêng biệt mà bạn kết hợp với nhau trên các máy chủ.