> For the complete documentation index, see [llms.txt](https://docs.iexexchanger.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iexexchanger.com/learn/server-domeny-i-infrastruktura/overview/process-map/reverb.md).

# Laravel Reverb и WebSocket

Laravel Reverb доставляет события в реальном времени между серверной частью, панелью и клиентским сайтом. В iEXExchanger от него зависят мгновенные сообщения чата и интерактивные обновления; сохранённые данные при этом остаются в основной системе.

## Два уровня адресов

Настройка Reverb разделяет:

| Уровень            | Назначение                                              |
| ------------------ | ------------------------------------------------------- |
| Внутренний bind    | Локальный адрес и порт процесса Reverb                  |
| Публичный endpoint | HTTPS/WSS-домен и путь, к которому подключается браузер |

Внутренний процесс слушает loopback и не публикуется в сетевом экране. Nginx принимает публичный WSS и передаёт его Reverb. Не подставляйте публичный домен в настройку bind и не открывайте внутренний порт как обход Nginx.

## Ключи и разрешённые источники

App ID, key и secret Reverb хранятся в файле окружения серверной части. Secret не передаётся браузеру и не публикуется в клиентской конфигурации. Разрешённые origins должны содержать точные рабочие домены с ожидаемым протоколом; универсальный `*` не используется в рабочей среде.

Если меняется клиентский домен или появляется отдельная тестовая среда, обновите allowlist и проверьте её отдельно. Не добавляйте случайный origin для временного устранения ошибки браузера.

## Постоянный процесс

Reverb запускается Supervisor от владельца серверного сайта:

```ini
[program:iex-reverb]
command=/opt/php84/bin/php artisan reverb:start
directory=<ПУТЬ_BACKEND>
user=<BACKEND_USER>
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=<ПУТЬ_ЖУРНАЛА>/reverb.log
```

Отладочный режим используйте только кратковременно в контролируемой сессии: он создаёт большой объём данных. Основные параметры сервера, scaling и перезапуска описаны в [официальной документации Laravel Reverb](https://laravel.com/docs/13.x/reverb).

## Nginx и Cloudflare

Публичный путь должен передавать заголовки `Upgrade` и `Connection`, как описано в [конфигурации Nginx](/learn/server-domeny-i-infrastruktura/overview/architecture/configuration-and-ssl.md). В Cloudflare включите WebSockets и проверьте события WAF для первоначального HTTP Upgrade.

Сертификат должен покрывать публичный домен, а клиент должен использовать WSS на HTTPS-сайте. Смешанное подключение `ws://` со страницы `https://` будет заблокировано браузером.

## Развёртывание и проверка

После обновления кода выполните мягкий перезапуск:

```bash
cd <ПУТЬ_BACKEND>
/opt/php84/bin/php artisan reverb:restart
```

Supervisor поднимет процесс на новом коде. Для проверки откройте одну тестовую заявку в клиентской сессии и в панели. Отправьте сообщение в обе стороны и убедитесь, что оно появляется без обновления страницы.

## Диагностика

Если сообщения появляются только после обновления, проверьте по порядку: процесс Supervisor, локальный bind, Nginx location, сертификат, origin allowlist, публичные ключи, Cloudflare WebSockets и WAF. Обычный ответ 200 от сайта не проверяет HTTP Upgrade.

Если соединение устанавливается и сразу закрывается, сопоставьте время браузерной ошибки, журнала Nginx и Reverb. Не публикуйте secret или полный файл окружения вместе с диагностикой.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.iexexchanger.com/learn/server-domeny-i-infrastruktura/overview/process-map/reverb.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
