Installer
Installer — мобильное приложение для монтажников интернет-провайдера и оператора связи. Приложение работает как PWA и интегрируется с учётной системой ERP (UserSide подобных).
В продакшене отдаётся как статика API и WebSocket идут на ipx.
Возможности
- Работа с нарядами: просмотр, поиск, фильтрация, создание и изменение статусов задач.
- Карточка задачи: описание, чек-лист, исполнители, комментарии, оборудование, файлы, история и связанные объекты.
- Фото и документы по задачам с загрузкой через камеру или галерею.
- Работа с абонентами: поиск по ФИО, адресу и лицевому счёту, просмотр договора, тарифа, услуг, баланса и контактных данных.
- Работа с оборудованием абонентов: ONU, MAC/IP, уровни PON, выдача и возврат ТМЦ.
- Интерактивная карта сети с GPS-позицией сотрудника.
- Отображение узлов, муфт, опор, колодцев, кабелей, волокон, домов и других объектов сети.
- Использование картографических подложек OpenStreetMap, Яндекс и Google.
- Измерение расстояний на карте (линейка).
- Поиск и геокодирование адресов.
- Создание и редактирование объектов сети, линий, кабелей и зданий в соответствии с правами сотрудника.
- Просмотр схемы коммутации узлов из ERP.
- Работа с личным инвентарём и складом.
- Поиск оборудования по серийному номеру, MAC-адресу или штрихкоду.
- Сканирование штрихкодов и QR-кодов камерой устройства.
- Перемещение ТМЦ между сотрудником, абонентом, домом, узлом, задачей и складом.
- Справочник адресов с поиском домов.
- Складские накладные на перемещение ТМЦ.
- Поиск ONU/ONT с отображением текущего уровня сигнала и порта OLT.
- История уровней PON и параметров ONU.
- Уведомления о событиях ERP через Web Push и канал реального времени.
- Чат между сотрудниками.
- Блокнот с разделами и заметками из ERP.
- Табель: календарь явок, сверхурочных и аварийных выездов.
- Управление началом и окончанием смены.
- Профиль сотрудника и доступ к функциям в соответствии с правами ERP.
- Установка на смартфон, планшет или компьютер без использования магазина приложений.
- Работа в браузере и в режиме установленного PWA-приложения.
Технические характеристики
- React, TypeScript, Progressive Web App (PWA).
- Интеграция с ERP через серверный Go-proxy.
- JWT-аутентификация; API-ключ ERP не передаётся клиенту.
- Карты на базе Leaflet.
- Локальное хранение кэша и истории уведомлений в IndexedDB.
- Уведомления через STOMP и Web Push.
- Поддержка GPS-позиционирования при открытом приложении.
- Портретная ориентация, режим standalone.
Требования
- HTTPS на хосте PWA в проде (геолокация, камера, Web Push, установка PWA)
Параметры конфигурации PWA
Задаются в dist/config.js на сервере.
Префикс REACT_APP_ — исторический; все ключи ниже входят в runtime-конфиг.
Обязательные / основные
| Параметр | По умолчанию | Описание |
|---|---|---|
REACT_APP_API_URL | — | Базовый URL ipx без хвоста /api (напр. https://api.example.com). От него строятся /api, /webpush, иконки узлов и т.п. |
REACT_APP_STOMP_URL | из API_URL → ws(s)://{host}/ws | Явный URL STOMP. Обычно не нужен, если WS на том же хосте, что API |
REACT_APP_LOGO_URL | пусто | URL логотипа в шапке (ссылка на главную). Пусто — без картинки-лого |
Карты и геопоиск
| Параметр | По умолчанию | Описание |
|---|---|---|
REACT_APP_MAP_SEARCH_PROVIDER | nominatim (если пусто — эвристика) | Провайдер поиска адресов: yandex | dadata | nominatim |
REACT_APP_YANDEX_TILES_KEY | — | Ключ Tiles API — только подложка карты (не для поиска) |
REACT_APP_YANDEX_GEOCODER_KEY | — | JS API / Geocoder — поиск и reverse |
REACT_APP_YANDEX_SUGGEST_KEY | — | Геосаджест — подсказки адресов |
REACT_APP_YANDEX_MAPS_KEY | — | Устаревший/общий fallback для тайлов и геокодера, если отдельные ключи пусты |
REACT_APP_DADATA_API_KEY | — | Токен DaData (если provider = dadata или автовыбор) |
REACT_APP_GOOGLE_MAPS_KEY | — | Ключ тайлов Google (карта / спутник / гибрид) |
Поведение поиска:
yandex— suggest + geocoder; без ключа или при ошибке → fallback на Nominatimdadata— подсказки DaDatanominatim— OSM Nominatim (без ключа; соблюдать политику использования)
OSM-подложка карты работает без ключей. Яндекс/Google-слои появляются при наличии соответствующих ключей.
Схема работы

Прокси Installer
ipx (installer proxy) — серверная часть Installer на Go. Клиент (PWA) не ходит в ERP напрямую: все запросы идут через ipx. API-ключ ERP хранится только на proxy и на устройство не передаётся.
Команды:
ipx # запуск сервера (foreground)
ipx install # systemd-сервис (нужен root)
ipx uninstall # остановить и удалить сервис (каталог /opt/ipx сохраняется)
ipx restart # перезапуск сервиса
ipx status # статус systemd
ipx help # справка
Конфигурация
Файл .env загружается из рабочей директории и/или рядом с бинарником. Переменные окружения процесса имеют приоритет над .env (уже заданные не перезаписываются).
Шаблон: server/.env.example.
cd server
cp .env.example .env
# отредактировать ERP_URL, ERP_API_KEY, SESSION_SECRET
При установке через ipx install конфиг ожидается в /opt/ipx/.env (если файла ещё нет — копируется найденный .env).
Переменные
| Переменная | Обязательно | По умолчанию | Описание |
|---|---|---|---|
LISTEN_ADDR | нет | :8080 | Адрес прослушивания ipx |
ERP_URL | да | — | Базовый URL ERP со слэшем в конце, напр. http://192.168.1.44/ |
ERP_API_KEY | да | — | API-ключ ERP (поле key в запросах к api.php) |
ERP_WS_URL | нет | из ERP_URL → ws(s)://{host}/ws | STOMP WebSocket ERP |
PUBLIC_BASE_URL | нет | LAN IP proxy | URL, с которого ERP может скачать временный файл вложения (…/tmp/…) |
TMP_DIR | нет | tmp | Каталог временных файлов для upload |
DEBUG | нет | 0 | 0 — обычный JSON; 1 — сырой ответ ERP как text/plain (ломает SPA). JWT не отключается |
CORS_ORIGIN | нет | * | Значение Access-Control-Allow-Origin |
SESSION_SECRET | нет* | dev-строка | Секрет HMAC для JWT (HS256). В проде задать длинную случайную строку |
WEBPUSH_DIR | нет | webpush | Каталог VAPID-ключей и подписок |
VAPID_SUBJECT | нет | mailto:installer@localhost | Контакт VAPID (mailto: или https:) |
* Без смены SESSION_SECRET токены можно подделать при известном дефолте.
Пример .env
LISTEN_ADDR=:8080
ERP_URL=https://erp.example.com/
ERP_API_KEY=your-erp-api-key
SESSION_SECRET=длинная-случайная-строка
CORS_ORIGIN=https://installer.example.com
PUBLIC_BASE_URL=https://api-installer.example.com
WEBPUSH_DIR=webpush
VAPID_SUBJECT=mailto:support@example.com
DEBUG=0
Демо
Адрес: https://installer.nodelink.ru
| Логин | Пароль |
|---|---|
| demo | demodemo |
Версия: 1.0.0 Alpha
Штрихкоды для сканирования
Сканируйте камерой Installer для поиска оборудования или добавления в накладную: штрихкоды (PDF)