# Шаг 2: Настройка PM2

Эта инструкция поможет вам настроить Telegram Mini App таким образом, чтобы приложение всегда было доступно пользователям и автоматически запускалось при перезагрузке или перезапуске вашего сервера.

{% hint style="danger" %}
Большинство команд в этой инструкции необходимо выполнять от имени пользователя с правами администратора **(root)**. Чтобы переключиться в режим администратора, используйте команду:

`sudo -l root`

Однако некоторые команды должны выполняться от имени обычного пользователя сайта (без привилегий администратора). В таких случаях явно указано, если нужно выйти из режима администратора и использовать обычного пользователя.

`su -l имя_пользователя`
{% endhint %}

## ШАГ 1: Подготовка и размещение проекта Telegram Mini App на поддомене через FastPanel

Эти шаги помогут вам загрузить и правильно разместить файлы Telegram Mini App на вашем поддомене с помощью панели управления FastPanel.

**Как разместить проект:**

1. Откройте панель управления FastPanel.
2. Перейдите в раздел **«Сайты»** → выберите поддомен Telegram Mini App → **«Файлы»**.
3. Если проект ещё не распакован на сервере:
   * Загрузите архив с проектом Telegram Mini App в корневой каталог поддомена через встроенный файловый менеджер FastPanel.
   * Распакуйте архив прямо в этом же каталоге.
4. Убедитесь, что после распаковки структура файлов проекта соответствует следующему виду:

```
ваш_проект/
├── dist/
│   └── telegram-app/
│       └── server/
│           └── server.mjs
├── logs/ (если папки нет, создайте её через панель)
└── (другие файлы)
```

{% hint style="info" %}

### Важно <a href="#vazhno" id="vazhno"></a>

Убедитесь, что папка **logs** присутствует в корневом каталоге проекта. Если её нет, создайте её прямо здесь же через файловый менеджер FastPanel.

Эта папка необходима для корректной работы приложения, в ней будут храниться логи проекта.
{% endhint %}

***

## ШАГ 2: Создание файла конфигурации pm2 <a href="#shag-5-sozdanie-faila-konfiguracii-pm2" id="shag-5-sozdanie-faila-konfiguracii-pm2"></a>

{% hint style="danger" %}

## Важно: <a href="#vazhno-1" id="vazhno-1"></a>

* Никогда не запускайте и не создавайте конфигурацию PM2 под пользователем <mark style="color:red;">**root**</mark>!
* Используйте исключительно обычного <mark style="color:green;">**пользователя сайта**</mark>, от имени которого вы загружали файлы через панель управления FastPanel.
* Это необходимо для избежания проблем с правами доступа и для обеспечения стабильной и безопасной работы вашего Telegram Mini App.
  {% endhint %}

### Как переключиться с root на нужного пользователя сайта? <a href="#kak-pereklyuchitsya-s-root-na-nuzhnogo-polzovatelya-saita" id="kak-pereklyuchitsya-s-root-na-nuzhnogo-polzovatelya-saita"></a>

Если в данный момент вы работаете от имени root и вам нужно перейти к пользователю вашего сайта, выполните следующую команду:

```
su -l имя_пользователя
```

**Пример:**

Если ваш пользователь называется siteuser, выполните:

```
su -l siteuser
```

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

```
whoami
```

Вывод должен быть именем вашего пользователя, например: **`siteuser`**

Создание файла конфигурации для Telegram Mini App:

* Авторизуйтесь в панели управления FastPanel.
* В левом меню выберите раздел **«Сайты»**.
* Найдите и выберите поддомен вашего Telegram Mini App, затем перейдите в раздел **«Файлы»**.
* В открывшейся директории сайта перейдите в папку вашего проекта, обычно это:

Перейдите в директорию сайта (пример):

```
/var/www/имя_пользователя/data/www/tg.ваш_домен
```

Создайте новый файл прямо в этой папке и назовите его:

```
ecosystem.config.cjs
```

Скопируйте в этот файл следующий конфиг:

```
module.exports = {
  apps: [
    {
      name: 'iex-mini-app',
      script: 'dist/telegram-app/server/server.mjs',
      cwd: __dirname,
      instances: 'max',
      exec_mode: 'cluster',
      autorestart: true,
      watch: false,
      max_memory_restart: '1G',
      env: {
        NODE_ENV: 'production',
        PORT: 4001,
        PM2: true,
      },
      log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
      error_file: 'logs/err.log',
      out_file: 'logs/out.log',
      merge_logs: true,
      time: true,
      wait_ready: false,
      listen_timeout: 3000,
      kill_timeout: 2000,
      exp_backoff_restart_delay: 100
    },
  ],
};
```

Сохраните файл (нажмите кнопку **«Сохранить»** в FastPanel).

***

## ШАГ 3: Запуск проекта <a href="#shag-6-zapusk-proekta" id="shag-6-zapusk-proekta"></a>

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

Перейдите в директорию проекта командой:

```
cd www/tg.<ваш_домен>
```

Запустите PM2, используя ранее созданный файл конфигурации:

```
pm2 start ecosystem.config.cjs
```

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

```
pm2 startup && pm2 save
```

***

## ШАГ 4: Настройка автозапуска pm2 <a href="#shag-7-nastroika-avtozapuska-pm2" id="shag-7-nastroika-avtozapuska-pm2"></a>

Автоматический запуск приложения через pm2 необходим, чтобы сайт продолжал стабильно работать после каждой перезагрузки сервера.

Настройте автоматический запуск pm2 после перезагрузки сервера:

**Эти действия выполните под пользователем root или с помощью sudo:**

Перейдите в режим администратора:

```
su -l root
```

Выполните команду настройки автозапуска pm2 для вашего пользователя FastPanel:

```
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u <имя_пользователя> --hp /var/www/<имя_пользователя>
```

**Пример:**

Если ваш пользователь называется siteuser, команда будет выглядеть так:

```
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u siteuser --hp /var/www/siteuser
```

После выполнения вы получите подтверждение о правильной настройке автозапуска.

Рекомендуется убедиться в том, что всё настроено корректно:

Перезагрузите сервер:

```
sudo reboot
```

После перезагрузки снова проверьте статус pm2:

```
pm2 status
```

Приложение должно автоматически запуститься и иметь статус **online**.

### Полезные команды pm2 <a href="#poleznye-komandy-pm2" id="poleznye-komandy-pm2"></a>

Остановить приложение:

```
pm2 stop iex-mini-app
```

Перезапустить приложение:

```
pm2 restart iex-mini-app
```

Просмотр логов в реальном времени:

```
pm2 logs iex-mini-app
```


---

# 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/telegram-app/ustanovka-i-nastroika/ustanovka-prilozheniya/shag-2-nastroika-pm2.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.
