Dockerize ứng dụng Next.js và deploy tự động lên VPS Ubuntu

Ảo hóa ứng dụng (Containerization) không còn là xu hướng mà đã trở thành tiêu chuẩn bắt buộc của ngành phần mềm hiện đại. Với Docker, bạn đóng gói source code, môi trường (Node.js, Python...), và file cấu hình vào một "thùng container" duy nhất. Chạy được ở máy local là chắc chắn chạy được trên server.
Bước 1: Tối ưu Dockerfile cho Next.js
Khi làm việc với Next.js, nếu viết Dockerfile không khéo, image của bạn có thể nặng tới hơn 1GB. Bí quyết ở đây là sử dụng kỹ thuật Multi-stage build.
Hình 1: Quá trình build image diễn ra trong terminal.
Chúng ta sẽ chia quá trình build thành các giai đoạn:
- Deps: Chỉ cài đặt
dependencies(node_modules). - Builder: Copy source code và chạy lệnh
npm run build. - Runner: Chỉ lấy những file cần thiết từ bước Builder (thư mục
.next,public) để chạy production. Ảnh cuối cùng sẽ rất nhẹ.
Bước 2: Sử dụng Docker Compose
Ứng dụng thực tế hiếm khi chạy một mình. Bạn cần database (PostgreSQL), caching (Redis), web server (Nginx).
Thay vì chạy từng lệnh docker run lẻ tẻ, chúng ta định nghĩa tất cả trong một file docker-compose.yml.
Hình 2: Docker Compose giúp quản lý nhiều dịch vụ liên kết với nhau.
Chỉ với một lệnh docker-compose up -d, toàn bộ hệ thống của bạn sẽ được khởi động, tự động kết nối mạng với nhau một cách nhịp nhàng.