Cách cấu hình SSL miễn phí khi deploy NodeJS bằng Docker trên VPS
Deploy app NodeJS lên VPS xong, chạy được qua HTTP chưa đủ. Trình duyệt báo “Not Secure” → mất uy tín. API không có HTTPS → cookie, token, session dễ bị nghe lén. SEO, webhook, OAuth callback, thanh toán, đăng nhập Google/GitHub… đều thích hoặc bắt buộc SSL.
Tin tốt: SSL miễn phí, setup không quá khó. Combo phổ biến, ổn định nhất: Docker + Nginx reverse proxy + Let’s Encrypt. Mô hình này tách biệt rõ: app NodeJS lo business logic, Nginx lo SSL và route, Certbot lo cấp/gia hạn chứng chỉ.
Bài này đi từ tư duy kiến trúc → cấu hình thực tế → auto renew → lỗi hay gặp. Mục tiêu: sau khi đọc, bạn có thể tự dựng HTTPS chuẩn trên VPS cho app NodeJS chạy trong Docker.
Kiến trúc nên dùng
Mô hình khuyến nghị:
– NodeJS container → chạy app nội bộ, ví dụ port 3000
– Nginx container hoặc Nginx trên host → public 80/443, reverse proxy vào NodeJS
– Certbot → xin SSL miễn phí từ Let’s Encrypt
– VPS → có domain trỏ đúng IP
Luồng:
– user -> https://yourdomain.com
– Nginx :443 nhận req
– Nginx dùng cert SSL
– Nginx proxy req vào node-app:3000
Lý do không nhúng SSL trực tiếp vào NodeJS:
– Khó quản lý cert → renew, mount, reload phức tạp hơn
– Nginx tối ưu hơn → TLS, redirect, cache, gzip, rate limit
– Dễ scale → nhiều app chung 1 reverse proxy
Điều kiện trước khi bắt đầu
Bạn cần:
– 1 VPS Ubuntu/Debian phổ biến
– Domain, ví dụ example.com
– DNS A record trỏ về IP VPS
– Docker + Docker Compose
– Port 80, 443 mở trên firewall/security group
– Port 80 → phục vụ challenge cho Let’s Encrypt, sau đó redirect HTTPS
– Port 443 → dùng chứng chỉ SSL
– proxy_pass http://node-app:3000 → trỏ đến service Docker tên node-app
– site chuyên nghiệp hơn
– dữ liệu mã hóa an toàn hơn
– dễ tích hợp dịch vụ ngoài
– sẵn sàng production đúng chuẩn hơn
Nếu mới bắt đầu, hãy giữ setup đơn giản: 1 app NodeJS, 1 Nginx, 1 Certbot, 1 domain. Khi đã quen, bạn có thể mở rộng sang nhiều domain, nhiều app, wildcard cert, hoặc dùng giải pháp tự động như Traefik/Caddy. Nhưng nền tảng vẫn vậy: tách app khỏi SSL layer để dễ vận hành, dễ debug, dễ scale.
Nếu triển khai thực tế, lời khuyên cuối: test kỹ 3 thứ sau mỗi lần deploy:
– http -> https redirect đúng
– cert còn hạn
– app nhận đúng IP/protocol gốc qua proxy
Làm tốt 3 điểm đó → hệ thống HTTPS của bạn sẽ ổn định, an toàn, ít phải chữa cháy.