Sockudo
Tổng quan
Sockudo là WebSocket server tự host, tốc độ cao và tương thích giao thức Pusher. Dùng Sockudo để thêm tính năng realtime (thông báo, cập nhật trực tiếp, chat) cho ứng dụng mà không cần trả phí dịch vụ bên ngoài. Laravel Broadcasting, Laravel Echo và pusher-js dùng được với Sockudo mà không phải sửa code: bạn chỉ cần trỏ chúng về máy chủ của mình.
Sockudo thay thế Soketi, vốn không còn được cập nhật.
Cài đặt Sockudo
- Vào FlashPanel > Máy chủ > máy chủ của bạn > Ứng dụng và mở tab Chưa cài đặt.
- Tìm Sockudo và bấm Cài đặt.
- Chọn Phiên bản và nhập Port mà Sockudo lắng nghe (mặc định
6001). Bấm Cài đặt. - Theo dõi tiến trình ở trang Sự kiện. Quá trình cài đặt thường mất chưa tới 1 phút.
Khi cài xong, FlashPanel tự tạo một app với App ID, Key và Secret ngẫu nhiên. Sockudo tự khởi động và tự chạy lại khi máy chủ khởi động lại.
Lấy thông tin kết nối
- Ở tab Đã cài đặt của trang Ứng dụng, bấm nút Cấu hình (biểu tượng bánh răng) trên dòng Sockudo.
- File cấu hình được mở ra. Tìm mục
[[app_manager.array.apps]]:
[[app_manager.array.apps]]
id = "..." # App ID
key = "..." # App Key
secret = "..." # App SecretDòng port ở đầu file là port Sockudo đang lắng nghe.
Kết nối ứng dụng Laravel
- Mở file
.envcủa website và đặt các giá trị sau. Thay phần giữ chỗ bằng thông tin trong file cấu hình và tên miền của bạn:
BROADCAST_CONNECTION=pusher
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST=your-domain.com
VITE_PUSHER_PORT=443
VITE_PUSHER_SCHEME=https- Build lại frontend (ví dụ
npm run build) để trình duyệt dùng giá trịVITE_PUSHER_*mới.
PUSHER_*dùng cho backend Laravel gửi sự kiện. Khi website và Sockudo cùng một máy chủ, giữ127.0.0.1và port của Sockudo.VITE_PUSHER_*dùng cho trình duyệt kết nối. Dùng tên miền của bạn với port443vàhttps, rồi cấu hình proxy Nginx bên dưới.
Kết nối qua tên miền có SSL
Trình duyệt trên website HTTPS chỉ mở được kết nối WebSocket bảo mật (wss://). Proxy Sockudo qua Nginx của website để dùng chung tên miền và chứng chỉ SSL:
- Mở website và sửa cấu hình Nginx.
- Thêm block sau vào trong block
server { ... }lắng nghe port 443. Đổi6001nếu bạn chọn port khác:
location /app {
proxy_pass http://127.0.0.1:6001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 60;
}- Lưu cấu hình. Trình duyệt sẽ kết nối tới
wss://your-domain.com/app/your-app-key.
Đổi port hoặc cấu hình
- Bấm nút Cấu hình trên dòng Sockudo và sửa file (ví dụ đổi
port = 6001). - Lưu file.
- Bấm Khởi động lại trên dòng Sockudo để áp dụng thay đổi.
- Cập nhật
PUSHER_PORTtrong.envvà port trongproxy_passcủa Nginx cho khớp.
Xem log
Bấm nút Nhật ký trên dòng Sockudo để xem log. Bạn cũng có thể khởi động, dừng hoặc khởi động lại Sockudo ở trang Systemd Service.
Chuyển từ Soketi
Soketi không còn hiện trong tab Chưa cài đặt. Máy chủ đã cài Soketi vẫn chạy bình thường và vẫn gỡ được.
- Ở tab Đã cài đặt, bấm Gỡ cài đặt trên dòng Soketi và xác nhận.
- Cài Sockudo theo hướng dẫn ở trên. Nếu giữ port mặc định
6001, cần gỡ Soketi trước vì hai ứng dụng dùng chung port. - Cập nhật
PUSHER_APP_ID,PUSHER_APP_KEYvàPUSHER_APP_SECRETtrong.envbằng giá trị mới trong file cấu hình Sockudo, rồi build lại frontend.
Ghi chú & Cảnh báo
- Lưu ý: Cài lại hoặc cập nhật Sockudo giữ nguyên file cấu hình hiện có, nên App ID, Key, Secret và port không đổi. Port nhập khi cài lại sẽ bị bỏ qua; hãy đổi port trong file cấu hình.
- Lưu ý: Khởi động lại Sockudo sẽ ngắt kết nối mọi client trong vài giây. Laravel Echo và
pusher-jstự kết nối lại, nhưng sự kiện gửi trong lúc đó sẽ bị mất. - Cảnh báo: Giữ bí mật Secret. Ai có Secret đều gửi được sự kiện tới người dùng của bạn. Không đặt Secret trong biến
VITE_*hay code frontend. - Cảnh báo: Không mở port Sockudo ở Quy tắc tường lửa trừ khi client cần kết nối trực tiếp. Kết nối qua tên miền với Nginx an toàn hơn và hỗ trợ SSL.