Tiếng Việt
Laravel Reverb
Laravel Reverb là WebSocket server của Laravel dùng cho broadcast thời gian thực. Reverb lắng nghe ở một cổng nội bộ (mặc định 8080) và Nginx chuyển kết nối WebSocket của trình duyệt tới đó qua HTTPS. Có hai cách đưa Reverb ra ngoài:
- Tên miền con (khuyến nghị): trình duyệt kết nối tới
wss://ws.domain.com. Cách đơn giản nhất, không cần viết cấu hình Nginx. - Đường dẫn con: trình duyệt kết nối tới
wss://domain.com/ws. Không cần thêm tên miền hay chứng chỉ SSL.
Yêu cầu
- Website Laravel trên FlashPanel đã cài Reverb (
php artisan install:broadcasting). - Máy chủ dùng Nginx.
- Website mà trình duyệt kết nối tới đã cài SSL (xem SSL).
Bước 1: Chạy Reverb ở chế độ nền
Reverb cần chạy liên tục. Trong trang Supervisor của máy chủ, bấm Thêm mới và điền:
- Command:
php artisan reverb:start - User: người dùng của website Laravel
- Directory: thư mục website Laravel, ví dụ
/home/flashpanel/domain.com - Number Processes:
1
Bấm Lưu. Mỗi khi đổi các giá trị Reverb trong .env, hãy khởi động lại tiến trình này để Reverb đọc lại cấu hình.
Bước 2, cách 1: Tên miền con
Tạo website
ws.domain.com(trỏ DNS về máy chủ) với Proxy Port là8080, rồi cài SSL cho website. Website có Proxy Port sẽ chuyển toàn bộ truy cập, kể cả kết nối WebSocket, tới cổng đó nên không cần thêm cấu hình Nginx.Mở
.envcủa website Laravel (mục .env trong nhóm Tiện ích ở trang Tổng quan) và đặt:iniREVERB_APP_ID=123456 REVERB_APP_KEY=your_app_key REVERB_APP_SECRET=your_app_secret REVERB_HOST="ws.domain.com" REVERB_PORT=443 REVERB_SCHEME=https VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="${REVERB_HOST}" VITE_REVERB_PORT="${REVERB_PORT}" VITE_REVERB_SCHEME="${REVERB_SCHEME}"Build lại front end (
npm run build) để các giá trịVITE_mới được đưa vào, rồi khởi động lại tiến trình Reverb.
Bước 2, cách 2: Đường dẫn con
Trong
.envcủa website Laravel, ứng dụng gửi sự kiện thẳng tới Reverb ngay trên máy chủ, còn trình duyệt kết nối qua tên miền:iniREVERB_APP_ID=123456 REVERB_APP_KEY=your_app_key REVERB_APP_SECRET=your_app_secret REVERB_HOST="127.0.0.1" REVERB_PORT=8080 REVERB_SCHEME=http VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="domain.com" VITE_REVERB_PORT=443 VITE_REVERB_SCHEME=httpsTrong cấu hình Echo ở front end (thường là
resources/js/echo.js), thêm dòngwsPath:jswindow.Echo = new Echo({ broadcaster: 'reverb', key: import.meta.env.VITE_REVERB_APP_KEY, wsHost: import.meta.env.VITE_REVERB_HOST, wsPort: import.meta.env.VITE_REVERB_PORT ?? 80, wssPort: import.meta.env.VITE_REVERB_PORT ?? 443, wsPath: '/ws', // thêm dòng này forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https', enabledTransports: ['ws', 'wss'], });Trong trang cấu hình web server của website Laravel, bấm
Thêm Cấu Hình (server), nhập khối bên dưới, bấmThêm Cấu Hìnhrồi bấmĐồng bộ:nginxlocation /ws/app { proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass http://127.0.0.1:8080/app; }Build lại front end (
npm run build), rồi khởi động lại tiến trình Reverb.
Kiểm tra kết nối
Mở website, bấm F12, chọn tab Network với bộ lọc WS rồi tải lại trang. Kết nối tới wss://ws.domain.com/app/... (hoặc wss://domain.com/ws/app/...) có trạng thái 101 nghĩa là Reverb đã hoạt động. Nếu thất bại, xem log của tiến trình Reverb trong trang Supervisor.
Triển khai code
Thêm php artisan reverb:restart vào kịch bản triển khai của website để Reverb nạp code mới sau mỗi lần triển khai.