# Установка шлюза оборудования

Шлюз работает круглосуточно без окна и без входа пользователя. Ставьте его туда, откуда видно оборудование и откуда разрешён исходящий доступ на 443: сервер SCADA, промышленный компьютер или сервер в DMZ между сетью цеха и офисной сетью.

## Что поддерживается

| Платформа | Как запускается | Обновления |
|---|---|---|
| Windows 10, Windows Server 2016 и новее, x64 | служба Windows «Samreshuuu Equipment Gateway», автозапуск и перезапуск при сбое | ставятся сами, если их не выключили на объекте |
| Linux с Docker | контейнер | новым образом, сам шлюз себя не заменяет |
| Linux без Docker | служба systemd | новой сборкой, сам шлюз себя не заменяет |

Протоколы OPC DA и Mitsubishi CNC (EZSocket) работают только в шлюзе на Windows, подробнее в [протоколах](/help/equipment-protocols).

**Где взять сборку**
Данные оборудования подключаются по запросу, и сборку шлюза мы передаём при включении. [Напишите нам](/help/contacts).

## Код привязки

В разделе **«Интеграции»** на вкладке **«Шлюзы»** нажмите **«Подключить шлюз»**, выберите объект, назовите шлюз и нажмите **«Получить код»**. Окно покажет **«Команда на сервере объекта»** одной строкой и сам код. Код одноразовый и действует ограниченное время, остаток срока виден под кодом. Когда шлюз выйдет на связь, окно напишет **«Шлюз „…“ привязан»**.

Команда меняет код на ключ шлюза, и ключ сразу ложится в хранилище секретов системы. Служба подхватывает новую привязку сама, перезапускать её не нужно. Шлюз шлёт данные только на адрес приёма, вшитый в сборку: строка с чужим адресом его никуда не перенаправит.

## Windows

### Установите службу
В консоли администратора выполните `equipment-gateway install-service`. Шлюз скопирует себя в `%ProgramFiles%\Samreshuuu\EquipmentGateway` и зарегистрирует службу «Samreshuuu Equipment Gateway», которая запускается сама и перезапускается после сбоя.

### Привяжите шлюз
Выполните команду из окна привязки: `equipment-gateway activate …`.

Настройки и данные лежат в `%ProgramData%\Samreshuuu\EquipmentGateway`: файл `gateway.toml` и папка `data` с буфером, ключом и сертификатами. Папку шлюз закрывает правами системы и администраторов. Удалить службу: `equipment-gateway uninstall-service`.

## Linux: контейнер

```bash
docker volume create equipment-gateway-data
docker run --rm -v equipment-gateway-data:/var/lib/equipment-gateway equipment-gateway activate <КОД>
docker run -d --restart unless-stopped --name equipment-gateway \
  -v equipment-gateway-data:/var/lib/equipment-gateway equipment-gateway
```

Том хранит буфер, ключ и сертификаты: не удаляйте его при смене образа. Файл настроек, если он нужен, монтируется в `/etc/equipment-gateway/gateway.toml`.

## Linux: служба systemd

```bash
install -m 0755 equipment-gateway /usr/local/bin/equipment-gateway
useradd --system --home-dir /var/lib/equipment-gateway equipment-gateway
install -d -o equipment-gateway -m 0700 /var/lib/equipment-gateway
sudo -u equipment-gateway equipment-gateway activate <КОД>
systemctl enable --now equipment-gateway
```

Юнит запускает шлюз от отдельного системного пользователя, без повышения прав, с файловой системой только на чтение, кроме `/var/lib/equipment-gateway`. Настройки читаются из `/etc/equipment-gateway/gateway.toml`.

## Файл настроек

Файл нужен, только если объекту есть что решить самому. Нет файла, значит всё по умолчанию. С файлом, который не читается, шлюз не запустится и назовёт ошибку.

```toml
proxy = "http://proxy.plant.local:3128"
no_proxy = "crl.plant.local"
equipment_hosts = ["10.20.0.0/16", "scada1.plant.local", ".plc.plant.local"]
auto_update = true
buffer_max_mb = 1024
```

- **`proxy`, `no_proxy`**: явный прокси для выхода в облако и список адресов мимо него. Без `proxy` шлюз берёт маршрут машины: переменные окружения HTTPS_PROXY и NO_PROXY, на Windows ещё прокси WinHTTP (`netsh winhttp set proxy`), PAC и WPAD. Логин и пароль прокси можно указать в адресе. К оборудованию шлюз ходит напрямую, не через прокси.
- **`equipment_hosts`**: адреса сети объекта, к которым шлюзу можно подключаться. Без строки шлюз подключается к любому адресу из настроек подключения. Со строкой подключение к адресу вне списка не запускается и пишет **«Неверная настройка подключения»**. Облако список расширить не может. Пустой список не пускает никуда.
- **`auto_update`**: `false` выключает автообновление на объекте, и облако включить его обратно не может.
- **`buffer_max_mb`**: потолок места на диске под данные, которые ждут отправки. Сверх него вытесняются самые старые.

Записи `equipment_hosts`: адрес (`10.20.1.5`), сеть (`10.20.0.0/16`), имя (`plc1.plant.local`) или все имена домена (`.plant.local`). Имя сверяется как написано и не разрешается в адрес: сеть пропускает только подключение, записанное адресом, имя только подключение, записанное именем.

## Обновления

Шлюз на Windows ставит новую версию сам по команде облака: пакет проверяется по подписи, а если новая версия не вышла на связь, служба возвращается на прежнюю. Данные, которые прежняя версия не успела отправить, переходят к новой. Режим обновления виден в строке шлюза на вкладке «Шлюзы»: **«Автоматические обновления»**, **«Автообновление отключено на объекте»** или **«Обновления устанавливает оператор»** с причиной.

Шлюз на Linux сам не обновляется: обновление ставит оператор, новым образом контейнера или новой сборкой для systemd.

## Отозвать шлюз

В строке шлюза на вкладке «Шлюзы» выберите **«Отозвать»** и подтвердите в окне **«Отозвать шлюз „…“?»**. Ключ перестаёт работать сразу, данные с объекта перестают приходить, а буфер этого шлюза на его диске стирается. Подключения остаются, их можно выбрать у нового шлюза. Чтобы поставить шлюз заново на той же машине, получите новый код и выполните команду ещё раз.
