如何在Ubuntu+Apache2生产环境中运行Laravel Websockets?
在Ubuntu + Apache2生产环境运行Laravel Websockets服务的完整指南
我之前也碰到过一模一样的需求——本地用php artisan websockets:server跑起来毫无问题,但生产环境总不能一直开着终端挂着进程。下面是我亲测可行的方案,核心靠Supervisor守护进程+Apache反向代理来实现稳定运行:
1. 用Supervisor把Websockets变成常驻后台进程
Supervisor是Linux下的进程管理工具,能帮我们自动启动、重启Websockets服务,就算服务器重启也不用手动再开。
- 先安装Supervisor:
sudo apt-get install supervisor - 进入Supervisor的配置目录,创建专属配置文件:
cd /etc/supervisor/conf.d sudo nano laravel-websockets.conf - 粘贴以下配置(记得替换成你的项目路径和PHP实际路径):
[program:laravel-websockets] process_name=%(program_name)s_%(process_num)02d command=php /var/www/your-project-folder/artisan websockets:server --port=6001 autostart=true autorestart=true user=www-data numprocs=1 redirect_stderr=true stdout_logfile=/var/www/your-project-folder/storage/logs/websockets.log - 保存退出后,更新Supervisor配置并启动服务:
sudo supervisorctl reread sudo supervisorctl update - 检查服务状态,显示
RUNNING就说明搞定了:sudo supervisorctl status laravel-websockets
2. 配置Apache2反向代理(让外部通过80/443端口访问)
生产环境一般用80(HTTP)或443(HTTPS)端口,我们需要把Websocket请求转发到6001端口(就是刚才配置的服务端口)。
- 先启用Apache的必要模块:
sudo a2enmod proxy proxy_http proxy_wstunnel ssl - 重启Apache让模块生效:
sudo systemctl restart apache2 - 编辑你的站点配置文件(比如
/etc/apache2/sites-available/your-domain.conf),在<VirtualHost *:443>块里添加以下内容:# 处理WebSocket连接核心配置 ProxyPass "/ws" "ws://127.0.0.1:6001/ws" ProxyPassReverse "/ws" "ws://127.0.0.1:6001/ws" # 可选:如果需要在生产环境访问Websockets仪表盘 ProxyPass "/laravel-websockets" "http://127.0.0.1:6001/laravel-websockets" ProxyPassReverse "/laravel-websockets" "http://127.0.0.1:6001/laravel-websockets" - 测试配置是否合法,没问题就重启Apache:
sudo apache2ctl configtest sudo systemctl restart apache2
3. 调整Laravel项目的.env配置
确保你的.env文件里的Websockets参数和生产环境匹配:
PUSHER_APP_ID=你的应用ID PUSHER_APP_KEY=你的应用KEY PUSHER_APP_SECRET=你的应用SECRET PUSHER_HOST=127.0.0.1 PUSHER_PORT=6001 PUSHER_SCHEME=https # 站点用HTTPS的话一定要填https PUSHER_APP_CLUSTER=mt1 # 随便填就行,因为用的是自己的服务器 # HTTPS环境下必须配置SSL证书路径 LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT=/path/to/your/cert.pem LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=/path/to/your/private-key.pem LARAVEL_WEBSOCKETS_SSL_PASSPHRASE=你的证书密码(如果有的话)
配置完别忘了清缓存:
php artisan config:clear php artisan cache:clear
4. 防火墙安全设置
不需要对外开放6001端口,只需要允许Apache本地访问即可:
sudo ufw allow in from 127.0.0.1 to any port 6001
额外小提示
- 定期查看日志排查问题:
tail -f /var/www/your-project-folder/storage/logs/websockets.log - 如果Supervisor启动失败,先检查配置文件里的路径是否正确,
www-data用户有没有项目目录的读写权限
内容的提问来源于stack exchange,提问作者Fantasmic
相关产品推荐
相关产品推荐

