# Настройка Supervisor

## Что такое Supervisord и зачем он нужен?

Supervisord — это программа, которая следит за тем, чтобы нужные вам процессы на сервере всегда работали. Если какая-то программа остановится, Supervisord автоматически её перезапустит.

***

{% hint style="danger" %}

## Важно

Все команды, указанные в этой инструкции, требуют выполнения от имени пользователя с максимальными правами (**пользователя root**). Это необходимо, так как многие команды вносят изменения в конфигурацию системы и требуют административных привилегий.

Для перехода в пользователя root выполните команду:

`sudo -l root`
{% endhint %}

## Шаг 1: Подготовка сервера

Сначала обновите все необходимые пакеты на сервере. Выполните команды одну за другой:

```bash
sudo apt update
sudo apt upgrade -y
```

***

## Шаг 2: Установка Supervisord

Установите Supervisord командой:

```bash
sudo apt install supervisor -y
```

Включите Supervisord, чтобы он автоматически запускался при включении сервера, и сразу запустите его:

```bash
sudo systemctl enable supervisor
sudo systemctl start supervisor
```

Проверьте, запущен ли Supervisord:

```bash
sudo systemctl status supervisor
```

***

## Шаг 3: Простая настройка Supervisord

Откройте главный файл конфигурации Supervisord:

```bash
sudo nano /etc/supervisor/supervisord.conf
```

Добавьте следующую строку сразу после `[supervisord]`:

```bash
[supervisord]
minfds=10000
```

<figure><img src="/files/CcvO1IPH8b5eD1Mwa0jm" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="info" %}

## Сохранение и закрытие редактора в терминале

На Mac и Linux (редактор nano):

* Нажмите комбинацию клавиш `Control + O` для сохранения файла.
* Затем подтвердите сохранение, нажав Enter.
* Для выхода из редактора нажмите **Control + X**.

На Windows (редактор nano в WSL, Git Bash и аналогичных):

* Нажмите комбинацию клавиш `Ctrl + O` для сохранения файла.
* Затем нажмите Enter для подтверждения.
* Закройте редактор, нажав <kbd>Ctrl + X</kbd>.
  {% endhint %}

Перезапустите Supervisord для применения настроек:

<pre class="language-bash"><code class="lang-bash"><strong>sudo systemctl restart supervisor
</strong></code></pre>

***

## Шаг 4: Настройка автоматического запуска ваших программ

Создайте скрипт, который настроит автоматический запуск нужных программ:

```bash
nano setup_supervisor_processes.sh
```

Скопируйте и вставьте текст ниже, предварительно заменив указанные значения на свои:

{% content-ref url="/pages/1l6h1Oe73cxdYfGUwqH8" %}
[Как найти путь к проекту и имя пользователя в FastPanel?](/pomosh-i-spravka/infrastruktura/kak-naiti-put-k-proektu-i-imya-polzovatelya-v-fastpanel.md)
{% endcontent-ref %}

* **PROJECT\_PATH** — путь к backend-проекту Laravel (app.<mark style="color:red;">ваш\_домен</mark>)
* **PHP\_PATH** — путь к PHP 8.4 (`/opt/php84/bin/php`)
* **USER** — пользователь backend-проекта (созданный FastPanel)
* **DOMAIN** — домен Reverb (app.<mark style="color:red;">ваш\_домен</mark>)

```bash
#!/bin/bash
set -e

# ======== Укажите свои данные здесь ========
PROJECT_PATH="/var/www/имя_пользователя_backend/data/www/app.ваш_домен"
PHP_PATH="/opt/php84/bin/php"                                   
USER="имя_пользователя_backend"                              
DOMAIN="app.ваш_домен"
# ===========================================

SUPERVISOR_CONF_PATH="/etc/supervisor/conf.d/iex.conf"

sudo tee "$SUPERVISOR_CONF_PATH" >/dev/null <<EOF
[program:horizon]
command=$PHP_PATH $PROJECT_PATH/artisan horizon
directory=$PROJECT_PATH
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=$PROJECT_PATH/storage/logs/iex-horizon.log
stopwaitsecs=3600

[program:laravel-worker]
command=$PHP_PATH $PROJECT_PATH/artisan queue:work --delay=1 --sleep=1 --timeout=1800 --tries=3 --queue=high,low
directory=$PROJECT_PATH
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=$PROJECT_PATH/storage/logs/iex-worker.log
stopwaitsecs=3600

[program:laravel-pulsework]
command=$PHP_PATH $PROJECT_PATH/artisan pulse:work
directory=$PROJECT_PATH
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=$PROJECT_PATH/storage/logs/iex-pulse-work.log
stopwaitsecs=3600

[program:laravel-pulsecheck]
command=$PHP_PATH $PROJECT_PATH/artisan pulse:check
directory=$PROJECT_PATH
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=$PROJECT_PATH/storage/logs/iex-pulse-check.log
stopwaitsecs=3600

[program:laravel-reverb]
command=$PHP_PATH $PROJECT_PATH/artisan reverb:start --debug --hostname="$DOMAIN"
directory=$PROJECT_PATH
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=$PROJECT_PATH/storage/logs/iex-reverb.log
stopwaitsecs=3600
EOF

sudo supervisorctl reread
sudo supervisorctl update

echo "Конфигурация Supervisor успешно обновлена и применена!"
```

{% hint style="info" %}

#### Сохранение и закрытие редактора в терминале

На Mac и Linux (редактор nano):

* Нажмите комбинацию клавиш `Control + O` для сохранения файла.
* Затем подтвердите сохранение, нажав Enter.
* Для выхода из редактора нажмите **Control + X**.

На Windows (редактор nano в WSL, Git Bash и аналогичных):

* Нажмите комбинацию клавиш `Ctrl + O` для сохранения файла.
* Затем нажмите Enter для подтверждения.
* Закройте редактор, нажав <kbd>Ctrl + X</kbd>.
  {% endhint %}

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

```bash
chmod +x setup_supervisor_processes.sh
sudo ./setup_supervisor_processes.sh
```

***

## Шаг 5: Применение новых настроек Supervisord

Выполните следующие команды, чтобы Supervisord применил изменения:

```bash
sudo supervisorctl reread
sudo supervisorctl update
```

***

{% hint style="danger" %}

## Внимание!!!&#x20;

На этапе первоначальной установки продукта нет необходимости проверять статусы программ или просматривать журналы (логи). Данные команды приводятся для справки и будут полезны только в том случае, если позже, в процессе эксплуатации системы, возникнут какие-либо проблемы с её работой.
{% endhint %}

## Шаг 6: Проверка работы Supervisord

Проверьте, что все программы запущены и работают:

```bash
sudo supervisorctl status
```

Все указанные программы должны быть в состоянии `RUNNING`.

***

## Полезные команды для управления программами

* Перезапустить все программы:

```bash
sudo supervisorctl restart all
```

* Перезапустить конкретную программу:

```bash
sudo supervisorctl restart название_программы
```

* Остановить программу:

```bash
sudo supervisorctl stop название_программы
```

* Запустить программу:

```bash
sudo supervisorctl start название_программы
```

***

## Проверка логов

Основной журнал работы Supervisord:

```bash
cat /var/log/supervisor/supervisord.log
```

Журналы отдельных программ (пример):

```bash
cat /var/www/myproject/iex-worker.log
```

Теперь Supervisord полностью настроен и работает на вашем сервере. Если возникнут вопросы, вы всегда можете обратиться за помощью к специалисту.


---

# Agent Instructions: 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:

```
GET https://docs.iexexchanger.com/nachalo-raboty/ustanovka/shag-4-zapusk-processov/nastroika-supervisor.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
