> 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/server-i-dannye/tekhnologicheskii-stek.md).

# Технологический стек

iEXExchanger — программная платформа для создания и управления сервисом электронного обмена валют.

Система объединяет Backend, административную панель, публичный сайт, базы данных, кеш, фоновые задачи, обновления и резервное копирование. Все компоненты устанавливаются и связываются автоматически на чистом сервере.

{% hint style="info" %}
Состав серверного окружения определяет Installer. Не устанавливайте PHP, Node.js, PostgreSQL, Redis, Nginx, менеджеры процессов или панель управления вручную перед первичной установкой.
{% endhint %}

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

## Архитектура системы

### Основные части продукта

<table><thead><tr><th width="242.85546875">Компонент</th><th>Адрес</th><th>Назначение</th></tr></thead><tbody><tr><td>Публичный сайт</td><td><code>https://ваш_домен</code></td><td>Интерфейс обменного сервиса для клиентов</td></tr><tr><td>Backend и API</td><td><code>https://app.ваш_домен</code></td><td>Бизнес-логика, данные, интеграции и серверные функции</td></tr><tr><td>Административная панель</td><td><code>https://app.ваш_домен</code></td><td>Управление обменным пунктом администраторами и операторами</td></tr></tbody></table>

Публичный сайт и административная панель являются отдельными интерфейсами. Они используют общий Backend, который проверяет данные, выполняет расчёты, управляет заявками и сохраняет результаты в PostgreSQL.

### Как обрабатывается запрос

1. Клиент открывает публичный сайт.
2. Nginx принимает HTTPS-запрос и направляет его нужному компоненту.
3. Angular SSR формирует публичную страницу и получает данные через API Backend.
4. Laravel проверяет запрос, выполняет бизнес-логику и обращается к PostgreSQL или Redis.
5. Длительные операции передаются фоновым обработчикам.
6. Laravel Reverb передаёт поддерживаемые обновления в реальном времени.
7. Административная панель получает актуальные данные через API.

Внутренние службы не публикуются напрямую в интернете. Внешние запросы проходят через Nginx, а PHP-FPM, PostgreSQL, Redis, Angular SSR и Reverb используют локальные подключения сервера.

## Языки и прикладные технологии

### Основные языки

<table><thead><tr><th width="270.8828125">Язык</th><th>Где используется</th></tr></thead><tbody><tr><td>PHP</td><td>Backend, API, бизнес-логика и фоновые задачи</td></tr><tr><td>TypeScript</td><td>Административная панель и публичный сайт</td></tr><tr><td>SQL</td><td>Структура данных и запросы PostgreSQL</td></tr><tr><td>Go</td><td>Installer, Updater и серверные служебные инструменты</td></tr><tr><td>HTML, Blade, CSS и SCSS</td><td>Страницы, письма, интерфейсы и оформление</td></tr></tbody></table>

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

{% tabs %}
{% tab title="Backend" %}

### PHP 8.5

PHP 8.5 является серверной средой текущей чистой установки. PHP-код выполняется через PHP-FPM.

Защищённые части продукта загружаются через ionCube Loader 15.5.0 или новее. Совместимую версию устанавливает и проверяет Installer.

### Laravel 13

Laravel 13 используется как основной Backend-фреймворк.

Backend отвечает за:

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

Бизнес-логика обменного сервиса реализована внутри iEXExchanger. Laravel предоставляет ей серверную основу.
{% endtab %}

{% tab title="Административная панель" %}

### Vue 3

Административная панель построена на Vue 3 и TypeScript.

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

### Vite и интерфейс

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

В интерфейсе также используются:

* Vue Router — переходы между страницами;
* Pinia — управление состоянием интерфейса;
* Tailwind CSS 4 — оформление компонентов;
* SCSS — дополнительные стили.

На сервер загружается готовая production-сборка. Устанавливать инструменты разработки административной панели вручную не требуется.
{% endtab %}

{% tab title="Публичный сайт" %}

### Angular 22

Публичный сайт построен на Angular 22 и TypeScript.

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

### Angular SSR

Angular SSR формирует HTML страницы на сервере до передачи в браузер. Это ускоряет получение первоначального содержимого и позволяет серверу возвращать готовую страницу до запуска клиентского приложения.

### Node.js 24 и Fastify 5

Node.js 24 является серверной средой Angular SSR. Fastify 5 принимает локальные SSR-запросы и передаёт результат Nginx.

Процесс публичного сайта запускается через `pm2-runtime` внутри службы `iex-frontend.service`. Управление самой службой выполняет systemd.

### iEX UI

iEX UI — собственная библиотека компонентов публичного сайта. Она используется вместе с Tailwind CSS 4 и SCSS для сохранения единого внешнего вида и поведения интерфейса.
{% endtab %}
{% endtabs %}

## Данные и фоновые процессы

### PostgreSQL 18

PostgreSQL 18 является единственной основной реляционной системой управления базами данных текущей чистой установки.

В PostgreSQL хранятся постоянные данные, включая:

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

Installer создаёт отдельные базы для основных данных iEXExchanger и Laravel Pulse. Реквизиты подключения создаются и сохраняются автоматически.

{% hint style="warning" %}
Не заменяйте PostgreSQL на MySQL или MariaDB. Текущий Installer и новые выпуски iEXExchanger рассчитаны на PostgreSQL.
{% endhint %}

### Redis

Redis используется как быстрое вспомогательное хранилище.

Он обслуживает:

* кеш;
* сессии;
* очереди фоновых задач;
* данные Laravel Horizon;
* временные блокировки;
* координацию процессов;
* отдельные функции мониторинга и работы в реальном времени.

Redis не заменяет PostgreSQL. Постоянные данные продукта сохраняются в PostgreSQL и файловом хранилище.

### Фоновые службы Laravel

<table><thead><tr><th width="251.921875">Компонент</th><th>Назначение</th></tr></thead><tbody><tr><td>Laravel Horizon</td><td>Управление очередями и фоновыми обработчиками</td></tr><tr><td>Laravel Reverb</td><td>WebSocket-соединения и обновления в реальном времени</td></tr><tr><td>Laravel Pulse</td><td>Сбор и обработка технических показателей приложения</td></tr><tr><td>Laravel Scheduler</td><td>Запуск запланированных задач приложения</td></tr></tbody></table>

Horizon, Reverb и Pulse работают как отдельные службы systemd.

Планировщик задач запускает команду Laravel каждую минуту через системный `cron` от пользователя приложения.

## Серверное окружение

### Поддерживаемые операционные системы

Текущий стек новой установки поддерживает:

* Ubuntu 26.04;
* Debian 13.

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

{% content-ref url="/pages/RjtzBZHtqwFTm8nJo8p8" %}
[Системные требования](/ustanovka-i-obnovlenie/sistemnye-trebovaniya.md)
{% endcontent-ref %}

### Веб-сервер и выполнение приложений

<table><thead><tr><th width="230.609375">Компонент</th><th>Назначение</th></tr></thead><tbody><tr><td>Nginx</td><td>HTTPS, статические файлы, reverse proxy и маршрутизация запросов</td></tr><tr><td>PHP-FPM</td><td>Выполнение PHP-кода Backend</td></tr><tr><td>Node.js 24</td><td>Выполнение Angular SSR</td></tr><tr><td>PM2 Runtime</td><td>Запуск процесса Angular SSR внутри systemd</td></tr><tr><td>systemd</td><td>Управление серверными и прикладными службами</td></tr><tr><td>cron</td><td>Ежеминутный запуск Планировщика задач Laravel</td></tr></tbody></table>

Nginx является единой публичной точкой входа. Он направляет запросы к PHP-FPM, Angular SSR и Laravel Reverb, а также отдаёт статические файлы.

PM2 не работает как отдельный пользовательский daemon. Installer запускает один foreground-процесс `pm2-runtime` внутри `iex-frontend.service`.

Запускать Frontend через `pm2 startup`, `pm2 save` или отдельную root-сессию не требуется.

### Основные службы

<table><thead><tr><th width="300.3515625">Служба</th><th>Что запускает</th></tr></thead><tbody><tr><td><code>nginx.service</code></td><td>Публичный веб-сервер</td></tr><tr><td><code>php8.5-fpm.service</code></td><td>Backend через PHP-FPM</td></tr><tr><td><code>postgresql.service</code></td><td>PostgreSQL 18</td></tr><tr><td><code>redis-server.service</code></td><td>Redis</td></tr><tr><td><code>iex-frontend.service</code></td><td>Angular SSR через PM2 Runtime</td></tr><tr><td><code>iex-horizon.service</code></td><td>Очереди Laravel Horizon</td></tr><tr><td><code>iex-reverb.service</code></td><td>Laravel Reverb</td></tr><tr><td><code>iex-pulse-work.service</code></td><td>Обработчик Laravel Pulse</td></tr><tr><td><code>iex-pulse-check.service</code></td><td>Контроль Laravel Pulse</td></tr><tr><td><code>iex-update-agent.service</code></td><td>Серверный агент обновлений</td></tr><tr><td><code>iex-backup.timer</code></td><td>Запуск резервного копирования по расписанию</td></tr></tbody></table>

Службы создаёт и настраивает Installer.

Не создавайте параллельные копии этих процессов через пользовательский PM2, Supervisor, дополнительный `cron` или ручной запуск из SSH-сессии.

### HTTPS, firewall и изоляция

Installer настраивает:

* HTTPS и сертификаты выбранного режима;
* автоматическое обслуживание сертификатов через Certbot, когда используется ACME;
* firewall для SSH, HTTP и HTTPS;
* локальные адреса и Unix-сокеты для внутренних компонентов;
* системного пользователя приложения;
* права на файлы и каталоги;
* ограничения systemd для прикладных служб.

PostgreSQL, Redis, PHP-FPM, Angular SSR и Reverb не должны открываться напрямую в интернет. Доступ к ним проходит через локальные соединения или Nginx.

## Установка, обновления и резервные копии

### Installer

Installer — отдельная программа для первичной установки iEXExchanger.

Она:

* проверяет сервер и установочные файлы;
* устанавливает сертифицированное серверное окружение;
* создаёт пользователей, каталоги и базы данных;
* импортирует исходные данные;
* настраивает Nginx, PHP-FPM, PostgreSQL, Redis и systemd;
* устанавливает Frontend и Backend;
* настраивает HTTPS и firewall;
* настраивает резервное копирование;
* запускает итоговую проверку системы.

На сервер передаётся готовый исполняемый файл Installer. Устанавливать Go или собирать Installer самостоятельно не требуется.

### Updater и Update Agent

Updater и Update Agent используются для обновления установленного продукта.

Updater управляет обновлением через терминал, а Update Agent обслуживает обновления, запущенные из административной панели.

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

### Резервное копирование

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

* проверяемые дампы основной базы данных;
* отдельные дампы базы Laravel Pulse;
* Restic для зашифрованных резервных снимков;
* systemd timer для автоматического запуска;
* политику хранения старых резервных копий;
* отдельные точки восстановления перед обновлениями.

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

## Что не входит в стандартную установку

### FASTPANEL

FASTPANEL и другие панели управления сервером не устанавливаются и не используются.

Installer самостоятельно управляет:

* Nginx;
* PHP-FPM;
* PostgreSQL;
* Redis;
* HTTPS-сертификатами;
* firewall;
* системными службами;
* Планировщиком задач;
* резервным копированием.

Наличие панели управления не требуется для работы iEXExchanger.

{% hint style="danger" %}
Не устанавливайте FASTPANEL или другую панель управления поверх готового сервера iEXExchanger. Панель может изменить конфигурацию Nginx, PHP-FPM, сертификатов, firewall, пользователей и системных служб.
{% endhint %}

### Другие компоненты

| Компонент            | Использование                                                         |
| -------------------- | --------------------------------------------------------------------- |
| Supervisor           | Не используется: фоновые процессы запускает systemd                   |
| Docker               | Не используется в стандартной установке                               |
| Отдельный PM2 daemon | Не используется: `pm2-runtime` работает внутри `iex-frontend.service` |

{% hint style="warning" %}
Не устанавливайте Docker, Supervisor или отдельный PM2 daemon поверх стандартного серверного окружения. Это может создать конфликтующие службы, маршруты, порты и правила управления процессами.
{% endhint %}

Старые инструкции для Debian 12 и серверов с панелью управления не относятся к текущей первичной установке.

## Разработка и контроль качества

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

<table><thead><tr><th width="274.4921875">Часть продукта</th><th>Основные инструменты</th></tr></thead><tbody><tr><td>Backend</td><td>Composer, PHPUnit, Larastan/PHPStan и Laravel Pint</td></tr><tr><td>Административная панель</td><td>Vite, TypeScript, Vue TSC, ESLint и Vitest</td></tr><tr><td>Публичный сайт</td><td>Angular CLI, TypeScript, ESLint и Vitest</td></tr><tr><td>Серверные инструменты</td><td>Go tests и статические проверки Go</td></tr></tbody></table>

На сервер устанавливаются подготовленные файлы Backend, собранная административная панель, готовая Angular SSR-сборка и скомпилированные служебные программы.
