> 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/deployment.md).

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

Развёртывание должно обновлять код и только те долгоживущие процессы, которые реально включены. Состав процессов заранее сверяется по [единой карте](/knowledge-base/servery-domeny-i-infrastruktura/overview/process-map.md).

## До начала

1. Назначьте окно, ответственного и критерий остановки.
2. Проверьте очереди, свободное место, базу, Redis и резервные задания.
3. Создайте внешнюю копию PostgreSQL и пользовательских файлов.
4. Создайте снимок сервера или диска перед системным изменением.
5. Проверьте происхождение и контрольную сумму пакета.
6. Запишите активные каталоги, состояние Supervisor, PM2 и способ возврата.
7. Остановите параллельные изменения панели на время переключения.

Не начинайте обновление при растущей очереди, неизвестной ошибке базы или непроверенной резервной копии.

## Подготовка серверной части

Разворачивайте пакет в новый каталог от владельца серверного сайта:

```bash
cd <НОВЫЙ_ПУТЬ_BACKEND>
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
/opt/php84/bin/php artisan about
```

Не запускайте Composer от `root` и не копируйте неполный каталог поверх активного сайта.

## Подготовка клиентского сайта

От владельца клиентского сайта установите зависимости способом lock-файла и выполните production-сборку из инструкции поставки. До перезапуска PM2 проверьте:

```bash
cd <НОВЫЙ_ПУТЬ_CLIENT>
test -f ecosystem.config.cjs
test -f dist/exchanger/server/server.mjs
```

Отсутствующий entrypoint означает, что сборка не готова к переключению.

## Миграции и переключение

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

```bash
cd <АКТИВНЫЙ_ПУТЬ_BACKEND>
/opt/php84/bin/php artisan migrate --force
/opt/php84/bin/php artisan optimize
```

Не выполняйте автоматический `migrate:rollback` только ради возврата кода. Миграция могла преобразовать рабочие данные.

## Перезапуск только включённых процессов

### Horizon

Если Horizon запущен Supervisor:

```bash
cd <АКТИВНЫЙ_ПУТЬ_BACKEND>
/opt/php84/bin/php artisan horizon:terminate
```

### Pulse

Если запущен `pulse:check` или `pulse:work`:

```bash
cd <АКТИВНЫЙ_ПУТЬ_BACKEND>
/opt/php84/bin/php artisan pulse:restart
```

### Reverb

Если функции реального времени включены:

```bash
cd <АКТИВНЫЙ_ПУТЬ_BACKEND>
/opt/php84/bin/php artisan reverb:restart
```

### PM2

После переключения готовой клиентской сборки, от владельца клиентского сайта:

```bash
cd <АКТИВНЫЙ_ПУТЬ_CLIENT>
pm2 restart ecosystem.config.cjs --only iexexchanger --update-env
```

Не запускайте отдельный `queue:work`, если его очередь принадлежит Horizon, и не вызывайте `pulse:work` при ingest `storage`.

## Приёмка

1. Проверьте `supervisorctl status` только для ожидаемых процессов.
2. Проверьте `artisan horizon:status`, если Horizon используется.
3. Под владельцем клиента проверьте `pm2 describe iexexchanger` и последние 100 строк журнала.
4. Проверьте внутренний SSR и публичный HTTPS.
5. Войдите в панель под тестовым администратором.
6. Выполните расчёт и создайте безопасную тестовую заявку.
7. Проверьте одну задачу очереди и уведомление.
8. Проверьте чат без обновления страницы, если Reverb включён.
9. Откройте Horizon и Pulse под сотрудником с правом «Разрешить доступ к мониторингу данных».
10. Проверьте `schedule:list` и ожидаемый регулярный результат.
11. Сравните новые ошибки журналов с состоянием до обновления.

Выполните `pm2 save` только после успешной проверки нового процесса.

## Возврат

Если критичная приёмка не прошла, остановите трафик к неисправному каталогу, верните предыдущую ссылку или каталог и мягко перезапустите только включённые процессы. Базу возвращайте только по заранее подготовленному плану восстановления. После возврата повторите ту же приёмку и зафиксируйте причину.


---

# 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/deployment.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.
