A không cần supervisor, server a là Ubuntu a cài vào đủ theo yêu cầu project này: PHP, MySQL, Redis là đủ cho project Laravel (cài qua apt hết nhé)
Em thấy anh cần chạy 1 cái queue để đưa mess vào hàng đợi, tức là mình phải dùng command line php artisan queue:work, trên server anh làm sao để giữ được command tương tự ?
Riêng Laravel Echo a chạy như 1 app NodeJS ở cổng 6001. A viết script .js rồi dùng PM2 để chạy
Đoạn này nghe có vẻ ok ạ, nhưng như vậy laravel echo phải init trong con PM2 này ạ
@nam123456 mình nghĩ bạn cứ vững base đi, vì khi bạn chuyển sang học laravel thì những thứ như phân trang các kiểu kia chỉ tốn của bạn 2-3 line code thôi
Cám ơn e , câu hỏi rất hay. Chờ mãi mới có người hỏi về deploy
Câu đầu tiên: a chỉ fix localhost:8000 ở mỗi file laravel-echo-server.json thôi mà e
Deploy chia làm 2 khoảng thời gian, ngày xưa và bây giờ , vì mỗi khoảng a deploy theo cách khác nhau
Ngày xưa (cách truyền thống):
A không cần supervisor, server a là Ubuntu a cài vào đủ theo yêu cầu project này: PHP, MySQL, Redis là đủ cho project Laravel (cài qua apt hết nhé)
Riêng Laravel Echo a chạy như 1 app NodeJS ở cổng 6001. A viết script .js rồi dùng PM2 để chạy
Tiếp theo a dùng Nginx như webserver vừa để chạy phần code php của Laravel (ra production mình ko có chạy php artisan server nữa nhé), vừa để forward các request cần thiết vào process Laravel Echo ở trên, đồng thời dùng Nginx thì lấy SSL(HTTPS) rất là dễ. Vậy là đủ để chạy project này.
Thời bây giờ (cách tiện hơn): yêu cầu kiến thức về Docker.
A ko cần cài PHP MySQL các thứ lằng nhằng nữa. Nhưng vẫn cần Nginx (a ko muốn chạy Nginx trong Docker vì a dùng Nginx cho nhiều project)
A viết cấu hình Dockerfile. chia project thành các service cần thiết (Mysql, Redis, Laravel Echo,....) và chạy
Cách này cực kì tiện vì e ko cần cài trực tiếp các thứ như PHP MySQL,... vào hệ điều hành, thích sửa xoá j làm thoải mái ko sợ bị hỏng, và 1 thời gian sau quay lại nhìn vào Dockerfile là e biết project của mình cần gì. Deploy và maintain cực dễ
Với cách này thì a thì a cũng chia Laravel Echo ra thành 1 service có image riêng (về khía cạnh trừu tượng thì cũng giống cách chạy như ở cách truyền thống)
Quay trở lại localhost:8000 a fix ở file laravel-echo-server.json có ảnh hưởng gì khi deploy ko? Câu trả lời là không nhé, ở phạm vi bài này, thì ko sao cả, vì khi deploy thì ta ko cần chạy php artisan serve nữa, mà dùng Nginx để "serve" Laravel.
Vậy những chỗ fix cứng localhost:8000 trong laravel-echo-server.json thì sao??? Chi tiết: trong file đó có 2 chỗ a fix cứng 1 là authHost 2 là dưới phần apiOriginAllow (để lấy danh sách user)
Vì bài này ta chỉ là public channel, nên authHost ko động tới, ta ko quan tâm
Còn với apiOriginAllow thì e đọc bên dưới nhé
Ở Nginx a cấu hình sao cho các route về /socket.io hay /apps (để lấy danh sách user trong phòng), nói chung là bắt những route giao tiếp với Laravel Echo Server, thì request sẽ được forward vào process Laravel Echo như sau:
location ~ ^/(socket.io|apps) { # /apps to get channel's info, list users,... from Laravel echo server
proxy_pass http://localhost:6001; # forward request vào đây
... other options;
}
Vậy khi truy cập từ trình duyệt, ví dụ https://example.com/socket.io/.... thì request sẽ tới Nginx, từ nginx request sẽ được pass vào http://localhost:6001, và bởi vì Nginx và Laravel Echo Server chạy ở cùng 1 server nên chúng sẽ tự biết nhau khi gọi tới localhost. Do đó e thấy ở đây request từ user bản chất là gọi vào localhost:6001 ở trên server, chính là cổng đang chạy laravel-echo-server, do đó đây KHÔNG phải là Cross-Origin, sẽ ko bị lỗi CORS. do đó thực chất trường apiOriginAllow khi deploy chạy thật thì cũng ko để làm gì cả . Chỉ dùng ở local, vì local ta chạy Laravel ở localhost:8000, trong khi Laravel Echo Server là localhost:6001, nên ta mới phải cấu hình như vậy ở trong file laravel-echo-server.json để cho phép localhost:8000 gọi tới (để lấy danh sách user chẳng hạn)
Câu cuối: bài này còn ở dạng demo, với project thật thì thường a lưu các biến cần thiết ở trong file .env, file này deploy theo cách truyền thống hay Docker thì cũng để tái sử dụng được rất là dễ. Các biến, URL, API_KEY,... sẽ ko fix cứng trong code nữa mà để ở đây
Chèn nhiều backlink vào bài viết một cách thật khéo và cho họ thoải mái copy. Như vậy mình có thêm back link mà chả tốn công. Chứ copy thì kiểu gì mà họ chẳng copy được
biểu đồ đấy không thể hiện số người dùng arch đâu.
nếu cứ để ý trên các sub reddit linux thì phải đến 70% dùng arch.
Cài Arch không hề khó. cứ làm đúng wiki là được. chỉ mất công đọc và tìm tòi thôi. từ đó tự làm mình biết nhiều thứ hơn.
I use Arch, btw.
Mình sử dụng window để build container, khi chạy câu lệnh "docker run -v D:/Docker/webroot:/var/www/html -p 9000:80 -it ubuntu-nginx /bin/bash" kết quả là success. Nhưng khi vào local host thì hiện lỗi 403, Forbiden. Mình hiểu có thể lỗi do permission của file helloworld.html trong thư mục /var/www/html không được set quyền cho user của nginx là www-data, nhưng khi mình chạy câu lệnh "chown -R www-data:www-data hello.html" thì file vẫn không đổi permission.
Không biết là mình hiểu sai lỗi hay bạn có cách nào khắc phục không ạ?
Cảm ơn
@duong.manh.hoang
lúc đầu mình làm CRUD,
giờ mình đang làm project đây,những thứ như phân trang,lấy bài viết mới nhất,... giờ vẫn code lại chứ vẫn không tự viết đc
Hi @at3s,
Cảm ơn vì bạn đã đọc bài viết này 😃
Khi value prop được truyền trong Context.Provider thay đổi, các thành phần bên trong Provider này sẽ bị re-render. Thành phần ở đây là các consuming components - component này được wrap trong Provider như bạn nói (hay còn gọi là descendant consumers),
cho phép chúng ta subscribecontext changes thông qua Context.Consumer hoặc Class.contextType nha ^^
UnhandledPromiseRejectionWarning: Error: Returned error: invalid sender
Mình gặp lỗi này mình có cho hêm chainId vào TxRow rồi mà ko được,
Tài khoản thì mình coppy rồi nên ko sai được,
Lỗi này có còn nguyên nhân nào khác ko bạn.
Hi bạn, Theo mình thì cứ để copy đi bạn, thực sự copy không ảnh hưởng đến giá trị web của bạn đâu. Bạn để ý những web của chính phủ, báo tuổi trẻ, Thanh Niên hoặc Amazon, những web lớn này cũng copy được bình thường thôi ban. Như web mình: https://sites.google.com/site/thienantravelsite , Sản phẩm của google cũng mặc định cho copy bình thường. Còn nếu bạn muốn thì vào Setting (Cài đặt) và click vào devtool là ok nhé bạn. Môt vài chia sẻ gửi đến bạn.
với mỗi 1 connect tới 1 channel sẽ qua 2 bước, 1 là authenticate sau đó thành công thì sẽ cho join, đó là lí do 2 thấy in ra 2 dòng kia ở cmd, toàn bộ những j e đang thấy được sinh ra bởi laravel-echo-server nhé.
E check lại code của e nhé, a ko thể xem cách e implement nên k thể nói rõ được, check lại những đoạn user join channel, xem cái channel user.1.to_user.2 kia ở đâu mà ra, tại sao nó ko cần authenticate mà vẫn dùng được?
Với lại bài này a viết về public channel ko cần authenticate mà e.
THẢO LUẬN
Em thấy anh cần chạy 1 cái queue để đưa mess vào hàng đợi, tức là mình phải dùng command line php artisan queue:work, trên server anh làm sao để giữ được command tương tự ?
Đoạn này nghe có vẻ ok ạ, nhưng như vậy laravel echo phải init trong con PM2 này ạ
@nam123456 mình nghĩ bạn cứ vững base đi, vì khi bạn chuyển sang học laravel thì những thứ như phân trang các kiểu kia chỉ tốn của bạn 2-3 line code thôi
Cám ơn e , câu hỏi rất hay. Chờ mãi mới có người hỏi về deploy
Câu đầu tiên: a chỉ fix
localhost:8000ở mỗi filelaravel-echo-server.jsonthôi mà eDeploy chia làm 2 khoảng thời gian, ngày xưa và bây giờ
, vì mỗi khoảng a deploy theo cách khác nhau
Ngày xưa (cách truyền thống):
apthết nhé).jsrồi dùngPM2để chạyphp artisan servernữa nhé), vừa để forward các request cần thiết vào process Laravel Echo ở trên, đồng thời dùng Nginx thì lấy SSL(HTTPS) rất là dễ. Vậy là đủ để chạy project này.Thời bây giờ (cách tiện hơn): yêu cầu kiến thức về Docker.
Quay trở lại
localhost:8000a fix ở filelaravel-echo-server.jsoncó ảnh hưởng gì khi deploy ko? Câu trả lời là không nhé, ở phạm vi bài này, thì ko sao cả, vì khi deploy thì ta ko cần chạyphp artisan servenữa, mà dùng Nginx để "serve" Laravel.Vậy những chỗ fix cứng
localhost:8000tronglaravel-echo-server.jsonthì sao??? Chi tiết: trong file đó có 2 chỗ a fix cứng 1 làauthHost2 là dưới phầnapiOriginAllow(để lấy danh sách user)authHostko động tới, ta ko quan tâmapiOriginAllowthì e đọc bên dưới nhéỞ Nginx a cấu hình sao cho các route về
/socket.iohay/apps(để lấy danh sách user trong phòng), nói chung là bắt những route giao tiếp với Laravel Echo Server, thì request sẽ được forward vào process Laravel Echo như sau:Vậy khi truy cập từ trình duyệt, ví dụ
. Chỉ dùng ở local, vì local ta chạy Laravel ở
https://example.com/socket.io/....thì request sẽ tới Nginx, từ nginx request sẽ được pass vàohttp://localhost:6001, và bởi vì Nginx và Laravel Echo Server chạy ở cùng 1 server nên chúng sẽ tự biết nhau khi gọi tớilocalhost. Do đó e thấy ở đây request từ user bản chất là gọi vàolocalhost:6001ở trên server, chính là cổng đang chạylaravel-echo-server, do đó đây KHÔNG phải là Cross-Origin, sẽ ko bị lỗi CORS. do đó thực chất trườngapiOriginAllowkhi deploy chạy thật thì cũng ko để làm gì cảlocalhost:8000, trong khi Laravel Echo Server làlocalhost:6001, nên ta mới phải cấu hình như vậy ở trong filelaravel-echo-server.jsonđể cho phéplocalhost:8000gọi tới (để lấy danh sách user chẳng hạn)"time": int(time()) * 1000000000 cho mình hỏi cái này có ý nghĩa gì vậy bạn ?
Hi anh, Em đọc bài viết của anh rất hay và em có vài thắc mắc khi deploy mong được anh giải đáp
Thanks anh ạ
Done ô ey
)
(ngon) submit vào organization thôi ô (+1)
Chèn nhiều backlink vào bài viết một cách thật khéo và cho họ thoải mái copy. Như vậy mình có thêm back link mà chả tốn công. Chứ copy thì kiểu gì mà họ chẳng copy được
biểu đồ đấy không thể hiện số người dùng arch đâu. nếu cứ để ý trên các sub reddit linux thì phải đến 70% dùng arch. Cài Arch không hề khó. cứ làm đúng wiki là được. chỉ mất công đọc và tìm tòi thôi. từ đó tự làm mình biết nhiều thứ hơn. I use Arch, btw.
bài viết thật bổ ích =))
Mình sử dụng window để build container, khi chạy câu lệnh "docker run -v D:/Docker/webroot:/var/www/html -p 9000:80 -it ubuntu-nginx /bin/bash" kết quả là success. Nhưng khi vào local host thì hiện lỗi 403, Forbiden. Mình hiểu có thể lỗi do permission của file helloworld.html trong thư mục /var/www/html không được set quyền cho user của nginx là www-data, nhưng khi mình chạy câu lệnh "chown -R www-data:www-data hello.html" thì file vẫn không đổi permission. Không biết là mình hiểu sai lỗi hay bạn có cách nào khắc phục không ạ? Cảm ơn
@duong.manh.hoang lúc đầu mình làm CRUD, giờ mình đang làm project đây,những thứ như phân trang,lấy bài viết mới nhất,... giờ vẫn code lại chứ vẫn không tự viết đc

Hi @at3s,
Cảm ơn vì bạn đã đọc bài viết này 😃
Khi
value propđược truyền trongContext.Providerthay đổi, các thành phần bên trongProvidernày sẽ bịre-render.Thành phầnở đây là cácconsuming components-componentnày đượcwraptrongProvidernhư bạn nói (hay còn gọi làdescendant consumers), cho phép chúng tasubscribecontext changesthông quaContext.ConsumerhoặcClass.contextTypenha ^^UnhandledPromiseRejectionWarning: Error: Returned error: invalid sender Mình gặp lỗi này mình có cho hêm chainId vào TxRow rồi mà ko được, Tài khoản thì mình coppy rồi nên ko sai được, Lỗi này có còn nguyên nhân nào khác ko bạn.
thanks các bạn nhiều
Hi bạn, Theo mình thì cứ để copy đi bạn, thực sự copy không ảnh hưởng đến giá trị web của bạn đâu. Bạn để ý những web của chính phủ, báo tuổi trẻ, Thanh Niên hoặc Amazon, những web lớn này cũng copy được bình thường thôi ban. Như web mình: https://sites.google.com/site/thienantravelsite , Sản phẩm của google cũng mặc định cho copy bình thường. Còn nếu bạn muốn thì vào Setting (Cài đặt) và click vào devtool là ok nhé bạn. Môt vài chia sẻ gửi đến bạn.
cảm ơn bạn
ok khê ô khê =))
với mỗi 1 connect tới 1 channel sẽ qua 2 bước, 1 là authenticate sau đó thành công thì sẽ cho join, đó là lí do 2 thấy in ra 2 dòng kia ở cmd, toàn bộ những j e đang thấy được sinh ra bởi
laravel-echo-servernhé.E check lại code của e nhé, a ko thể xem cách e implement nên k thể nói rõ được, check lại những đoạn user join channel, xem cái channel
user.1.to_user.2kia ở đâu mà ra, tại sao nó ko cần authenticate mà vẫn dùng được?Với lại bài này a viết về public channel ko cần authenticate mà e.
Bài tut này a cũng viết đc 1 tgian rồi, a tin là từ đó đến giờ đã có nhiều thay đổi, a sẽ làm lại và reply e sớm nhất nhé,