Bạn có một dịch vụ Go, ứng dụng Rails, API Spring Boot hay một web server sau Nginx chạy trong container? Chúng nói chuyện qua HTTP, lắng nghe trên một cổng, và chỉ cần một nơi để hoạt động.
Giờ đây, chỉ cần thêm một tệp Dockerfile.vercel vào dự án của bạn, Vercel sẽ đảm nhiệm việc xây dựng, lưu trữ, triển khai và tự động co giãn (autoscaling) image của bạn trên nền tảng Fluid Compute của họ. Điều này đồng nghĩa bạn chỉ trả tiền cho lượng CPU mà mã của bạn thực sự sử dụng, không còn phải lo lắng về việc chạy daemon cục bộ, thiết lập registry hay quản lý cụm máy chủ phức tạp. 💸
Cách thức hoạt động
Cách thức hoạt động cực kỳ đơn giản. Hãy tưởng tượng bạn có một HTTP server nhỏ viết bằng Go, lắng nghe trên $PORT.
Thêm tệp Dockerfile.vercel để build nó thành một image nhỏ và chạy nó:
dockerfile FROM golang:1.22-alpine WORKDIR /app COPY . . RUN go build -o /app/server . EXPOSE $PORT CMD ["/app/server"]
Sau đó, chỉ cần chạy lệnh vercel hoặc push code lên Git là xong.
Chỉ với hai tệp, ứng dụng của bạn đã sẵn sàng. Mỗi lần git push sẽ kích hoạt quá trình rebuild image và cung cấp cho bạn một URL xem trước mới tinh. Hoặc bạn có thể dùng lệnh vercel để triển khai mà không cần commit.
Dù ví dụ dùng Go, nhưng bất kỳ stack nào cũng hoạt động: Rails, Spring Boot, Express, Laravel, ASP.NET, FastAPI hay web server sau Nginx đều triển khai tương tự. Quy tắc duy nhất là server của bạn phải lắng nghe trên biến môi trường $PORT (mặc định là 80). Nếu nó nói được HTTP, nó sẽ được triển khai! Kể cả Java hay PHP cũng không thành vấn đề. 🌐
Bạn nhận được gì?
Container giờ đây là "công dân hạng nhất" trên Vercel. Chúng chạy trên cùng một nền tảng, cùng tài nguyên tính toán với frontend và các dịch vụ khác của bạn trên Vercel Services.
* Triển khai xem trước cho mỗi lần push: Mỗi commit sẽ có một URL riêng, bất biến để bạn mở, chia sẻ và dễ dàng rollback. * Tự động co giãn, cả hai chiều: Lưu lượng truy cập tăng thì hệ thống tự động mở rộng (scale out). Lưu lượng truy cập giảm thì các instance của bạn sẽ thu hẹp lại. Bạn không cần phải định cỡ cluster hay đoán số lượng truy cập đồng thời. * Tính phí theo CPU hoạt động: Fluid Compute sẽ tính phí dựa trên thời gian mã của bạn thực sự chạy. Một server idle, đang chờ truy vấn chậm hoặc API upstream, sẽ không đốt CPU trong khi chờ đợi. Bạn trả tiền cho thời gian thực thi, không phải thời gian chờ. * Quan sát tích hợp: Logs, traces và metrics cho container của bạn đều nằm trong cùng một dashboard với mọi thứ khác bạn triển khai. * Một dự án, một domain: Container của bạn nằm cạnh frontend và các dịch vụ khác, giao tiếp riêng tư qua mạng Vercel. Toàn bộ stack của bạn được triển khai như một.
Được xây dựng để khởi động nhanh
Hiệu suất của một container được đánh giá qua thời gian phản hồi yêu cầu đầu tiên.
Khi Vercel build image của bạn, họ lưu trữ nó dưới dạng một boot image được tối ưu hóa – một snapshot nén của đĩa container được tinh chỉnh cho thời gian khởi động nhanh chóng.
Khi container khởi động, Vercel stream snapshot đó và giải nén theo yêu cầu, thay vì tải toàn bộ image trước khi chạy. Server của bạn có thể bắt đầu xử lý yêu cầu ngay cả khi image chưa tải xong hoàn toàn, giúp image lớn không còn là rào cản.
Một khi instance đã chạy, Fluid Compute sẽ giữ nó "ấm" và xử lý nhiều yêu cầu từ đó, thay vì khởi động một bản sao mới cho mỗi yêu cầu. Bạn có được sự phản hồi nhanh chóng của một server luôn sẵn sàng và chi phí của một server "ngủ" khi rảnh rỗi.
Mỗi container là một tiến trình không trạng thái: nhận yêu cầu, trả về phản hồi và không lưu trữ gì giữa các yêu cầu. Trạng thái bền vững (persistent state) sẽ nằm ở các dịch vụ hỗ trợ bạn đính kèm, như database hay cache từ Vercel Marketplace. Vì instance không giữ dữ liệu sống còn, Vercel có thể thêm hoặc loại bỏ instance khi lưu lượng truy cập thay đổi. Vercel cũng đang phát triển lưu trữ bền vững gắn kèm container trong tương lai gần. 💾
Vì sao lại là bây giờ?
Nền tảng đầu tiên của Vercel từng cho phép triển khai Dockerfile chỉ bằng một lệnh, cách đây một thập kỷ. Ý tưởng đó đúng đắn, nhưng cơ sở hạ tầng để thực hiện nó một cách hoàn hảo thì chưa tồn tại.
Trong những năm qua, Vercel đã dành thời gian xây dựng các "nguyên tắc cơ bản" để xử lý điều này một cách tốt nhất. Chúng đang cung cấp sức mạnh cho mọi thứ bạn chạy trên Vercel: Builds, Functions, Sandboxes, và giờ là container. Tất cả đều co giãn theo lưu lượng truy cập và bạn chỉ trả tiền cho CPU bạn sử dụng. Container giờ đây là một công dân hạng nhất, chạy trên cùng một hệ thống với mọi thứ khác.
Phát hiện framework tự động là "cửa ngõ" chính của Vercel. Khi Vercel nhận diện được framework của bạn, họ sẽ đọc mã và tự động tạo ra cơ sở hạ tầng cần thiết cho ứng dụng, vì mã đã mô tả những gì nó nên làm. Đối với hầu hết các ứng dụng, đây là cách nhanh nhất để triển khai. Tuy nhiên, Dockerfile dành cho "mọi thứ khác": một dịch vụ cần thư viện hệ thống như FFmpeg hoặc Chromium, một framework Vercel chưa tự động phát hiện, hoặc một ứng dụng bạn muốn mang nguyên trạng như nó đã chạy. Dockerfile là cách phổ quát để mô tả cách một chương trình nên được xây dựng, vì vậy khi không có framework để đọc, Vercel sẽ tiếp nhận nó trực tiếp. ⚙️
Mọi thứ xung quanh Dockerfile của bạn đều là "zero configuration" (không cần cấu hình). Bạn chỉ cần chỉ vào image, và quá trình build, registry, rollout, scaling và URL đều tự động diễn ra.
Backend đã trở lại!
Giờ đây, backend của bạn được triển khai theo cách tương tự như frontend: một lần push, một URL xem trước, một nền tảng duy nhất. Chúng tôi rất nóng lòng được thấy những gì bạn sẽ xây dựng! ✨
Để bắt đầu, hãy đọc tài liệu hoặc triển khai một ví dụ.
Nguồn: Vercel Blog