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

Laravel Reverb在DigitalOcean应用平台无法连接问题求助

Laravel Reverb部署到DigitalOcean App Platform无法连接的解决方案

核心问题分析

错误日志显示Failed to connect to 0.0.0.0 port 6001 after 6 ms: Connection refused,说明Laravel应用在尝试连接本地绑定的0.0.0.0:6001,但在DigitalOcean App Platform环境中,这个配置存在两个关键问题:

  • 0.0.0.0是服务绑定地址,不是内部访问的目标地址
  • DigitalOcean App Platform默认不暴露非标准端口(如6001),且多进程间的访问需要正确的内部寻址

分步解决方案

1. 拆分环境变量,区分内部/外部访问地址

修改.env配置,拆分Reverb的内部连接地址和外部客户端地址:

BROADCAST_DRIVER=reverb

REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
# 内部服务间连接用localhost
REVERB_INTERNAL_HOST=localhost
# 客户端连接用你的DigitalOcean应用域名
REVERB_EXTERNAL_HOST=your-digitalocean-app-domain.com
REVERB_SCHEME=https
# Reverb内部监听端口(无需对外暴露)
REVERB_PORT=6001

2. 调整broadcasting.php配置(应用内部发广播用)

让Laravel应用通过内部地址连接Reverb,修改connections.reverb.options:

'reverb' => [
    'driver' => 'pusher',
    'key' => env('REVERB_APP_KEY'),
    'secret' => env('REVERB_APP_SECRET'),
    'app_id' => env('REVERB_APP_ID'),
    'options' => [
        // 内部访问用localhost
        'host' => env('REVERB_INTERNAL_HOST', 'localhost'),
        'port' => env('REVERB_PORT', 6001),
        // 内部连接可以用http,外部通过反向代理转https
        'scheme' => env('REVERB_INTERNAL_SCHEME', 'http'),
        'useTLS' => false,
        'encrypted' => false,
        // 关键:禁用curl的SSL验证(内部连接无需)
        'curl_options' => [
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
        ],
    ],
],

3. 调整reverb.php配置(Reverb服务自身配置)

让Reverb绑定所有接口,同时设置正确的外部hostname以适配SSL:

'servers' => [
    'reverb' => [
        'host' => env('REVERB_HOST', '0.0.0.0'),
        'port' => env('REVERB_PORT', 6001),
        // 外部客户端访问的域名
        'hostname' => env('REVERB_EXTERNAL_HOST'),
        'options' => [
            // 若通过反向代理处理SSL,这里无需配置TLS
            'tls' => [],
        ],
        // 其他配置保持不变
    ],
],

'apps' => [
    'provider' => 'config',
    'apps' => [
        [
            'key' => env('REVERB_APP_KEY'),
            'secret' => env('REVERB_APP_SECRET'),
            'app_id' => env('REVERB_APP_ID'),
            'options' => [
                'host' => env('REVERB_EXTERNAL_HOST'),
                'port' => 443, // 客户端用标准HTTPS端口
                'scheme' => env('REVERB_SCHEME', 'https'),
                'useTLS' => true,
            ],
            'allowed_origins' => ['*'],
            // 其他配置保持不变
        ],
    ],
],

4. 配置DigitalOcean App Platform进程与反向代理

  • 添加Reverb进程:在App Platform的"Components"中添加一个新的Worker组件,命令设置为php artisan reverb:start,确保它和Laravel Web进程在同一个环境下。
  • 配置反向代理:在Web组件的"Routes"中添加一条路由规则,将/reverb路径转发到Reverb进程的http://localhost:6001(DigitalOcean会自动处理内部服务发现)。
    • 路由路径:/reverb/*
    • 目标:选择你的Reverb Worker组件
    • 保留路径:开启

5. 客户端连接配置调整

前端JS代码中,将Reverb连接地址改为你的域名+路径,无需指定端口:

import Echo from 'laravel-echo';
import Pusher from 'pusher-js';

window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: 'reverb',
    key: import.meta.env.VITE_REVERB_APP_KEY,
    wsHost: import.meta.env.VITE_REVERB_EXTERNAL_HOST,
    wsPort: 443,
    wssPort: 443,
    forceTLS: true,
    enabledTransports: ['ws', 'wss'],
    path: '/reverb', // 对应反向代理的路径
});

验证步骤

  1. 重启DigitalOcean App Platform的所有组件
  2. 查看Reverb进程日志,确认服务正常启动:php artisan reverb:start --debug
  3. 用浏览器开发者工具检查Websocket连接是否成功(Network -> WS标签)
  4. 触发广播事件,查看Laravel日志是否再出现连接错误

内容的提问来源于stack exchange,提问作者Azay Karimli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:13:15