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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:40:46