> 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 — программная платформа для создания и управления сервисом электронного обмена валют.

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

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

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

iEXExchanger состоит из трёх основных компонентов:

<table><thead><tr><th width="293.91015625">Компонент</th><th>Назначение</th></tr></thead><tbody><tr><td><strong>Backend</strong></td><td>Выполняет бизнес-логику, расчёты, обработку заявок и работу с данными</td></tr><tr><td><strong>Административная панель</strong></td><td>Используется владельцем проекта, администраторами и операторами</td></tr><tr><td><strong>Публичный сайт</strong></td><td>Предоставляет клиентам интерфейс обменного сервиса</td></tr></tbody></table>

## Как работает система

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

1. Клиент открывает публичный сайт.
2. Публичный сайт получает данные направлений, валют и курсов через API.
3. Клиент выбирает направление и создаёт заявку.
4. Backend проверяет введённые данные и настройки направления.
5. Система рассчитывает суммы, комиссии, курсы и лимиты.
6. Информация о заявке сохраняется в PostgreSQL.
7. Фоновые действия передаются в очередь Redis.
8. Laravel Horizon обрабатывает уведомления, webhooks, файлы и другие задачи.
9. Laravel Reverb передаёт обновления в реальном времени.
10. Администратор или оператор обрабатывает заявку через административную панель.

Такое разделение позволяет выполнять тяжёлые операции в фоне и не задерживать работу сайта.

## Языки программирования

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

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

## Backend

Backend — центральная часть iEXExchanger.

Он отвечает за бизнес-логику системы и обработку всех основных операций.

{% stepper %}
{% step %}

### PHP 8.4

PHP 8.4 используется как основной серверный язык.

На PHP реализованы:

* API;
* бизнес-логика;
* административные действия;
* фоновые задачи;
* работа с базой данных;
* обработка интеграций;
* команды обслуживания системы.
  {% endstep %}

{% step %}

### Laravel 13

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

Он предоставляет базовые механизмы для:

* маршрутизации API;
* проверки входящих данных;
* авторизации;
* работы с базой данных;
* выполнения очередей;
* планирования задач;
* отправки уведомлений;
* кеширования;
* логирования;
* обработки файлов.
  {% endstep %}
  {% endstepper %}

iEXExchanger использует Laravel как основу, но бизнес-логика обменного сервиса реализуется внутри самой платформы.

## Административная панель

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

{% stepper %}
{% step %}

### Vue 3

Vue 3 используется как основной frontend-фреймворк административной панели.
{% endstep %}

{% step %}

### TypeScript

TypeScript используется как основной язык разработки административной панели.
{% endstep %}

{% step %}

### Vite

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

{% step %}

### Tailwind CSS

Tailwind CSS используется для оформления административной панели.
{% endstep %}
{% endstepper %}

## Публичный сайт

Публичный сайт — клиентская часть обменного сервиса.

{% stepper %}
{% step %}

### Angular 22

Angular 22 используется как основной frontend-фреймворк публичного сайта.
{% endstep %}

{% step %}

### TypeScript

TypeScript используется как основной язык разработки публичного сайта.
{% endstep %}

{% step %}

### Angular SSR

Angular SSR используется для серверного рендеринга страниц.

При обычной клиентской загрузке браузер сначала получает JavaScript, после чего строит страницу.

При SSR сервер заранее формирует HTML и отправляет его браузеру.
{% endstep %}

{% step %}

### Node.js

Node.js используется как среда выполнения Angular SSR.

Он принимает запросы к публичному сайту, запускает серверный рендеринг и возвращает готовый HTML.

Node.js работает как отдельный процесс на сервере.
{% endstep %}

{% step %}

### Fastify

Fastify используется как сервер для Angular SSR.
{% endstep %}

{% step %}

### Tailwind CSS и SCSS

Tailwind CSS и SCSS используются для оформления публичного сайта.
{% endstep %}

{% step %}

### iEX UI

iEX UI — собственная библиотека компонентов iEXExchanger.

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

Собственная библиотека помогает сохранять единый внешний вид и поведение интерфейса.
{% endstep %}
{% endstepper %}

## Базы данных и хранение

iEXExchanger использует несколько типов хранилищ.

Каждое из них решает отдельную задачу.

<table><thead><tr><th width="258.7109375">Хранилище</th><th>Назначение</th></tr></thead><tbody><tr><td><strong>PostgreSQL</strong></td><td>Основные постоянные данные</td></tr><tr><td><strong>Redis</strong></td><td>Быстрые временные данные, кеш и очереди</td></tr></tbody></table>

## PostgreSQL

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

PostgreSQL используется для данных, которые должны сохраняться после перезапуска сервера и оставаться доступными длительное время.

## Redis

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

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

## Серверная инфраструктура

Для запуска iEXExchanger используется несколько серверных компонентов.

| Компонент      | Назначение                                                |
| -------------- | --------------------------------------------------------- |
| **Nginx**      | Принимает HTTP-запросы и направляет их нужному приложению |
| **PHP-FPM**    | Выполняет PHP-код Backend                                 |
| **Node.js**    | Запускает Angular SSR                                     |
| **PM2**        | Управляет процессом публичного сайта                      |
| **Supervisor** | Управляет фоновыми Backend-процессами                     |
| **Docker**     | Позволяет запускать компоненты в контейнерах              |
| **FASTPANEL**  | Используется для управления сервером                      |
| **Debian 12**  | Основная серверная операционная система                   |

## Nginx

Nginx используется как веб-сервер и reverse proxy.

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

## PHP-FPM

PHP-FPM выполняет PHP-код Backend.

Он принимает запрос от Nginx, запускает Laravel и возвращает результат.

## Node.js

Node.js используется для запуска публичного сайта в режиме Angular SSR.

Он работает как отдельный серверный процесс и формирует HTML страниц.

## PM2

PM2 используется для управления процессом Angular SSR.

Он позволяет:

* запускать приложение;
* автоматически перезапускать его при ошибке;
* запускать процесс после перезагрузки сервера;
* смотреть статус;
* просматривать логи;
* перезапускать приложение после обновления.

## Supervisor

Supervisor используется для управления долгоживущими Backend-процессами.

Через него могут запускаться:

* Laravel Horizon;
* обработчики очередей;
* Laravel Reverb;
* Laravel Pulse Worker;
* отдельные служебные процессы.

Если процесс завершится с ошибкой, Supervisor может запустить его повторно.

## Docker

Docker используется для контейнерного развёртывания.

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

Например:

```
Контейнер Backend
Контейнер PostgreSQL
Контейнер Redis
Контейнер Nginx
Контейнер Frontend
```

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

## FASTPANEL

FASTPANEL используется для управления сервером через веб-интерфейс.

## Debian 12

Debian 12 используется как основная серверная операционная система.

## Инструменты разработки

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

<table><thead><tr><th width="193.6484375">Инструмент</th><th>Назначение</th></tr></thead><tbody><tr><td><strong>Vite</strong></td><td>Сборка административной панели</td></tr><tr><td><strong>PHPUnit</strong></td><td>Тестирование Backend</td></tr><tr><td><strong>Vitest</strong></td><td>Тестирование frontend-компонентов</td></tr><tr><td><strong>PHPStan</strong></td><td>Статический анализ PHP</td></tr><tr><td><strong>ESLint</strong></td><td>Проверка TypeScript и Vue</td></tr></tbody></table>

## PHPUnit

PHPUnit используется для автоматического тестирования Backend.

## Vitest

Vitest используется для тестирования frontend-кода.

## PHPStan

PHPStan выполняет статический анализ PHP-кода.

## ESLint

ESLint используется для проверки TypeScript, JavaScript и Vue-кода.

Он помогает поддерживать единые правила и находить потенциальные ошибки.


---

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