You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Ratchet WebSocket+ZMQ多环境(本地/开发/生产)配置及WSS改造全方案咨询

Laravel Ratchet WebSocket+ZMQ多环境(本地/开发/生产)配置及WSS改造全方案咨询

嘿,我来帮你捋清楚这些实际部署中的问题,咱们一个个说:

1. 多环境配置:.env是否足够,不用改代码?

完全足够!你已经把WebSocket和ZMQ的host、port都放到.env文件里了,这完全符合Laravel的环境配置最佳实践。

你只需要给不同环境准备对应的.env文件就行:

  • 本地环境:保持WEBSOCKET_HOST=0.0.0.0、WEBSOCKET_PORT=8080,ZMQ_HOST=127.0.0.1、ZMQ_PORT=5555
  • 开发测试服务器:把WEBSOCKET_HOST改成服务器的内网/公网IP(或者0.0.0.0让它监听所有网卡),端口按需调整,ZMQ因为是内部通信,保持127.0.0.1就行
  • 生产环境:同理,按服务器实际配置填写.env参数

完全不用修改WebSocketServer.php和ZMQBroadcaster.php的代码,所有环境差异都靠.env来适配,这才是正确的姿势。

2. 前端WebSocket URL怎么确定?

分场景来看:

  • 开发测试服务器(内部用户用):如果大家是通过IP访问服务器,就用ws://服务器公网IP:8080;如果已经给服务器绑定了测试域名,也可以用ws://测试域名:8080。注意要确保服务器防火墙开放了8080端口,不然前端连不上。
  • 生产环境:建议用域名,而且后续要切换WSS的话,不用改太多代码。另外,更优雅的方式是给前端也配置环境变量:比如在Vue项目的.env.development和.env.production里定义VITE_WEBSOCKET_URL,然后代码里用import.meta.env.VITE_WEBSOCKET_URL来创建WebSocket实例,这样切换环境自动适配,不用硬编码URL。

3. WSS(安全WebSocket)的改造步骤

Ratchet本身不直接支持WSS,咱们需要借助Nginx做反向代理来实现,步骤很清晰:

第一步:准备SSL证书

不管是开发还是生产环境,先搞到SSL证书(生产用Let's Encrypt免费证书就行,开发环境也可以用自签证书)。

第二步:配置Nginx反向代理

在你的域名Nginx配置里添加这段规则,把WSS请求转发到Ratchet的WebSocket服务:

location /ws {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

配置完重启Nginx,前端就可以用wss://你的域名/ws来连接了,不用直接访问8080端口,安全又方便。

第三步:调整Laravel和Ratchet的配置

  • Ratchet的WebSocketServer.php里的host保持0.0.0.0就行,让它监听所有网卡,这样Nginx能正常转发请求
  • ZMQ的配置不用改,因为是Laravel和WebSocket服务之间的内部通信,保持127.0.0.1和对应端口即可,不用暴露到公网

额外提醒:生产环境的进程守护

开发环境用php artisan websocket:serve启动没问题,但生产环境得用进程守护工具(比如Supervisor或者systemd)来保证WebSocket服务不会意外停止。举个Supervisor的配置例子:

[program:laravel-websocket]
process_name=%(program_name)s_%(process_num)02d
command=php /你的项目绝对路径/artisan websocket:serve
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/你的项目绝对路径/storage/logs/websocket.log

你已经做的尝试是对的

我已经试过把host/port移到.env里,本地运行php artisan websocket:serve后能通过ws://localhost:8080成功连接

这一步完全正确,后续只要按照上面的思路给不同环境配置对应的.env和Nginx规则就行。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:24:36