> 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/ustanovka-i-obnovlenie/ustanovka/nastroika-fastpanel/nastroika-frontend.md).

# Настройка Frontend

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

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

После завершения настройки Frontend должен быть доступен по адресу: `https://ваш_домен`

## Перед началом

Перед выполнением данного этапа убедитесь, что:

* основной домен уже создан в FastPanel;
* SSL-сертификат для основного домена настроен;
* архив Frontend скачан из личного кабинета iEXExchanger;
* вы имеете доступ к панели управления FastPanel.

***

## Загрузка файлов Frontend

В панели управления FastPanel перейдите в раздел **«Сайты»** и выберите основной домен: `ваш_домен`&#x20;

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

Перейдите в раздел **«Файлы».**

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

Откроется корневая директория сайта.

{% content-ref url="/spaces/uyjsNtEAtO6Sby8CHWyD/pages/MDuqJRjp8L1cHG9i4sRB" %}
[Файлы сайта в FastPanel](/help-center/upravlenie-serverom/panel-fastpanel/faily-saita-v-fastpanel.md)
{% endcontent-ref %}

Загрузите архив Frontend, полученный в личном кабинете iEXExchanger, используя кнопку **«Загрузить»** в верхней части файлового менеджера.

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

После завершения загрузки распакуйте архив непосредственно в корневую директорию сайта.

## Проверка структуры проекта

После распаковки в корневой директории сайта должна присутствовать директория: `dist/exchanger`

Именно она содержит готовую клиентскую часть системы и SSR-сервер Angular.

<figure><img src="/files/7kgJG3PedMGsbS7uGCS7" alt=""><figcaption></figcaption></figure>

Если после распаковки появилась дополнительная вложенная папка, перенесите содержимое архива в корень сайта.

***

## Создание файла .env

После загрузки файлов необходимо создать конфигурационный файл Frontend.

В корневой директории проекта создайте новый файл: `.env`

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

Добавьте в него следующую конфигурацию:

```dotenv
NODE_ENV=production
PORT=4000
HOST=127.0.0.1

PM2=true

SUPPORTED_LANGUAGES=ru,en
DEFAULT_LANGUAGE=ru

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

CSS_VERSION=1

CUSTOM_THEME=custom-theme
CUSTOM_THEME_URL=/static/theme/custom-theme.css
```

{% content-ref url="/spaces/uyjsNtEAtO6Sby8CHWyD/pages/Yep95n9UPE2CNtlKuOdV" %}
[Настройка языков](/help-center/administrirovanie/nastroika-yazykov.md)
{% endcontent-ref %}

После создания файла сохраните изменения.

### Настройка параметров

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

{% stepper %}
{% step %}

#### ALLOWED\_HOSTS

Укажите основной домен обменного пункта.

Пример: `ALLOWED_HOSTS=example.com,app.example.com`
{% endstep %}

{% step %}

#### API\_URL

Укажите адрес технического поддомена.

Пример: `API_URL=https://app.example.com`
{% endstep %}

{% step %}

### SUPPORTED\_LANGUAGES

Список языков, доступных на сайте. Языки указываются через запятую.

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

```
SUPPORTED_LANGUAGES=ru,en,es,fr,pl,uk,zh,ka,kk
```

Важно: язык должен существовать в самой сборке Frontend. Нельзя просто добавить язык в `.env`, если в `dist/exchanger/browser/` нет папки этого языка.
{% endstep %}
{% endstepper %}

## Создание конфигурации PM2

Для последующего запуска Frontend необходимо создать конфигурационный файл PM2.

В корневой директории проекта создайте новый файл: `ecosystem.config.cjs`

Добавьте в него следующий код:

```javascript
module.exports = {
    apps: [
        {
            name: 'iexexchanger',
            script: 'dist/exchanger/server/server.mjs',
            cwd: __dirname,
            instances: 1,
            exec_mode: 'fork',
            autorestart: true,
            watch: false,
            max_memory_restart: '1G',
            env: {
                NODE_ENV: 'production',
                PORT: 4000,
                HOST: '127.0.0.1',
                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: true,
            listen_timeout: 10000,
            kill_timeout: 5000,
            exp_backoff_restart_delay: 100,
        },
    ],
};
```

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

```nginx
instances: 1
exec_mode: 'fork'
```

Не рекомендуется сразу использовать:

```nginx
instances: 'max'
exec_mode: 'cluster'
```

{% hint style="warning" %}
Режим `cluster` и `instances: 'max'` можно использовать только на более мощных серверах после проверки нагрузки.
{% endhint %}

После добавления конфигурации нажмите кнопку **«Сохранить»**.


---

# 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/ustanovka-i-obnovlenie/ustanovka/nastroika-fastpanel/nastroika-frontend.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.
