Next.js và NestJS có thể được triển khai độc lập hoặc chung một hệ thống, nhưng không nhất thiết phải công khai nhiều cổng ra Internet.
1. Phân biệt các service
Next.js đảm nhiệm giao diện/SSR, NestJS cung cấp API. Hai tiến trình có thể sử dụng port khác nhau trong mạng Docker nội bộ.
2. Dockerfile và build
Sử dụng multi-stage build, cài dependencies theo lockfile, chạy dưới user không có quyền root nếu tương thích. Không copy mật khẩu hoặc file .env vào image.
3. Định tuyến với reverse proxy
Có thể chọn app.example.com cho Next.js và api.example.com cho NestJS, hoặc đưa API qua cùng domain dưới đường dẫn /api nếu route phù hợp. Người dùng chỉ truy cập 443; proxy chuyển tiếp đến port nội bộ.
4. Biến môi trường và healthcheck
Phân biệt biến được nhúng lúc build với biến runtime; tuyệt đối không đặt secret trong biến NEXT_PUBLIC_*. Thêm healthcheck cho API và kiểm soát timeout.
5. Tự động triển khai
GitLab pipeline có thể build riêng mỗi image. Gắn tag theo commit SHA và triển khai có kiểm soát để dễ rollback.
Tham khảo hướng dẫn GitLab auto deploy.