#Laravel Reverb with Docker and Traefik

2 messages · Page 1 of 1 (latest)

delicate walrus
#

I've been trying to get Laravel Reverb to work on one of our applications for quite some time now. But can't get it to work.

Here are some of my configs:

reverb.php

<?php

return [
    'default' => env('REVERB_SERVER', 'reverb'),

    'servers' => [

        'reverb' => [
            'host' => env('REVERB_SERVER_HOST', '0.0.0.0'),
            'port' => env('REVERB_SERVER_PORT', 8080),
            'hostname' => env('REVERB_HOST'),
            'options' => [
                'tls' => [],
            ],
            'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000),
            'scaling' => [
                'enabled' => env('REVERB_SCALING_ENABLED', false),
                'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'),
                'server' => [
                    'url' => env('REDIS_URL'),
                    'host' => env('REDIS_HOST', '127.0.0.1'),
                    'port' => env('REDIS_PORT', '6379'),
                    'username' => env('REDIS_USERNAME'),
                    'password' => env('REDIS_PASSWORD'),
                    'database' => env('REDIS_DB', '0'),
                ],
            ],
            'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15),
            'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15),
        ],

    ],

    'apps' => [

        'provider' => 'config',

        'apps' => [
            [
                'key' => env('REVERB_APP_KEY'),
                'secret' => env('REVERB_APP_SECRET'),
                'app_id' => env('REVERB_APP_ID'),
                'options' => [
                    'host' => env('REVERB_HOST'),
                    'port' => env('REVERB_PORT', 443),
                    'scheme' => env('REVERB_SCHEME', 'https'),
                    'useTLS' => env('REVERB_SCHEME', 'https') === 'https',
                ],
                'allowed_origins' => ['*'],
                'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60),
                'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000),
            ],
        ],

    ],

];

This is my reverb settings in my .env

REVERB_APP_ID=<ID>
REVERB_APP_KEY=<KEY>
REVERB_APP_SECRET=<SECRET>
REVERB_HOST="admin.mydomain.net"
REVERB_PORT=6001
REVERB_SCHEME=https

The port is set to 6001 since our docker host already has port 8080 in use.

Here's my port and traefik label configs


    ports:
      - 127.0.0.1:${PORT}:80
      - 127.0.0.1:${REVERB_PORT}:8080
    labels:
      # App config
      - "traefik.enable=true"
      - "traefik.http.routers.${NAME}.entrypoints=websecure"
      - "traefik.http.routers.${NAME}.rule=Host(`${HOST_URL}`)"
      - "traefik.http.routers.${NAME}.tls=true"
      - "traefik.http.routers.${NAME}.service=www-${NAME}"
      - "traefik.http.services.www-${NAME}.loadbalancer.server.port=80"
      # Reverb config
      - "traefik.http.routers.reverb.entrypoints=websecure"
      - "traefik.http.routers.reverb.rule=Host(`${HOST_URL}`) && PathPrefix(`/app`)"
      - "traefik.http.routers.reverb.tls=true"
      - "traefik.http.routers.reverb.service=reverb"
      - "traefik.http.services.reverb.loadbalancer.server.port=8080"
      - "traefik.http.services.reverb.loadbalancer.server.scheme=http"
      - "traefik.http.routers.reverb.middlewares=reverb-headers"
      - "traefik.http.middlewares.reverb-headers.headers.customrequestheaders.Upgrade=websocket"
      - "traefik.http.middlewares.reverb-headers.headers.customrequestheaders.Connection=Upgrade"

In my docker .env REVERB_PORT is set to 6001 and HOST_URL is admin.mydomain.net
My container and supervisor runs, but getting this console error

WebSocket connection to 'wss://admin.mydomain.nu:6001/app/oazik64cfikv7d97fmcx?protocol=7&client=js&version=8.4.0-rc2&flash=false' failed: WebSocket is closed before the connection is established.

I hope someone can point me in the right direction, and please just let me know if you need more information

delicate walrus
#

I managed to fix it in the end. If anyone would like to know the process, just let me know here