> 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/knowledge-base/servery-domeny-i-infrastruktura/overview/process-map/reverb.md).

# Laravel Reverb и WebSocket

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

## Где находится

У Reverb нет отдельного пункта админки. Технический специалист настраивает его через SSH, Supervisor, файл окружения серверной части и Nginx.

Для работы менеджера с чатом в панели нужны:

* путь **«Заявки» — «Список заявок» — открыть заявку — «Чат с клиентом»** либо **значок сообщений в верхней панели — «Центр чатов»**;
* право «Разрешить управление заявками в админпанели»;
* право «Разрешить управление онлайн чатом для заявок в админпанели».

Права выдаются через **«Пользователи» — «Список групп пользователей» — открыть группу**.

## Внутренний и публичный адрес

| Параметры                                     | Назначение                     | Пример при Nginx на том же сервере |
| --------------------------------------------- | ------------------------------ | ---------------------------------- |
| `REVERB_SERVER_HOST`, `REVERB_SERVER_PORT`    | Где слушает сам процесс Reverb | `127.0.0.1` и внутренний порт      |
| `REVERB_HOST`, `REVERB_PORT`, `REVERB_SCHEME` | Куда подключается браузер      | рабочий домен, `443`, `https`      |

Рекомендуемый внутренний bind при одном сервере — `127.0.0.1`. Адрес `0.0.0.0` означает прослушивание всех интерфейсов; используйте его только при доказанной сетевой необходимости и закрытом порте. Nginx не должен проксировать на `0.0.0.0` — upstream указывает конкретный доступный адрес.

App ID, key и secret должны совпадать между серверными параметрами Reverb. Secret не публикуется в клиентском коде.

## Разрешённые домены

В allowlist origins укажите точные HTTPS-домены клиентского сайта и панели, которые действительно открывают WebSocket. Не используйте `*` в рабочей среде.

После смены домена проверьте одновременно:

* публичный `REVERB_HOST`;
* список разрешённых origins;
* сертификат домена;
* конфигурацию клиентского сайта;
* Cloudflare и Nginx.

Пустой или неверный allowlist должен закрывать соединение, а не разрешать любой сайт.

## Постоянный процесс 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
```

Процесс запускается от владельца серверного сайта. Отладочный вывод включайте только кратковременно: он быстро увеличивает журнал.

## Nginx

Публичные пути Reverb должны передавать WebSocket Upgrade на внутренний порт. Базовая форма для одного сервера:

```nginx
location /app/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:<REVERB_SERVER_PORT>;
}

location /apps/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:<REVERB_SERVER_PORT>;
}
```

Перед применением выполните `nginx -t`, затем мягко перечитайте конфигурацию. Общая схема SSL приведена в [«Конфигурации Nginx и SSL»](/knowledge-base/servery-domeny-i-infrastruktura/overview/what-is-nginx/configuration-and-ssl.md).

## Cloudflare и HTTPS

В Cloudflare должны быть разрешены WebSockets, а WAF не должен блокировать начальный HTTP Upgrade. Публичный сертификат должен покрывать домен Reverb. Страница `https://` подключается через `wss://`; браузер заблокирует смешанное соединение `ws://`.

## Запуск и проверка

```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status iex-reverb
```

Затем:

1. проверьте, что процесс слушает ожидаемый внутренний адрес и порт;
2. откройте одну тестовую заявку в панели и клиентской сессии;
3. отправьте сообщение в обе стороны;
4. убедитесь, что оно появляется без обновления страницы;
5. обновите страницу и убедитесь, что сообщение сохранилось.

Обычный ответ 200 от сайта не проверяет WebSocket Upgrade.

## Обновление кода

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

Supervisor поднимет процесс на новом коде. После перезапуска повторите двустороннюю проверку чата.

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

Если сообщение появляется только после обновления, проверяйте в таком порядке:

1. Supervisor и журнал Reverb;
2. внутренний bind и порт;
3. Nginx locations `/app/` и `/apps/`;
4. HTTPS-сертификат и публичный домен;
5. разрешённые origins;
6. публичный key и совпадение серверной конфигурации;
7. Cloudflare WebSockets и WAF;
8. очередь события, если публикация выполняется фоновым заданием.

Не прикладывайте к обращению полный `.env` или secret. Основные параметры и безопасный restart описаны в [официальной документации Laravel Reverb](https://laravel.com/docs/reverb).


---

# 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/knowledge-base/servery-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.
