Laravel Websockets在Cpanel生产环境无法运行求助排查
Cpanel环境下BeyondCode Websockets连接失败排查要点
1. 端口与网络权限问题
- Cpanel服务器默认会限制对外暴露的端口,3030端口大概率未被放行。需联系主机商在服务器防火墙(如CSF/LFD)中开放3030端口的入站/出站请求,同时确认Cpanel后台的
ConfigServer Security & Firewall规则是否允许该端口。 - 启动websocket服务时,必须绑定公网可访问的IP,不能仅绑定
127.0.0.1。启动命令改为:php artisan websocket:serve --host=0.0.0.0 --port=3030
2. .env配置修正
- 确保广播驱动设置为
pusher:BROADCAST_DRIVER=pusher - 核对
PUSHER_APP_ID、PUSHER_APP_KEY、PUSHER_APP_SECRET与config/websockets.php中的配置完全一致,生产环境禁止使用本地测试密钥。 - 设置正确的公网访问参数:
PUSHER_HOST=你的生产域名或公网IP PUSHER_PORT=3030 PUSHER_SCHEME=https # 若未启用SSL则设为http APP_URL=https://你的生产域名 # 必须是公网可访问的地址
3. config/broadcasting.php配置检查
- 确认
pusher连接的options参数与.env匹配,重点关注host、port、scheme及SSL相关项:'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER', ''), // BeyondCode无需官方集群,可留空 'host' => env('PUSHER_HOST', '127.0.0.1'), 'port' => env('PUSHER_PORT', 3030), 'scheme' => env('PUSHER_SCHEME', 'http'), 'useTLS' => env('PUSHER_SCHEME') === 'https', 'encrypted' => env('PUSHER_SCHEME') === 'https', ], ],
4. Echo前端配置调整
- 确保bootstrap.js中的Echo初始化参数与后端一致,且注入了正确的环境变量:
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, wsHost: process.env.MIX_PUSHER_HOST, wsPort: process.env.MIX_PUSHER_PORT, wssPort: process.env.MIX_PUSHER_PORT, forceTLS: process.env.MIX_PUSHER_SCHEME === 'https', enabledTransports: ['ws', 'wss'], disableStats: true, }); - 执行
npm run prod编译前端资源后再部署,确保环境变量正确注入到前端代码中。
5. 后台进程稳定性保障
- Cpanel会限制终端关闭后的后台进程存活时间,直接执行启动命令会随终端关闭终止服务。需用
nohup配合后台运行:nohup php artisan websocket:serve --host=0.0.0.0 --port=3030 > /dev/null 2>&1 & - 执行
ps aux | grep websocket确认进程是否存活,且绑定了正确的端口和IP。
6. SSL证书配置(HTTPS环境)
- 若生产环境用HTTPS,需在
config/websockets.php中配置SSL证书路径(使用服务器绝对路径,如Cpanel证书通常在/etc/ssl/certs/或用户目录的ssl文件夹):'ssl' => [ 'local_cert' => env('WEBSOCKETS_SSL_LOCAL_CERT', '/path/to/your/cert.pem'), 'local_pk' => env('WEBSOCKETS_SSL_LOCAL_PK', '/path/to/your/privkey.pem'), 'passphrase' => env('WEBSOCKETS_SSL_PASSPHRASE', ''), ],
内容的提问来源于stack exchange,提问作者Noman Arshad
相关产品推荐
相关产品推荐

