Проверка конфигурации

Перед установкой сервиса SL-Gate следует перепроверить, что в конфигурацию были внесены все требуемые изменения.
Для этого ниже приведены примеры всех полных файлов конфигурации, которые редактировались в рамках данного документа:

---
# Параметры установки платформы.
iot:
  # Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT.
  #  ВАЖНО!!! В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступна платформа.
  serverName: "external.iot.address"
  # Содержит путь до директории, в которую будет произведена установка.
  installDir: /storage/iot
  # Ссылка на политику конфиденциальности
  privacyPolicyUrl: "my.privacy.policy"
  # Ссылка на базу знаний
  knowledgeBaseUrl: "https://docs.eltex-co.ru/display/EKB/IoT"

  # Параметры MongoDB.
  mongodb:
    # Версия MongoDB. На старом железе, не поддерживающем оптимизацию, нужно выставить значение `4`.
    version: 6
    external:
      # Если имеет значение true, будет использоваться внешняя MongoDB.
      # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port'.
      enable: false
      # Адрес внешней MongoDB.
      addr: "external.mongodb.address"
      # Порт внешней MongoDB.
      port: 27017

  # Параметры WEB.
  web:
    # Порт HTTP, по которому будет осуществляться доступ в WEB.
    httpPort: 80
    # Порт HTTPS, по которому будет осуществляться доступ в WEB.
    httpsPort: 443
    # Автоматически перенаправлять запросы по порту HTTP на порт HTTPS
    redirectHttpToHttps: true
    # Нужно ли использовать HTTPS при формировании ссылок на WEB ('true' по умолчанию, при этом будет использован порт,
    # указанный в 'iot.web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт,
    # указанный в 'iot.web.httpPort'.
    useHttpsByDefault: true
    nginx:
      # Максимальное число соединений, которые одновременно может открыть рабочий процесс
      worker_connections: 2048
      # Ограничение скорости обработки запросов модулем Nginx Rate Limiting
      rateLimit:
        enable: true
    certbot:
      # Использовать ли certbot для получения сертификатов Let's Encrypt.
      enable: false
      # Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
      email: test@email.com
    fail2ban:
      enable: true

  # Параметры сервера отправки email.
  mail:
    smtp:
      submitter: test@email.com
      password: "password"
      senderPrefix: "Сервер Eltex-SC"
      auth: "true"
      host: email.com
      port: 587
      # Протокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl.
      protection: starttls

  # Параметры authorization server.
  authorization:
    # Уровень отладки внутри IoT Authorization Server.
    logLevel: INFO

    # Уровень сложности captcha: easy, medium, hard
    captchaLevel: "easy"

    # Параметры для управления доступностью саморегистрации.
    selfRegistration:
      allow: true
      allowDemo: true
      allowSocialNetworks: false

    # Параметры клиентских регистраций (через соцсети).
    clientRegistrations:
      google:
        enable: true
        clientId: "GoogleClientIdChangeMe"
        clientSecret: "GoogleClientSecretChangeMe"
      microsoft:
        enable: true
        clientId: "MicrosoftClientIdChangeMe"
        clientSecret: "MicrosoftClientSecretChangeMe"
      apple:
        enable: true
        clientId: "AppleClientIdChangeMe"
        keyId: "AppleKeyIdChangeMe"
        teamId: "AppleTeamIdChangeMe"
      yandex:
        enable: true
        clientId: "YandexClientIdChangeMe"
        clientSecret: "YandexClientSecretChangeMe"
      vk:
        enable: true
        clientId: "VkClientIdChangeMe"
        clientSecret: "VkClientSecretChangeMe"
      mailRu:
        enable: true
        clientId: "MailRuClientIdChangeMe"
        clientSecret: "MailRuClientSecretChangeMe"

    skills:
      # Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка.
      yandex:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "YandexClientIdChangeMe"
        password: "PasswordChangeMe"
        # Id навыка, который необходимо указывать при отправке уведомлений.
        skillId: ""
        # OAuth-токен, который необходимо указывать при отправке уведомлений.
        oauthToken: ""

      # Параметры проекта умного дома Сбера для интеграции с Салютом. Отображается в карточке проекта.
      sber:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "SberClientIdChangeMe"
        password: "PasswordChangeMe"
        # Bearer-токен, который необходимо указывать при отправке уведомлений.
        bearerToken: ""

      # Параметры проекта умного дома Mail.ru для интеграции с Марусей. Отображается в карточке проекта/приложения.
      marusya:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "MarusyaClientIdChangeMe"
        password: "PasswordChangeMe"
        # App ID, который был назначен приложению VK при создании.
        appId: "MarusyaAppIdChangeMe"
        # OAuth-токен, который необходимо указывать при отправке уведомлений.
        oauthToken: ""

  # Параметры платформы IoT Core
  core:
    # Уровень отладки внутри IoT Core
    logLevel: INFO

    # Порты платформы для подключения Z-Wave-контроллеров
    ctlGate:
      port: 8070
      tcpPort: 8069
      sslPort: 8072

    links:
      # Нужно ли использовать HTTPS при формировании ссылок на ресурсы самой платформы (например, прошивки).
      useHttpsForApi: false
      # Нужно ли использовать HTTPS при формировании ссылок на фото с камер наблюдения.
      useHttpsForCameraLinks: true
      # Нужно ли использовать 'iot.web.httpPort'/'iot.web.httpsPort' при формировании ссылок на API.
      useUiProxyForApi: true

    push:
      firebase:
        enabled: false
      apns:
        enabled: false

    # Параметры для работы с видеосерверами
    video:
      # Параметры Flussonic.
      flussonic:
        url: ""
        apiKey: ""
        operatorId: ""
        adminLogin: ""
        motion:
          enabled: false
      # Параметры видеосервера EVI
      evi:
        url: ""
        apiKey: ""
        operatorId: ""
        adminLogin: ""

    acquiring:
      # Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать
      advancePeriod: 3d
      paykeeper:
        url: "CHANGE_ME"
        secret: "PaykeeperSecretChangeMe"
        user: "PaykeeperUsernameChangeMe"
        password: "PaykeeperPasswordChangeMe"

    # Настройки ИК-пульта
    irc:
      # Время ожидания ИК команды от пользователя
      recTimeout: 15s
      # Таймаут записи команды (отсутствия фронтов)
      cmdTimeout: 100ms

     # Настройки охраны
    guard:
      # Время, которое дается на включение FLIRS-устройств (ждем подтверждение от контроллера)
      # при постановке на охрану.
      deviceRequestDelay: 15s
      # Время, которое прибавляется ко времени задержки на очистку охранного кэша при постановке/снятии с охраны
      # на случай если охрана не завершила процесс постановки/снятия.
      # Время задержки равняется количеству охранных устройств, умноженному на deviceRequestDelay.
      clearContextExtraCacheDelay: 1m

# Параметры установки сервисов логирования (Elasticsearch + Logstash + Kibana).
elk:
  # Нужно ли добавлять в платформу appender, отправляющий логи в logstash.
  # В нем нет необходимости, если ELK не развернут или не настроен; это лишь спровоцирует сообщения об ошибках отправки
  # в логах платформы.
  enable: false
  # Имя (IP-адрес) сервера, на котором будет развернут ELK.
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [monitoring] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки системы логирования.
  installDir: /storage/elk

# Параметры установки сервисов мониторинга (Prometheus + Grafana).
monitoring:
  # Имя (IP-адрес) сервера, на котором будут развернуты сервисы мониторинга (Prometheus + Grafana).
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки системы мониторинга.
  installDir: /storage/monitoring

slgate:
  # Имя сервера, на котором будет развернут SLGATE.
  # ВАЖНО!!! Нельзя использовать IP-адрес, т.к. такая схема не будет работать!
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [slgate] должны совпадать.
  serverName: "********.ru"
  # Директория для установки SLGATE.
  installDir: /storage/slgate

---
# Версия контейнеров.
release: "1.34"

swarm:
  enabled: false
  # Имя stack-а для запуска в docker-swarm.
  stack: swarm_iot

# Имя репозитория docker registry, содержащего docker-образы для развертывания.
registry: hub.eltex-co.ru

# Список сервисов для перезапуска (при запуске плейбуков restart_*.yml).
# Можно оставить пустым, а при запуске передавать параметром командной строки.
services: []

# Нужно ли выполнять подготовку дистрибутива к установке. Этот шаг полезен при "чистой" установке
# на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через ansible,
# то такая подготовка не требуется и этот шаг можно пропустить для экономии времени.
withDistroPreparingStep: true

# Суффикс, добавляемый к имени каждого контейнера (помогает избежать конфликта имен контейнеров).
containerNameSuffix: ""

# Суффикс, добавляемый к имени создаваемой сети docker (помогает избежать конфликта имен сетей docker).
networkNameSuffix: ""

# Параметры сервисов IoT (для docker-compose), сгруппированные по именам.
# 'enable' — должен ли присутствовать сервис в docker-compose.yml.
# 'port.map' — номер порта сервиса в сети хоста.
# 'port.export' — нужно ли выполнять маппинг порта из контейнера в сеть хоста.
# 'db.name' м имя БД, используемой сервисом (связкой сервисов).
iot:
  # Параметры мониторинга использования дискового пространства. Должны соответствовать требованию:
  # warnThreshold > criticalThreshold > 0, иначе мониторинг дискового пространства будет отключен.
  diskUsage:
    # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим WARN
    # (отображаются сообщения с тегами WARN и ERROR). Количество бэкапов баз уменьшается пропорционально приближению к
    # порогу criticalThreshold.
    warnThreshold: 20
    # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим ERROR
    # (отображаются только сообщения с тегом ERROR). Бэкапы баз не выполняются.
    criticalThreshold: 10
  # Нужно ли установить лимиты на сервисы в docker compose
  limits:
    enable: false
  replication:
    core:
      enabled: false
      replicaCount: 1
    mqttBroker:
      enabled: false
      replicaCount: 2
    zwayproxy:
      enabled: false
      replicaCount: 1
    wsproxy:
      enabled: false
      replicaCount: 1
  mongodb:
    limits:
      enable: false
      cpus: 1.0
      memory: 4G
    port:
      map: 27017
      export: false
  broker:
    logLevel: INFO
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      # Будет ли развернут брокер на стороннем хосте.
      enable: false
      # Нужно ли устанавливать брокер на сторонний хост средствами ansible.
      install: false
      # Если установка брокера на сторонний хост будет выполняться средствами ansible, то в какую директорию.
      installDir: /storage/broker
      # Внешний адрес стороннего хоста, по которому к брокеру будут подключаться платформа и устройства.
      host: "external.broker.address"
      port:
        map: 8883
    internal:
      port:
        map: 8083
        export: false
    db:
      name: iot-broker
    jconsole:
      enable: false
      port: 32002
      # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент.
      # При развертывании докера здесь указывается адрес хоста, где работает докер.
      host: "10.20.30.40"
    hivemq:
      rootFolder: /hivemq/
  olapservice:
    logLevel: INFO
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      # Будет ли развернут olapservice на стороннем хосте.
      enable: false
      # Нужно ли устанавливать olapservice на сторонний хост средствами ansible.
      install: false
      # Если установка olapservice на сторонний хост будет выполняться средствами ansible, то в какую директорию.
      installDir: /storage/olapservice
      # Внешний адрес стороннего хоста, по которому платформа будет подключаться к olapservice.
      host: "external.olapservice.address"
    port:
      map: 8023
      export: false
    db:
      name: iotcore
      # Нужно ли устанавливать clickhouse (полезно для разработки olapservice).
      install: true
      limits:
        enable: false
        cpus: 1.0
        memory: 4G
      port:
        map: 8123
        export: false
  captcha:
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8088
      export: false
    caseSensitive: true
    allowedSizes:
      - "312x45"
      - "270x40"
    instance: "captcha:8088"
    proportion: 100
  zscaptcha:
    enable: false
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8089
      export: false
    caseSensitive: true
    instance: "zs-captcha:8089"
    proportion: 0
  authorization:
    # Развертывание окружения без auth server, полезно для разработки auth server.
    enable: true
    # API-ключ для авторизации HTTP-запросов в сервис авторизации от внешних систем, таких как Core.
    # Специальное значение 'autogenerated' означает, что apiKey будет сгенерирован в процессе установки.
    apiKey: "autogenerated"
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      host: "external.authorization.address"
    port:
      map: 8091
      export: false
      ssl:
        map: 8093
        export: false
    db:
      name: iot-authorization-server
    jconsole:
      enable: false
      port: 32003
      # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент.
      # При развертывании докера здесь указывается адрес хоста, где работает докер.
      host: "10.20.30.40"
    swagger:
      enable: false
    rabbit:
      eventQueue:
        name: platform-rpc-event-queue
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 16
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 16
  core:
    # Развертывание окружения без платформы, полезно для разработки core.
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8071
      export: false
      ssl:
        map: 8073
        export: false
    db:
      name: iot-core
      # Имена устаревших БД в MongoDB, используемые платформой.
      deprecated:
        fs:
          name: iot-fs
        licenses:
          name: iot-licenses
        events:
          name: iot-events
    jconsole:
      enable: false
      port: 32001
      # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент.
      # При развертывании докера здесь указывается адрес хоста, где работает докер.
      host: "10.20.30.40"
    swagger:
      enable: false
    broker:
      # Нужно ли платформе пытаться подключиться к MQTT Broker.
      enable: true
      threadPools:
        main:
          size: 16
    olapservice:
      # Нужно ли платформе пытаться подключиться к OlapService.
      enable: true
    mjollnir:
      # URL для Mjollnir.
      url: "http://smart.eltex-co.ru:8078/api/v1"
    slgate:
      instances:
        - slgate:4443
      ignoreServerCertCheck: false
    video:
      evi:
        ignoreServerCertCheck: false
        checkEventSenderAddress: true
      # Параметры WebRTC, которые необходимы камере для формирования своих ICE-кандидатов.
      webrtc:
        # Параметры STUN-сервера.
        stun:
          # URL STUN-серверов.
          urls:
            - "stun.example1.com:3478"
            - "stun.example2.com:3478"
        # Параметры TURN-сервера.
        turn:
          # Параметры TURN:SFU
          sfu:
            # Принудительное включение
            force: false
            # Таймаут на ожидание ивента от EVI о начале webrtc-сессии между камерой и TURN:SFU
            eventTimeout: 10s
        # Параметры P2P
        p2p:
          # Таймаут на ожидание SDP-answer от камеры
          sdpAnswerTimeout: 60s
        # Время ожидания проверки камерой типа своего NAT
        checkCameraNatTypeTimeout: 10s
        # Время выполнения ping к host candidate клиента
        pingHostCandidateTimeout: 10s
  web:
    # Развертывание окружения без WEB, полезно для разработки web.
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
  hazelcast:
    clusterName: iot-core
    instanceName: iot-core-hazelcast-instance
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      port:
        map: 5701
        export: false
  rabbitmq:
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    admin:
      user: guest
      password: guest
      port:
        map: 15671
        export: true
      sslPort:
        map: 15672
        export: true
    port:
      map: 5672
      export: false
  zwayproxy:
    enable: true
    logLevel: INFO
    external:
      enable: false
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8070
      export: true
    sslPort:
      map: 8072
      export: true
    rabbit:
      queue:
        # Идентификатор очереди для отправки сообщений из прокси в платформу.
        platform: zway-proxy-platform
      exchange:
        # Идентификатор топик-коллектора.
        proxy: zway-proxy-topic-exchange
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 16
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 16
      # Количество консьюмеров на стороне zwayProxy service
      proxyConsumers:
        # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
  wsproxy:
    logLevel: INFO
    maxConnections: 25000
    external:
      enable: false
      # Адрес хоста, куда nginx будет проксировать запросы.
      host: "1.2.3.4"
      port: 8075
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8075
      export: true
    rabbit:
      queue:
        # Идентификатор очереди для отправки сообщений из прокси в платформу.
        platform: ws-proxy-platform
      exchange:
        # Идентификатор топик-коллектора.
        proxy: ws-proxy-topic-exchange
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 16
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 16
      # Количество консьюмеров на стороне wsProxy service
      proxyConsumers:
        # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
        count: 16
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 16

slgate:
  db:
    name: "activator"
    user: "activator"
    password: "activator"
    port:
      map: 5432
      export: false
  vpn:
    port:
      map: 1194
    protocol: udp
    maxClients: 1024
  easyrsa:
    req:
      country: "RU"
      province: "Novosibirsk"
      city: "Novosibirsk"
      organization: "Eltex"
      organizationUnit: "EMS"
      email: "eltex@eltex-co.ru"
  activator:
    port:
      map: 8899
      export: false
  proxy:
    scheme: "https://"
    useClientCert: true
    clientCertPassword: "CHANGE_ME"
    port:
      map: 4443

# Параметры сервисов ELK (для docker-compose), сгруппированные по именам.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
elk:
  elasticsearch:
    rest:
      port:
        map: 9200
    nodes:
      port:
        map: 9300
  logstash:
    port:
      map: 5001
    api:
      port:
        map: 9600
  kibana:
    port:
      map: 5601

# Параметры сервисов мониторинга (для docker-compose), сгруппированные по именам.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
monitoring:
  prometheus:
    port:
      map: 9090
    # Период опроса сервисов со стороны Prometheus в секундах. Небольшие значения (менее десятков секунд) значительно
    # увеличат нагрузку на сеть.
    # При изменении параметра рекомендуется поменять переменную grafana.scrapeInterval на значение не ниже указанного
    # для Prometheus, чтобы не терять метрики.
    scrapeInterval: 60
  grafana:
    port:
      map: 3000
    # Период опроса Prometheus со стороны Grafana в секундах.
    scrapeInterval: 60
  nginxExporter:
    enable: false
    port:
      map: 9113

Установка сервиса SL-Gate

По завершении конфигурации сервиса SL-Gate, необходимо произвести его установку на сервер при помощи следующих команд:

cd /etc/ansible-iot/latest
sudo ansible-playbook install_monitoring.yml

Пример вывода команд по установке сервиса:

PLAY [Install SLGATE] *********************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Include registry hub.eltex-co.ru parameters] ****************************************************************************************************************************************************************
ok: [localhost]

TASK [Include slgate parameters] **********************************************************************************************************************************************************************************
ok: [localhost]

TASK [Correct ansible_become variable] ****************************************************************************************************************************************************************************
ok: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/get_timezone.yml for localhost

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/get_timezone/systemd.yml for localhost

TASK [Get current timezone of host via systemd] *******************************************************************************************************************************************************************
changed: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/distros/Ubuntu.yml for localhost

TASK [Remove old versions of docker for Ubuntu 22.04] *************************************************************************************************************************************************************
ok: [localhost] => (item=docker-compose)
ok: [localhost] => (item=docker)
ok: [localhost] => (item=docker-engine)
ok: [localhost] => (item=docker.io)
ok: [localhost] => (item=containerd)
ok: [localhost] => (item=runc)

TASK [Install utils and components for Ubuntu 22.04] **************************************************************************************************************************************************************
ok: [localhost] => (item=ca-certificates)
ok: [localhost] => (item=curl)
ok: [localhost] => (item=gnupg)
ok: [localhost] => (item=lsb-release)

TASK [Get Ubuntu release codename] ********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Add key for official docker repository to Ubuntu 22.04] *****************************************************************************************************************************************************
changed: [localhost]

TASK [Add official docker repository to Ubuntu 22.04] *************************************************************************************************************************************************************
changed: [localhost]

TASK [Install docker and components for Ubuntu 22.04] *************************************************************************************************************************************************************
ok: [localhost] => (item=docker-ce)
ok: [localhost] => (item=docker-ce-cli)
ok: [localhost] => (item=containerd.io)
ok: [localhost] => (item=docker-buildx-plugin)
ok: [localhost] => (item=docker-compose-plugin)
ok: [localhost] => (item=python3-cryptography)
ok: [localhost] => (item=python3-requests)
ok: [localhost] => (item=python3-docker)

TASK [Copy configs needed for docker images] **********************************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare docker-compose.yml] *********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare .env file for docker-compose] ***********************************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/postgres/data] ***************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/etc/easy-rsa] ***********************************************************************************************************************************************
changed: [localhost]

TASK [Prepare easy-rsa vars] **************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/etc/openvpn/server] *****************************************************************************************************************************************
changed: [localhost]

TASK [Prepare config for openvpn server] **************************************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/etc/openvpn/keys] *******************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/log/openvpn] ********************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/lib/bind] ***********************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/log/bind] ***********************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/etc/eltex-slgate] *******************************************************************************************************************************************
changed: [localhost]

TASK [Prepare config for activator] *******************************************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/log/eltex-sl-gate-activator] ****************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/etc/nginx/conf.d] *******************************************************************************************************************************************
changed: [localhost]

TASK [Prepare config for nginx] ***********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Generate an OpenSSL Certificate for web] ********************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/generate_cert.yml for localhost

TASK [Check and create directory /storage/slgate/gate/ssl/private] ************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/ssl/certs] **************************************************************************************************************************************************
ok: [localhost]

TASK [Check and create directory /storage/slgate/gate/ssl/csr] ****************************************************************************************************************************************************
changed: [localhost]

TASK [Check that the slgate.key already exists] *******************************************************************************************************************************************************************
ok: [localhost]

TASK [Check that the slgate.crt already exists] *******************************************************************************************************************************************************************
ok: [localhost]

TASK [Generate an OpenSSL private key slgate.key] *****************************************************************************************************************************************************************
changed: [localhost]

TASK [Generate an OpenSSL Certificate Signing Request with Subject information slgate.csr] ************************************************************************************************************************
changed: [localhost]

TASK [Generate a Self Signed OpenSSL certificate slgate.crt] ******************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/www/openvpn] ********************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/slgate/gate/var/log/nginx] **********************************************************************************************************************************************
changed: [localhost]

TASK [Create a slgate network with options] ***********************************************************************************************************************************************************************
changed: [localhost]

TASK [Tear down slgate] *******************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Remove easy-rsa PKI] ****************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Tear down postgres] *****************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Remove postgres db] *****************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create and start slgate services] ***************************************************************************************************************************************************************************
changed: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/docker_prune.yml for localhost

TASK [Prune unused images, containers and networks] ***************************************************************************************************************************************************************
changed: [localhost]

TASK [Prune unused volumes] ***************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=51   changed=35   unreachable=0    failed=0    skipped=9    rescued=0    ignored=0

В выводе команды необходимо дождаться появления строки "PLAY RECAP" и убедиться, что параметры unreachable и failed на следующей строке равны нулю, что означает успешную установку сервиса.
Если любой из этих параметров не равен нулю, то в процессе установки сервиса произошла ошибка. В таком случае в выводе команды будет присутствовать задача, статус которой равен failed или unreachable. Изучение текста ошибки этой задачи поможет выявить причину проблемы и исправить её.

Проверка работоспособности

1. После успешной установки сервиса проверьте состояние контейнеров сервиса мониторинга при помощи следующей команды:

sudo docker ps -a

Вывод данной команды должен иметь следующий вид:

CONTAINER ID   IMAGE                                   COMMAND                  CREATED         STATUS                     PORTS                                                                                              NAMES
0933bb3eabfb   hub.eltex-co.ru/iot/iot-slgate:1.34     "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes (unhealthy)   80/tcp, 0.0.0.0:1194->1194/udp, [::]:1194->1194/udp, 0.0.0.0:4443->4443/tcp, [::]:4443->4443/tcp   iot-slgate
dc956cea6057   hub.eltex-co.ru/iot/iot-postgres:1.34   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes               5432/tcp                                                                                           iot-postgres

Запуск всех контейнеров занимает до 3 минут.

Необходимо убедиться, что все контейнеры имеют статус Up и не происходит их перезапуска (статус Restarting).

В выводе команды должны присутствовать следующие контейнеры:

Название контейнераОжидаемый статус
iot-slgateUp (healthy)
iot-postgresUp