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

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

***

## Создание доменов в панели FastPanel

В этом разделе вы узнаете, как правильно создать основной домен и поддомен в панели FastPanel. Точное следование инструкции обеспечит корректную работу обменника и избавит от проблем на последующих этапах установки.

Пожалуйста, выполняйте все шаги внимательно и последовательно.

{% stepper %}
{% step %}

### Авторизация в FastPanel

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

1. Перейдите в панель управления FastPanel по адресу, предоставленному вашим хостинг-провайдером.

   Обычно адрес выглядит следующим образом:

   <https://ip\\_адрес:8888>
2. Введите ваш логин и пароль.
3. Нажмите кнопку **«Войти».**
   {% endstep %}

{% step %}

### Создание основного сайта (основной домен)

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

1. В левом меню панели управления перейдите в раздел **«Сайты».**
2. Нажмите кнопку **«Создать сайт».**
3. В появившемся окне выберите тип сайта **«PHP».**

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

{% hint style="info" %}

#### В открывшейся форме заполните следующие поля:

* **Какой домен подключаем?**

  Укажите адрес вашего основного домена (например, ваш\_домен).
* **К какому IP-адресу?**

  Убедитесь, что выбран правильный IP-адрес вашего сервера.
* **DNS-аккаунт**

  Оставьте значение по умолчанию (как правило, это ваш провайдер, например FASTVPS).
* **Добавить www-алиас (опционально)**

  Включите этот пункт, если хотите, чтобы сайт был доступен также по адресу **[www](http://www).**<mark style="color:$danger;">**ваш\_домен**</mark>**.**
  {% endhint %}

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

Нажмите кнопку **«Следующий шаг»**, чтобы перейти к настройке конфигурации сайта.
{% endstep %}

{% step %}

### Конфигурация сайта

На этапе конфигурации FastPanel автоматически предложит стандартные параметры, которые подходят для большинства случаев.

<figure><img src="/files/iTZeeNFcs7tDuu0TC6Ab" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

#### Важно

* На данном этапе не изменяйте настройки.
* Оставьте все параметры по умолчанию.
* В следующих шагах документации мы подробно рассмотрим и настроим необходимые параметры специально для работы обменника.
  {% endhint %}

Нажмите кнопку **«Создать сайт»** и дождитесь завершения процедуры.

После создания сайта:

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

* рядом с кнопкой **«Посмотреть»** будет доступен файл конфигурации;
* **обязательно скачайте этот файл** — он понадобится на следующих этапах настройки.
  {% endstep %}

{% step %}

### Создание поддомена (app.ваш\_домен)

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

Для создания поддомена повторите описанную выше процедуру:

В разделе **«Сайты»** нажмите кнопку **«Создать сайт»**.

Выберите тип сайта **«PHP».**

<figure><img src="/files/Bk5wC0qtSN7w55CT3Vgw" alt="" width="563"><figcaption></figcaption></figure>

В поле домена укажите поддомен в формате: **app.**<mark style="color:$danger;">**ваш\_домен**</mark>

IP-адрес и DNS-аккаунт оставьте без изменений (такими же, как у основного домена).

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

Нажмите **«Следующий шаг»**, затем **«Создать сайт»**, оставив настройки по умолчанию.

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

После создания поддомена:

* скачайте предложенный файл конфигурации аналогично основному домену.
  {% endstep %}

{% step %}

### Готово

На этом этапе у вас:

* создан основной домен;
* создан поддомен app.ваш\_домен;
* скачаны два файла конфигурации, которые потребуются для дальнейших шагов установки и настройки обменника.

Вы можете переходить к следующему этапу инструкции.
{% endstep %}
{% endstepper %}

***

## Включение SSL-сертификатов (HTTPS) в FastPanel

Эта инструкция позволит вам быстро и корректно настроить SSL-сертификаты для основного домена и поддомена в панели управления FastPanel, что обеспечит безопасное подключение пользователей к вашему сайту через HTTPS.

{% stepper %}
{% step %}

### Настройка SSL для основного домена

* Войдите в панель управления FastPanel.
* В левом меню нажмите на вкладку **«Сайты»** и выберите основной домен.

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

Найдите раздел **«SSL сертификаты»** и нажмите на него.

<figure><img src="/files/DcRWAEedHaYRoFeLm7C6" alt="" width="563"><figcaption></figcaption></figure>

Нажмите кнопку **«Новый сертификат»** в верхнем правом углу.

<figure><img src="/files/Lqxfq4cXxXy2CxgAlKGU" alt=""><figcaption></figcaption></figure>

В открывшемся окне выберите тип **«Самоподписанный»**.

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

**Заполните форму:**

* **Email** — укажите свой почтовый адрес для получения уведомлений.
* **Длина ключа** — выберите рекомендуемое значение **2048**.
* **Основной домен** — автоматически указан ваш основной домен.
* **Алиасы** — добавьте алиас для основного домена (например, `www.ваш_домен`).
* **Срок действия** — установите рекомендуемый срок действия сертификата **365** дней.

Нажмите кнопку **«Сохранить»**.

<figure><img src="/files/sOt3AslP4oPIBszxkQAe" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Создание SSL-сертификата для поддомена

* Вернитесь на страницу со списком сайтов и выберите ваш поддомен (например, `app.ваш_домен`).
* Снова откройте раздел **«SSL сертификаты»**.
* Нажмите кнопку **«Новый сертификат»**.
* Выберите тип сертификата **«Самоподписанный»**.<br>

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

**Заполните форму аналогично предыдущему шагу:**

* **Email** — укажите свой почтовый адрес.
* **Длина ключа** — **2048**.
* **Основной домен** — автоматически указан ваш поддомен.
* **Алиасы** — добавьте алиас для поддомена (например, `www.app.ваш_домен`).
* **Срок действия** — **365** дней.

Нажмите кнопку **«Сохранить»**.
{% endstep %}
{% endstepper %}

После завершения этих действий вы увидите оба сертификата в списке SSL-сертификатов для ваших сайтов.

<figure><img src="/files/dVTuGwr0MpFyI7kik8Aa" alt=""><figcaption></figcaption></figure>

### Важные моменты:

* **Самоподписанные сертификаты** подходят для тестирования и внутренних ресурсов. Для публичных сайтов рекомендуется использовать сертификаты Let's Encrypt, которые можно выпустить также через FastPanel.
* SSL-сертификаты автоматически активируются после создания. Убедитесь, что настройки вашего сайта корректно используют HTTPS-протокол.

Теперь ваши сайты будут работать по защищённому HTTPS-соединению.

***

## Загрузка файлов обменника и лицензии в FastPanel

После создания основного домена и поддомена перейдите в раздел файлов для загрузки архивов и лицензии следующим образом:

### Шаги загрузки файлов:

1. В панели **FastPanel** на странице **«Сайты»** выберите нужный домен (основной или поддомен).
2. Перейдите в раздел **«Файлы»**.
3. В правом верхнем углу файлового менеджера нажмите кнопку **«Загрузить**» (значок ⬆️).
4. Для **основного домена** загрузите архив **Frontend** и распакуйте его.
5. Для **поддомена** загрузите:
   * архив **Backend** (распакуйте после загрузки);
   * архив с лицензией (его тоже нужно распаковать после загрузки; внутри находятся текстовые файлы с лицензией).

После загрузки и распаковки файлов вы будете готовы перейти к следующему этапу настройки обменника.

***

## Настройка файла конфигурации `.env` для поддомена

После загрузки и распаковки всех файлов обменника и лицензии необходимо обязательно настроить конфигурационный файл .env для поддомена (backend). Это один из самых важных шагов установки.

Внимательно следуйте инструкции ниже:

### Открытие файла `.env`

* В файловом менеджере FastPanel откройте папку вашего поддомена.
* Найдите и откройте на редактирование файл .env.

### Ключ лицензии

Лицензионный ключ вы получите в личном кабинете сайта iEXExchanger.

1. Авторизуйтесь в личном кабинете.
2. Перейдите в раздел **«Мои лицензия».**
3. Скопируйте ключ лицензии рядом с вашим активным доменом.

<figure><img src="/files/Z9kpoUDfXcJrfwwauzzJ" alt=""><figcaption></figcaption></figure>

Вставьте полученный ключ в параметр:

{% code title=".env" %}

```ini
LICENSE_KEY=ваш_лицензионный_ключ
```

{% endcode %}

### Параметры соединения с базой данных

Данные для подключения к базе данных вы получаете после создания сайта в панели управления FastPanel. Обычно они отображаются сразу после создания сайта. Эти данные выглядят примерно так:

```
Пользователь:
- Имя: ваше_имя_пользователя  # указан в данных FastPanel после создания сайта
- Пароль: ваш_пароль_пользователя

База данных:
- Имя: имя_вашей_базы
- Логин: ваш_логин_базы
- Пароль: ваш_пароль_базы
```

**Важно:**

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

{% code title=".env" %}

```ini
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=имя_вашей_базы           # имя базы данных из FastPanel
DB_USERNAME=ваш_логин_базы           # логин пользователя базы данных из FastPanel
DB_PASSWORD=ваш_пароль_базы          # пароль пользователя базы данных из FastPanel
```

{% endcode %}

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

### Настройка сессий

Эти параметры регулируют поведение пользовательских сессий, влияя на то, как ваш обменник сохраняет авторизацию пользователей.

Настройте параметры следующим образом:

{% code title=".env" %}

```
SESSION_DRIVER=database
SESSION_SECURE_COOKIE=true
SESSION_DOMAIN=.ваш_домен
```

{% endcode %}

#### Подробные пояснения к параметрам:

* **SESSION\_DRIVER=database**

  Сессии пользователей будут храниться в базе данных, что обеспечивает надёжность работы системы.
* **SESSION\_SECURE\_COOKIE=true**

  Если ваш сайт использует SSL-сертификат (работает по HTTPS), укажите true. Если SSL не используется, укажите false.
* **SESSION\_DOMAIN=.ваш\_домен**

  Если указать домен в таком виде (с точкой впереди), авторизация пользователей будет доступна на основном сайте и на всех его поддоменах (например, app.<mark style="color:red;">**ваш\_домен**</mark>).

Обязательно указывайте свои реальные домены и проверяйте правильность их написания.

### Настройка cookie

Эти параметры отвечают за идентификацию и сохранение авторизации ваших пользователей.

Установите следующие значения в файле .env:

{% code title=".env" %}

```
SESSION_COOKIE=название_вашей_сессии
```

{% endcode %}

Пояснение:

* **SESSION\_COOKIE** — это имя cookie, в котором хранится информация о сессии пользователя.

  Если вы не уверены, какое имя выбрать, оставьте значение по умолчанию. Оно не влияет на работоспособность, если не требуется специальных настроек.

Пример настройки:

{% code title=".env" %}

```
SESSION_COOKIE=iexexchanger_session
```

{% endcode %}

### Путь к админке сайта (обязательно)

Это обязательный параметр, задающий уникальный адрес (URL), по которому будет доступна панель администратора вашего обменника. Правильная настройка этого параметра очень важна для безопасности вашего сайта.

Укажите параметр в файле **.env:**

{% code title=".env" %}

```
APP_ADMIN_PATH=ваш_путь_к_админке
```

{% endcode %}

Пример правильной настройки:

{% code title=".env" %}

```
APP_ADMIN_PATH=iexadmin
```

{% endcode %}

После настройки админка станет доступна по следующему адресу: `https://app.`<mark style="color:red;">**`ваш_домен`**</mark>`/iexadmin`

**Рекомендуется:**

* Используйте уникальный путь (например, комбинацию букв и цифр), чтобы повысить безопасность и предотвратить несанкционированный доступ.
* Запишите или запомните указанный путь, так как это единственный способ попасть в админ-панель сайта.

### Настройка доменов и безопасности (CORS и Sanctum)

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

* **Sanctum Stateful Domains (SANCTUM\_STATEFUL\_DOMAINS):**

  Список доверенных доменов, с которых разрешено выполнение запросов с поддержкой аутентификации (cookie, авторизационные токены). Обычно это ваш основной домен и поддомены, которые будут взаимодействовать с сервером приложения через API.
* **CORS Allowed Origins (CORS\_ALLOWED\_ORIGINS):**

  Список доменов, с которых разрешено выполнение междоменных (CORS) запросов к API вашего приложения. Добавляйте сюда ваш основной сайт и любые поддомены, с которых будет осуществляться доступ к вашему API.
* **Frontend URL (FRONTEND\_URL):**

  Основной домен вашего фронтенд-приложения, который используется сервером для формирования ссылок и перенаправлений.
* **CORS Supports Credentials (CORS\_SUPPORTS\_CREDENTIALS):**

  Настройка, разрешающая передачу авторизационных данных (cookies, заголовки аутентификации и прочее) в междоменных запросах.

Убедитесь, что указанные параметры соответствуют вашим актуальным доменам, иначе доступ к приложению и работа его функционала могут быть нарушены.

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

```
CORS_ALLOWED_ORIGINS=https://ваш_домен,https://app.ваш_домен
FRONTEND_URL=https://ваш_домен
CORS_SUPPORTS_CREDENTIALS=true
```

#### Итоговая конфигурация

```
APP_URL=https://app.ваш_домен

API_URL=https://app.ваш_домен

CORS_ALLOWED_ORIGINS=https://ваш_домен,https://app.ваш_домен
FRONTEND_URL=https://ваш_домен
CORS_SUPPORTS_CREDENTIALS=true

SESSION_DRIVER=database
SESSION_DOMAIN=.ваш_домен
SANCTUM_STATEFUL_DOMAINS=https://app.ваш_домен
SESSION_SECURE_COOKIE=true
```

***

## Настройка базы данных для Laravel Pulse

Laravel Pulse — инструмент мониторинга и анализа производительности приложения. Для эффективной работы Pulse рекомендуется создать отдельную базу данных.

### Создание базы данных Pulse в FastPanel

1. В **FastPanel** перейдите: **Управление → Базы данных → «Новая база данных».**<br>

   <figure><img src="/files/S1Wvdi78pl24mzSglfqb" alt="" width="563"><figcaption></figcaption></figure>
2. **Заполните форму:**<br>
   * **Имя и логин:** одинаковые (например, pulse\_db)
   * **Сайт:** выберите ваш поддомен
   * **Владелец:** выберите пользователя сайта (не root, не fastuser)
   * **Пароль:** сгенерируйте и сохраните пароль

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

Нажмите **«Сохранить».**

### Настройка подключения в файле .env

Откройте файл .env и добавьте настройки для Pulse:

{% code title=".env" %}

```ini
PULSE_DB_CONNECTION=mysql-pulse
PULSE_DB_HOST=127.0.0.1
PULSE_DB_PORT=3306
PULSE_DB_DATABASE=pulse_db
PULSE_DB_USERNAME=pulse_db
PULSE_DB_PASSWORD=сгенерированный_вами_пароль
```

{% endcode %}

После этого сохраните изменения. Теперь Laravel Pulse готов к работе.

***

## Загрузка основного файла базы данных

Теперь необходимо загрузить начальные данные в базу данных вашего обменника. Выполните эти шаги внимательно:

### Шаг 1. Открытие phpMyAdmin из FastPanel:

* Перейдите в панель **FastPanel → Управление → Базы данных**.<br>

  <figure><img src="/files/htI7cwUQiQ35oECUw7oN" alt=""><figcaption></figcaption></figure>
* В списке баз данных найдите созданную вами базу (основную, не Pulse) и нажмите на иконку **«Открыть phpMyAdmin»** (иконка в виде квадрата со стрелкой ↗️).

### Шаг 2. Импорт базы данных через phpMyAdmin:

<figure><img src="/files/8TYXcVPp9AbSDgS1vvR7" alt=""><figcaption></figcaption></figure>

1. В phpMyAdmin в левом меню выберите именно вашу базу данных.
2. В верхнем меню нажмите на раздел **«Импорт»**.
3. Нажмите кнопку **«Выберите файл»**, найдите файл базы данных в распакованном архиве вашего обменника по следующему пути:

```
database/iex_data.sql
```

4. После выбора файла нажмите кнопку **«Импорт»** (внизу страницы).

Подождите завершения загрузки (это может занять несколько минут).

Теперь база данных загружена и готова к дальнейшей работе обменника.

***

## Установка PHP 8.4

Данный пункт описывает процесс установки PHP 8.4 и необходимых расширений в панели управления FastPanel.

Инструкция подходит для новых серверов и чистых установок.

{% stepper %}
{% step %}

### Установка PHP 8.4

<figure><img src="/files/VOnIeJibI4wIgwaIYgtl" alt="" width="563"><figcaption></figcaption></figure>

В левом меню откройте раздел **Настройки → Приложения.**

В строке поиска введите **php84.**

1. В списке приложений найдите php84 (PHP 8.4).
2. Справа нажмите на иконку установки **(⬇).**
3. Дождитесь завершения установки — статус изменится на «Установлен».

{% hint style="info" %}
Если **PHP 8.4** отсутствует в списке — убедитесь, что архивы FastPanel корректно загружены и репозитории обновлены.
{% endhint %}
{% endstep %}

{% step %}

### Установка Redis (обязательно)

<figure><img src="/files/PZKBgPIjBbwFJcPKdYUo" alt="" width="563"><figcaption></figcaption></figure>

1. В этом же разделе **Настройки → Приложения:**
2. Найдите приложение **redis.**
3. Нажмите Установить и дождитесь завершения процесса.
   {% endstep %}

{% step %}

### Переход к настройке PHP

<figure><img src="/files/Imkwe9UAT3mqmUDxf5h0" alt="" width="563"><figcaption></figcaption></figure>

1. В левом меню откройте **Управление → PHP**.
2. Перейдите на вкладку **Модули PHP**.
3. В правом верхнем углу выберите версию **PHP 8.4.**
   {% endstep %}

{% step %}

### Установка необходимых расширений PHP

Убедитесь, что для PHP 8.4 установлены и активны следующие модули:

<figure><img src="/files/ODNfLaqzFAVp7OfHPZjo" alt="" width="563"><figcaption></figcaption></figure>

#### Обязательные расширения

* gmp — работа с большими числами и точные расчёты
* imagick — обработка изображений
* redis — взаимодействие с Redis
* yaml — парсинг YAML-конфигураций

Для установки:

1. Найдите нужный модуль в списке.
2. Нажмите Установить.
3. Убедитесь, что статус изменился на «Установлен».
   {% endstep %}

{% step %}

### Проверка установки

После завершения всех шагов рекомендуется проверить корректность установки:

* PHP версия: 8.4
* Все необходимые модули имеют статус **«Установлен»**
* Redis установлен как приложение и как PHP-модуль

При необходимости перезапустите PHP-FPM или сервер..
{% endstep %}
{% endstepper %}

***

## Настройка типа бэкенда и версии PHP в FastPanel

Если на вашем <mark style="color:red;">**поддомене**</mark> по умолчанию установлен **Apache**, вам необходимо переключить его на PHP-FPM, чтобы обеспечить корректную работу приложения на Laravel.

{% stepper %}
{% step %}

### Переход в раздел настроек поддомена:

В главном меню панели управления FastPanel выберите ваш app.<mark style="color:red;">**ваш\_домен**</mark>.

<figure><img src="/files/LfJLJ9jyx0LVne0LSY3w" alt="" width="307"><figcaption></figcaption></figure>

Нажмите на иконку **«Настройки»** в меню управления сайтом.

<figure><img src="/files/obhzQoHSXjrKEy4pSr1C" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Измените тип бэкенда на PHP-FPM:

* В открывшемся меню слева перейдите в раздел **«Бэкенд (PHP, Обратный прокси и т.п.)»**.
* В поле **«Тип бэкенда»** выберите вариант: **PHP**
  {% endstep %}

{% step %}

### Настройте версию PHP

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

В поле «Обработчик» выберите вариант: **PHP-FPM**

В поле «Версия» выберите нужную версию PHP, например: **PHP 8.4**
{% endstep %}

{% step %}

### Установите количество воркеров:

В поле **«Количество воркеров»** рекомендуется указать значение:\
**2** (оптимальное для большинства стандартных конфигураций).
{% endstep %}

{% step %}

### Рабочая поддиректория

В поле **«Рабочая поддиректория»** убедитесь, что указано значение <mark style="color:green;">**public**</mark>. Если указано другое значение, обязательно замените его на **public**.

Корректная настройка должна выглядеть так:

```
Рабочая поддиректория: public
Файл приложения: index.php
```

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

{% hint style="info" %}
Это действие направит все запросы пользователей в директорию **public**, что важно для безопасности и правильной работы Laravel-приложения. Без этой настройки может быть раскрыт доступ к конфиденциальным файлам проекта, поэтому её выполнение обязательно.
{% endhint %}
{% endstep %}

{% step %}

### Сохраните настройки

После внесения изменений нажмите кнопку **«Сохранить».**

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

{% endstep %}
{% endstepper %}

Теперь ваш сайт успешно переключен на обработчик PHP-FPM, а версия PHP корректно настроена и готова к работе.

***

## Ручная настройка конфигурации Nginx

Для корректной работы вашего обменника и поддержки всех необходимых функций необходимо вручную настроить веб-сервер Nginx. Настройки отличаются для поддомена и основного домена, поэтому следуйте инструкциям внимательно для каждого из них.

### Настройка Nginx для поддомена (Backend)

**Порядок действий:**

1. Войдите в панель управления **FastPanel → «Сайты»**.
2. Найдите свой поддомен (например, app.<mark style="color:red;">**ваш\_домен**</mark>) и перейдите в его настройки.
3. Перейдите во вкладку **«Ручная настройка»**, затем выберите раздел **«Frontend»**.<br>

   <figure><img src="/files/HeUj5MAj3iBlLjPT2tRf" alt=""><figcaption></figcaption></figure>
4. Найдите стандартный блок конфигурации:

```nginx
location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/app.ваш_домен.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
}
```

5. Сразу после него вставьте следующий блок (для поддержки WebSocket и Reverb):

```nginx
location /app {
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header Scheme $scheme;
    proxy_set_header SERVER_PORT $server_port;
    proxy_set_header REMOTE_ADDR $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";

    proxy_pass http://0.0.0.0:8080;
}
```

6. После внесения изменений нажмите кнопку **«Сохранить»**.

<figure><img src="/files/oDuEHBDPRPlLgB8OKoOg" alt="" width="563"><figcaption></figcaption></figure>

Эти настройки обеспечат правильную работу всех realtime-функций вашего приложения на поддомене.

### Настройка Nginx для основного домена (Frontend)

Эти настройки позволяют улучшить производительность сайта, настроить редиректы по языкам и связать frontend-приложение с backend-компонентами.

Перейдите в панель управления **FastPanel → «Сайты» → ваш основной домен → «Ручная настройка» → «Frontend»**.<br>

<figure><img src="/files/gNoSCh93OQCoQa6YlvM0" alt=""><figcaption></figcaption></figure>

Выполните следующие шаги внимательно:

#### Шаг 1: Добавьте блок определения языка (map) за пределами блока server

В самый верх конфигурации (за пределами блока server {}) вставьте:

```bash
map $http_accept_language $accept_language {
    "~*ru" ru;
    "~*en" en;
    default ru;
}

map $cookie_lang $selected_lang {
    "~^(ru|en)$" $cookie_lang;
    default $accept_language;
}
```

Этот блок автоматически определяет язык браузера пользователя и сохраняет его в переменной для дальнейшего перенаправления.<br>

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

#### Шаг 2: Gzip сжатие

Замени&#x20;

```nginx
gzip_comp_level 1;
```

на

```nginx
gzip_comp_level 5;
```

*Будет чуть медленнее на слабых CPU, но даст сильнее сжатие.*

#### Шаг 3: Добавьте проверку языка и перенаправление внутри блока server

Найдите строку: `disable_symlinks if_not_owner from=$root_path;`

**Сразу после неё добавьте:**

```nginx
add_header Vary "Accept-Language, Cookie";
```

Эти строки направляют пользователя на соответствующую языковую версию сайта по умолчанию (русский язык), если язык браузера не определён.

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

#### Шаг 4: Замените блок location / внутри блока server

Если у вас уже есть блок `location /` внутри конфигурации nginx, его необходимо удалить и заменить новой конфигурацией, подходящей для Angular SSR (localhost:4000) и отдачи статики.

#### <mark style="color:red;">Удалите старую конфигурацию:</mark>

```
location / {
    proxy_pass http://127.0.0.1:81;
    proxy_redirect http://127.0.0.1:81/ /;
    include /etc/nginx/proxy_params;
}


 location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
    try_files $uri $uri/ @fallback;
}

location @fallback {
    proxy_pass http://127.0.0.1:81;
    proxy_redirect http://127.0.0.1:81/ /;
    include /etc/nginx/proxy_params;
}
```

#### <mark style="color:green;">Добавьте вместо этого:</mark>

```
location = / {
    return 302 /$selected_lang/$is_args$args;
}

location ~ ^/(ru|en)$ {
    add_header Set-Cookie "lang=$1; Path=/; Max-Age=31536000; SameSite=Lax";
    return 302 /$1/$is_args$args;
}

location ~ ^/(ru|en)/ {
    proxy_pass http://localhost:4000;
    proxy_redirect http://localhost:4000/ /;
    include /etc/nginx/proxy_params;
    
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_buffering on;
    proxy_buffers 16 64k;
    proxy_buffer_size 128k;
    proxy_read_timeout 60s;
    proxy_connect_timeout 10s;
    proxy_send_timeout 10s;
}

location / {
    return 302 /$selected_lang$request_uri$is_args$args;
}

location ^~ /images/ {
    alias /var/www/пользователь/data/www/app.ваш_домен/public/images/;
    expires 30d;
    add_header Cache-Control "public, max-age=2592000, immutable";
    autoindex off;
    access_log off;
}

location ^~ /exports/ {
    alias /var/www/пользователь/data/www/app.ваш_домен/public/static/exports/;
    autoindex off;
    access_log off;
}

location ^~ /static/ {
    alias /var/www/пользователь/data/www/app.ваш_домен/public/static/;
    autoindex off;
    access_log off;
}

location ^~ /storage/ {
    alias /var/www/пользователь/data/www/app.ваш_домен/public/storage/;
    expires 30d;
    add_header Cache-Control "public, max-age=2592000, immutable";
    autoindex off;
    access_log off;
}

location /apis {
    index index.php index.html index.htm;
    alias /var/www/пользователь/data/www/app.ваш_домен/public;

    # Laravel routing fallback
    try_files $uri $uri/ @apis;

    # Защита от скрытых файлов (.env, .htaccess и т.п.)
    location ~ /\.(?!well-known).* {
        deny all;
    }

    # PHP-обработка
    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/app.ваш_домен.sock;
    }
}

location @apis {
    rewrite ^/apis/(.*)$ /apis/index.php?/$1 last;
}
```

{% hint style="danger" %}

## Важно!

В конфигурации могут встречаться пути вида:

* /var/www/**пользователь**/data/www/**app.**<mark style="color:red;">**ваш\_домен**</mark>
* /var/run/app.<mark style="color:red;">**ваш\_домен**</mark>.sock

Здесь слово <mark style="color:red;">**пользователь**</mark> — это имя системного пользователя, который был автоматически создан FastPanel при добавлении поддомена (например, app.ваш\_домен).

Перед сохранением конфигурации обязательно замените эти шаблонные пути на реальные директории и **имя пользователя**, которые указаны в настройках вашего поддомена в FastPanel.

Использование неверных путей приведёт к ошибкам в работе сайта или недоступности админки.
{% endhint %}

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


---

# 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-2-nastroika-fastpanel.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.
