Laravel Starter Kit
Nếu đang dùng Laravel Starter Kits, Inertia SSR được hỗ trợ thông qua một build command:Thiết lập Vite Plugin
Cách được khuyến nghị để cấu hình SSR là dùng@inertiajs/vite plugin. Cách này tự động xử lý cấu hình SSR, bao gồm SSR ở development mode mà không cần Node.js server riêng.
1
Install the Vite plugin
2
Configure Vite
Thêm Inertia plugin vào file Bạn cũng có thể cấu hình SSR option rõ ràng.Bạn có thể truyền
vite.config.js. Plugin tự động phát hiện SSR entry point.vite.config.js
vite.config.js
false để tắt xử lý SSR tự động của plugin, ví dụ khi muốn cấu hình SSR thủ công hoặc tắt hoàn toàn SSR.vite.config.js
3
Update your build script
Cập nhật script
build trong package.json để build cả hai bundle.package.json
Development mode
Vite plugin tự động xử lý SSR trong development. Không cần build SSR bundle hay chạy Node.js server riêng. Chỉ cần chạy Vite dev server như bình thường:Production
Trong production, build cả hai bundle rồi khởi động SSR server.Clustering
Mặc định SSR server chạy một thread. Bạn có thể bật clustering để chạy nhiều Node server trên cùng port, request được xử lý bởi từng thread theo round-robin.vite.config.js
Host
Mặc định SSR server bind0.0.0.0, nên truy cập được từ mọi network interface. Bạn có thể giới hạn vào interface cụ thể bằng tùy chọn host.
vite.config.js
Thiết lập thủ công
Vite plugin mặc định tái sử dụng entry pointapp.js cho SSR nên không cần file riêng. Hầu hết tùy chỉnh có thể xử lý bằng withApp callback.
Để kiểm soát nhiều hơn, chẳng hạn cung cấp callback setup thủ công, bạn có thể tạo entry point resources/js/ssr.js riêng và cập nhật app.js để dùng client-side hydration.
SSR Entry Point
app.js bất kỳ phần nào còn thiếu nhưng hợp lý khi chạy SSR, chẳng hạn plugin hoặc custom mixin.
Client-side hydration
Không dùng xử lý tự động của Vite Plugin
Bạn có thể truyềnssr: false cho Inertia plugin để tắt xử lý SSR tự động và tự quản lý SSR build. Bạn cũng nên thêm thuộc tính ssr vào cấu hình Laravel Vite plugin để nó biết entry point.
Clustering
Bạn có thể truyền tùy chọncluster vào createServer để chạy nhiều Node server trên cùng port, request được phân phối round-robin.
Host
Mặc định SSR server bind0.0.0.0, truy cập được từ mọi interface. Bạn có thể truyền tùy chọn host vào createServer để giới hạn vào interface cụ thể.
Chạy SSR server
SSR server chỉ bắt buộc trong production. Trong development, Vite plugin tự động xử lý SSR.
node làm runtime. Bạn có thể đổi bằng tùy chọn runtime trong config/inertia.php. Path tuyệt đối tới runtime binary cũng được hỗ trợ.
--runtime trên Artisan command override giá trị cấu hình cho một lần gọi.
ensure_runtime_exists để kiểm tra runtime binary tồn tại trước khi khởi động SSR server. Command sẽ thoát với lỗi nếu không tìm thấy binary.
Xử lý lỗi
Khi SSR render thất bại, Inertia graceful fallback về client-side rendering. Vite plugin ghi thông tin lỗi chi tiết ra console, gồm component name, request URL, source location và hint phù hợp để xử lý. Các lỗi SSR phổ biến được tự động phân loại. Browser API error như tham chiếuwindow hoặc document trong server-rendered code đi kèm hướng dẫn chuyển code vào lifecycle hook. Component resolution error gợi ý kiểm tra file path và casing.
Inertia cũng dispatch event SsrRenderFailed phía server. Bạn có thể lắng nghe event để log lỗi hoặc gửi tới error tracking service.
Ném exception khi lỗi
Vì Inertia graceful fallback về client-side rendering, lỗi SSR có thể không được chú ý. Test vẫn pass vì client-side render thành công nhưng user không bao giờ nhận server-rendered HTML. Điều này đặc biệt phổ biến trong E2E test bằng Laravel Dusk hoặc Pest Browser Testing. Bạn có thể đặt tùy chọnthrow_on_error trong config/inertia.php để ném exception thay vì fallback im lặng, giúp phát hiện vấn đề SSR sớm.
phpunit.xml để chỉ bật trong testing.
Tắt SSR
SSR có hai lớp: Vite plugin phục vụ SSR trong development và build SSR bundle cho production, còn Laravel adapter dispatch rendering request tới SSR server. Để tắt hoàn toàn SSR, nên tắt cả hai.vite.config.js
config/inertia.php
Inertia::disableSsr(). Điều này hữu ích khi muốn giữ SSR trong build nhưng tắt khi test hoặc trong môi trường cụ thể.
Loại route khỏi SSR
Đôi khi bạn muốn bỏ qua server-side rendering cho một số route trong khi vẫn bật SSR cho phần còn lại của ứng dụng.Qua Middleware
Bạn có thể dùng property$withoutSsr trên Inertia middleware để tắt SSR cho các route pattern cụ thể.
Qua Facade
Bạn cũng có thể loại các route cụ thể bằng phương thứcInertia::withoutSsr(), thường được gọi từ service provider.
Theo từng request
Bạn có thể tắt SSR cho request hiện tại bằng cách đặt cấu hìnhinertia.ssr.enabled thành false.
Triển khai
Khi deploy app có SSR lên production, bạn cần build cả client-side bundle (app.js) và server-side bundle (ssr.js), sau đó chạy SSR server như background process, thường bằng process monitor như Supervisor.
inertia:stop-ssr. Công cụ giám sát tiến trình (như Supervisor) cần chịu trách nhiệm tự động khởi động lại SSR server sau khi nó dừng.
inertia:check-ssr để xác minh SSR server đang chạy. Điều này hữu ích sau khi deploy và rất phù hợp làm Docker health check để đảm bảo server phản hồi đúng như mong đợi.
inertia.ssr.ensure_bundle_exists thành false.