Deploy and host nextjs website
Hi mọi người, Em đang gặp vấn đề về deploy và host 1 website từ nextjs. Do em không có kiến thức về deploy và host 1 website như thế nào nên mong mọi người hướng dẫn em với. Em xài nextjs đề làm website nhưng lúc build ra thì không biết làm sao để host được website. Trước đó em có sử dụng ngnix để host được website bằng reactjs thông qua port 10021, nhưng sang nextjs thì lại không biết config như nào (do không tìm đc tutorial). Nextjs có thể sử dụng vercel để host, thấy khá là tiện nhưng lúc build thì nó kêu không tìm thấy thư mục build ???. Và em đang muốn tự host chứ không muốn sử dụng vercel. Câu hỏi của em làm sao để host 1 website với:
- Server là nodejs (sử dụng expressjs)
- Source code là nextjs. Lúc build ra có thể truy cập tới server trên để lấy data
- Làm sao để host bởi một domain. ví dụ như: xyzxx.com
Mọi người giúp em với hoặc cho em xin một vài hướng dẫn để làm theo.
Note: em vẫn chưa hiểu được toàn bộ quá trình deploy của 1 website nextjs nên có thể hỏi không đúng ý, nhưng mong mọi người chỉ em thêm.
Em cảm ơn mọi người nhiều. ❤️
Hi bạn, NextJS để nó chạy được thì nó cần có 1 server (thường là NodeJS) backed phía sau (thế thì mới có khái niệm SSR ), vì bản chất nó có server rồi nên nó có thể được deploy mà hoàn toàn ko cần nginx hay apache,...
Việc của bạn rất đơn giản, lên server của bạn clone code về,
npm run build
->npm start
là web NextJS của bạn đã ready ởhttp://IP_SERVER:3000
và có thể truy cập trực tiếp từ trình duyệt đượcĐể host domain cho trang web thì cũng giản đơn ko kém, lên Godaddy sắm quả domain lởm lởm vài chục nghìn VNĐ về để học, vào trang quản trị DNS của domain trỏ nó về IP_SERVER của bạn là ngay lập tức bạn có thể truy cập trang web của bạn từ trình duyệt với địa chỉ
http://domain:3000
Nói chung để đưa web lên online thì ko khó 1 chút công sức là được rồi, đặc biệt là các web dùng JS/NodeJS cực cực cực kì dễ và nhanh chóng vì nó gần như thường chả phụ thuộc cái j ngoài nodejs cả
Nhưng ở các project thực tế xịn xò thì mình sẽ muốn toàn bộ phần deploy nó thành 1 pipeline sao cho dễ dàng, tự động nhất:
Thường khi code ae developers chỉ cố gắng làm sao localhost ko có lỗi là được nhưng ko biết là deploy cũng có 1 tỉ thứ như nào, cái này thì chỉ có trực tiếp làm, thu thập kinh nghiệm thực chiến mới khiến mình lên tay nhiều. Và cái cảm giác đưa được đứa "con cưng" của mình ra online cũng rất là "thoả mãn" . Bạn cứ follow các bước từ đơn giản xong đến phức tạp hơn như trên mình đề cập. Hi vọng giúp được bạn
@maitrungduc1410 Cảm ơn câu trả lời chi tiết của bạn rất nhiều. Tuy còn nhiều chỗ chưa hiểu quy trình lắm nhưng mình sẽ tìm hiểu thêm. Đúng như bạn nói là mình chỉ tập trung vô localhost, nhưng bước quan trong nhất là làm sao đưa "con cưng" của mình cho người khác thì gần như mình mù tịt. Ngay cả kiến trúc SSR call api từ server trên local như thế nào mình cũng k rõ nữa. Còn hoạt động của ngnix trỏ domain này nọ không hiểu sao nó làm được như vậy =)) Anyway, cảm ơn bạn nhiều. Chắc mình nên học những kiến trúc và cách hoạt động của tụi quỷ này trước đã =))
Bạn cho mình hỏi thêm nữa là hiện mình có:
Vậy các bước deploy của mình có phải như sau:
Các bước trên mình nói có đúng không vậy bạn ? Mình xin cảm ơn
@hxtruong6 hi bạn,
1 note trước khi bắt đầu đó là web B hay các web client side rendering nói chung (Vue, React, Angular), khi đã build thì nó sẽ ra file static và nó không thể tự chạy được, mà nó phải được host ở đâu đó, bằng server nào đó (NodeJS, php, python,....) hoặc bằng webserver (nginx, apache....). Khác với SSR (NextJS - web A) hoặc thuần server (như server C)
Trước khi deploy thì bạn cần đặt câu hỏi: bạn có muốn deploy tất cả chúng ở trên 1 domain hay ko? kiểu
example.com
,example.com/admin
,example.com/api
. Dựa theo những điều bạn nói thì có vẻ như vậy. Kiểu này sẽ "khó" hơn chút (tí thôi ) (kiểu deploy mỗi cái 1 domain thì sẽ dễ hơn, vì đơn giản là nó tách biệt ko chung chạ ko cần proxy path, location,...)Cách deploy:
build
Cấu hình Nginx nom sẽ như sau:
Với cách này thì Nginx sẽ serve Web B (ReactJS) như các trang HTML thông thường, nếu client request vào url mà có prefix là
/api
hoặc/admin
thì proxy request vào các backend tương ứng (backend ở đây sẽ là nextjs và nodejs)P/s: còn 1 vài cách deploy khác, mình ko muốn bạn thấy rối khi giới thiệu nhiều cách, cứ làm dần dần tìm hiểu dần nhé, cách này mình hay dùng và thấy đơn giản nhất