# Шаг 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
```
