Thực Hành Docker 10 - Deploy Fullstack SERN Production | Nginx (React)/Node.JS/MySQL với Docker
Вставка
- Опубліковано 9 лют 2025
- Trong video này, chúng ta sẽ cùng nhau triển khai dự án fullstack SERN lên môi trường production bằng cách chạy nginx (react), node.js và mysql với docker compose.
🌹Bạn nào muốn donate hay mua cho mình cốc cà phê, cái pizza hay chỉ là gói mì tôm hảo hảo, dùng link này nhé: hoidanit.githu...
🤩Trở thành "HỘI VIÊN" để NHẬN THÊM NHIỀU V-I-P QUYỀN LỢI, ĐĂNG KÝ TẠI ĐÂY:
🤝 / @hoidanit
🌎 Tìm mình tại đây:
1. Facebook Fanpage (Tiếng việt): / askitwitheric
2. Facebook Fanpage (Tiếng anh): / haryphamdev
3. Group trao đổi học tập Facebook: / hoidanit
4. Github: github.com/har...
5. UA-cam channel: / @hoidanit
6. Email: ads.hoidanit@gmail.com
ĐỪNG QUÊN NHẤN CHUÔNG 🔔 ĐỂ NHẬN CẬP NHẬT VIDEO MỚI NHẤT CŨNG NHƯ ► ĐĂNG KÝ KÊNH! ► bit.ly/31P4KhK
Các bài hướng dẫn về Docker của anh rất hay và bổ ích. Có 1 phần nhỏ em muốn góp ý khi dùng docker-compose, giữa các container nó sẽ có 1 card mạng private ảo , lúc này anh muốn kết nối backend sang database thì chỉ cần đi qua hostname của database, docker sẽ tự phân giải hostname thành 1 ip local để kết nối sang database mà không cần phải mở port 3307 ra phía ngoài. Thường thì em chỉ mở port database ra ngoài để tiện thao tác chỉnh sửa sau đó là ngắt hẳn để an toàn
cái này là expose port. khoá này mình ko giải thích (phần public). còn series này nằm trong khoá deploy của mình..
dù sao thì cũng cảm ơn bạn đã góp ý :v
@@hoidanit😄hóa ra là vậy
Giọng anh nghe cuống
Quá hay😊
cảm ơn bạn đã ủng hộ :v
ngồi cả buổi để xem, seri này hay quá. Có cái mình muốn hỏi, vd sau mình deploy prod, nếu FE/BE thay đổi, thì mình phải chạy lại toàn bộ ah? Mình thấy có cái rollback khi gặp sự cố thì phải làm ntn?
series này tượng trưng cho công cụ "miễn phí", nên mọi thứ bạn cần tự làm.
nếu đi làm, nó sẽ như này (cách đơn giản nhất bạn nhé):
1. người ta sẽ "bỏ tiền" để mua registry cho docker (hoặc mua server rồi tự tạo). tức là nơi lưu trữ docker image "private". bạn dùng docker hub là miễn phí. muốn private thì trả phí
như vậy, mỗi lần bạn muốn tạo ra 1 version của phần mềm, chính là đánh tag cho docker image (giải quyết câu chuyện backup của bạn, hay thậm chí là rollback)
2. sau khi đã lưu đc docker image, thì bạn chỉ sửa file docker-compose, nó sẽ tự động kéo chính xác image về cho bạn
trong thực tế, bước này sẽ đc CD làm (ví dụ như argo cd). mỗi lần bạn push code, nó build image, rồi kéo về cho bạn
cơ mà again, lại trả phí :v
vì trên đời này, làm gì có cái gì ngon bổ rẻ cả :v
Cho e hỏi anh có share source của phần fe và be booking care này ko ạ
phần comment mình pinned ở video thực hành 01 đấy bạn
Anh cho e hỏi ở phút 4:52, anh thay địa chỉ trong file .env nhưng không update lại source trên docker thì phần source này hiện tại đang nằm ở máy local hay nằm ở trên host thuê vậy anh?
đấy là mình migrate data mà bạn. chạy tại local thôi. chỉ khác ở chỗ là database ở host
@@hoidanit Dạ, e đã hiểu rồi, cảm ơn anh về bài giảng ạ 😍
Vậy là bắt buộc phải copy project lên linux và chạy docker-compose à a?
server yếu nên vậy đấy bạn. còn thực tế đi làm (bạn có private registry để lưu docker images) thì bạn chỉ viết docker compose pull images về thôi
Chào anh, e theo khóa docker của a cũng dc 1 tuần rồi, e có chút thắc mắc, nếu e đã viết xong project dưới localhost, muốn đẩy toàn bộ project bao gồm code + database đã xong vào Docker có được không, hay phải build từ đầu. Mong a sớm phản hồi
câu hỏi của bạn liên quan gì tới docker đâu. bạn có rất nhiều options để sử dụng:
1. build images rồi đẩy lên docker hub. sau đấy viết docker compose để chạy
2. build images tại local rồi chạy luôn với docker
còn cái database thì bạn init giá trị cho nó
p/s: bạn xem phần thực hành thì mình đã làm như trên rồi còn gì, và:
bạn có thể tự test những gì bạn thắc mắc =))
@@hoidanit e build dc 1 con wordpress, sau khi xong xuôi thì vẫn loay hoay k biết đưa vào docker như thế nào để bảo toàn công sức mih đã làm trên wordpress, nhưng chắc e sẽ thử option 2, cảm ơn a đã chia sẻ.
mình nghĩ cách dễ nhất cho bạn là: export data hiện tại ra. chạy xong wordpress với docker thì import data vào :v
@@hoidanit mới đầu tìm hiểu về docker thì e mong muốn sẽ đóng gói tất cả lên container, bao gồm tất cả dữ liệu database, chỉ cần cấu hình file là nó sẽ chạy như kiểu bung nén ra kkk, trình e có hạn nên đặt mấy câu hỏi ngô ngê 🤣🤣
Phần source code FE và BE này có phải nội dung nằm trong khoá học Node hay React của a ko ạ
Khoá fullstack sern bạn nhé
anh cho em hỏi là... hiện tại project của em, em làm là một backend, một frontend, một admin ba project riêng biệt cho một website. như em thấy tại booking care của mình thì a dùng một domain cho cả 3... do frontend của a code chung vs admin... còn như em thì phải mua mấy domain anh?. em có đọc thì họ bảo một domain rồi chia subdomain tuy nhiên em chưa hình dung ra ?
cách dễ nhất là dùng 1 domain, chạy khác port thôi bạn. như website hoidanit.com.vn của mình thì:
frontend: nextjs
backend: nestjs
admin: cra với antd. như vậy cũng là 3 projects giống bạn đấy :v
@@hoidanit ví dụ như frontend port 80, admin 8000 , backend là 8080 à anh?
@@hoidanit cho em hỏi luôn là cho tất cả vào cũng một compose luôn anh nhỉ?
đại khái là vậy. phần còn lại google tiếp thôi bạn.kk
anh ơi làm sao mở lên được cái giao diện như vậy ạ. Em mua xong mở terminal ở máy thông qua ssh kết nối được và dùng ở trong terminal không à Ko xem được giao diện gì cả
đoạn nào trong video thế bạn
@@hoidanit dạ em làm được rồi. E cảm ơn ạ
@@hoidanit anh cho em hỏi à. trong file docker-compose em có service backend tên là my-backend thì lúc này ở phía frontend em có thể gọi api xuống bằng tên service và port đúng không ạ. VD: my-backend:8080 thì nó có vào được backend không ạ
E đã fix dc refresh page 404. Thank a
ahihi :v
Bạn cho mình hỏi nếu server down thì khi nó up, docker có tự động khởi động lại không?
thông thường sẽ là ko. bạn cần setup docker và cái linux của bạn để docker auto chạy cùng linux
Sao anh không push image lên docker hub rồi ở con VPS anh pull về ạ
vì nó là public đấy bạn :v
bản.free của docker hub chủ lưu đc 1 image private thôi á
@@hoidanit dạ thanks anh. anh dạy dễ tiếp thu lắm ạ
e thấy với docker thì khi chuyển từ máy dev sang server chỉ cần copy images rồi chạy.Vậy với docker-compose thì làm như thế nào ạ chứ copy cả sourcecode sang thì không hay lắm
nó phụ thuộc vào nơi nào bạn lưu images. free hay trả phí.
bạn cần phải trả lời câu hỏi trên, thì mới biết tại sao trong video mình làm vậy :v
A cho e hỏi với e dùng ProxyPass của nginx thì dùng tên upstream backend_servers có thể truy cập tới backend.
Trong Angular, em dùng router /products để tạo component ProductList, trong đó có dùng service gọi tới back-end với api: backend_servers hay spring-backend:8443 đều không được ạ.
Em đã Expose cổng 8443
làm gì là https nhỉ. http thôi bạn
@@hoidanit do e setup thêm self-ssl á anh
Mình quăng source code lên server hả a. Em có setup gitlab ci để build thành image. Xong docker pull bên server để run. 😅. Cần lắm video setup trigger auto deploy qua gitlab từ anh. Cảm ơn anh.
=)) phần CD đọc docs của nó rồi làm thôi bạn. chứ mình làm như này vì ko có tiền đấy. setup CI/CD rồi thì nhàn hơn nhiều
cái folder source code , em đẩy lên git xong vào vps kéo về được anh , thay vì phải copy từ máy thật qua vps như này
thực tế là cá nhân mình cug làm vậy.
cơ.mà khi hd khoá học, bạn sẽ cần hd cài đặt và setup git nữa => copy là cách nhanh nhất.
và thực tế, đi làm, có nhiều server nó chặn internet, nên mình giới thiệu cách phù hợp :v
à. còn 1 case nữa. là cần build project. vps quá yếu sẽ ko build đc. build sẵn rồi copy lên sẽ giải quyết đc case đấy :v
Bạn ơi cho mình hỏi là mình dùng Spring Boot của java cho BE. mình không dùng được câu lệnh ( npx sequelize-cli db:migrate vì nó chỉ dùng cho Nodejs ) để hiện thị bảng bên DBEAVER . vậy dùng lệnh gì để nó hiện thị được bảng bên DBerver nhỉ. Mình cảm ơn.
bạn tìm hiểu cách migrate data của spring boot. sao lại áp dụng tư duy như vậy, phải tìm công cụ tương ứng chứ bạn (mình nhớ ko nhầm là liquibase) thì phải
Hi a, e bị lỗi refresh page nginx, lỗi này fix thế nào ạ? Mong a hướng dẫn
nếu bạn dùng react, thì cần cấu hình thêm file index.html (google rồi xem trên stackoverflow thôi bạn)
minh chỉ upload folder build của FE và BE với producttion thôi thì có chạy được k a,hay bắt buộc phải upload hết cả suorce code lên vậy a
FE cần mỗi thư mục build (tiết kiệm time và nếu server có ít RAM)
BE thì cũng có thể làm như vậy, hoặc upload code lên rồi build
p/s: a chọn upload code cho nhanh. còn thực tế e có thể lưu hết trên git, lên server cài đặt git, sau đấy kéo code về :v
em muốn chay https thì config sao vậy ạ?
phần này mình mới làm bên khóa : hoidanit.vn/khoa-hoc/ultimate-guide-to-deploy-react-nodejs-640bee82f7099c369b3bc6a4.html
còn nếu bạn muốn làm, thì tìm hiểu về certbot bạn nhé
Chào anh! Em chỉ muốn deploy backend để gọi api cho app thì phải làm sao ạ
vậy bạn bỏ phần frontend đi. chứ dựng với docker nó có luôn database, về cài đặt cực kỳ tiện :v
@@hoidanit em có cần phải thêm nginx vào không ạ
Mình cần tạo 1 web bán hàng kiểu shopee có dc ko bạn
nó là 1 team bạn ạ. 1 người làm ko nổi. mấy cái web bán hàng, bạn dùng wordpress cho nhanh :v
Chào anh, cho em hỏi em setup như này rồi mà khi lên server nó vẫn bị lỗi CORS là sao anh nhỉ:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
bạn check xem frontend và backend setup đúng chưa.vì khi này,gọi qua nginx thì xuất phát cùng 1 origin nên sẽ ko còn CORS nữa
@@hoidanit em gọi thằng từ FE tới BE luôn ạ, không qua nginx proxy nữa. Chạy trên localhost thì ok mà deploy lên server lại lỗi như vậy :((
chào anh ạ, em hiện tại mới bắt đầu học nginx và có bài tập ở lớp tạo con webserver để deploy 1 cái web cơ bản ạ. Thì em thấy trong tất cả file default.conf của anh ở dòng servername localhost; cái này em hiểu là nó chỉ chạy trong localhost nhưng mà sao anh gõ địa chỉ ip public của con vps nó lại tự trỏ tới con web của anh ạ em hơi thắc mắc
haha. vps cug là localhost thôi mà. điểm khác biệt là có thể kết nối ra ngoài internet.
còn nếu e dùng là địa chỉ ip, thì sau này sẽ dùng cho load balancer chẳng hạn. a ví dụ là thế :v
@@hoidanit em cảm ơn ạ
Cái này là anh vẫn dùng con vps 89k à anh?.
đúng bạn nhé. 1 tháng nên hết vậy. vừa rẻ vừa tiện, đáp ứng đc nhu cầu học tập
deploy lên cổng 80 với nginx vậy sau này ssl web bằng nginx thì chung cổng mất
ssl port 443 bạn nhé. bạn quan tâm thì có thể tham khảo khoá học này của mình, mình có làm phần setup ssl: hoidanit.com.vn/course/ultimate-guide-to-deploy-react-nodejs?id=640bee82f7099c369b3bc6a4