Публикация INFRAX в продакшн

Обзор

В текущей версии INFRAX для публикации в продакшн используются два подхода: прямая публикация через встроенный веб-сервер и публикация через reverse proxy. Для большинства сценариев рекомендуется reverse proxy, а прямую публикацию удобно использовать для небольших установок и тестовых стендов.

Текущая схема адресов

Компонент Порт Назначение
INFRAX 8045 Рабочее место IT-специалистов: мониторинг, helpdesk, удалённые подключения
IDENTYX 8040 Управление пользователями, правами доступа и учетными данными
ℹ️ Текущие названия в интерфейсе

В настройках приложения пользователь видит вкладки Авторизация и Лицензирование. Обе ведут в Identyx: первая открывает профиль и права доступа, вторая - централизованную лицензию.

⚠️ Важно для reverse proxy

Перед публикацией через reverse proxy задайте публичные URL через меню управления. Для INFRAX используйте адрес вида https://infrax.example.com, для IDENTYX - https://auth.example.com.

Настройка URL приложений

URL приложений настраиваются через меню управления. Это тот же поток, который используется при установке и первом запуске.

  1. Откройте меню управления: bash infrax.sh, sudo infrax или infrax.bat в зависимости от способа установки.
  2. Выберите пункт 7. ⚙️ Настроить URL приложений.
  3. Выберите 3. Полностью ввести свой URL.
  4. Укажите реальные домены:
    INFRAX: https://infrax.example.com
    IDENTYX: https://auth.example.com

Что важно учесть

  • Используйте только домены, которые уже настроены в DNS.
  • Указывайте именно https://, а не http://.
  • После изменения URL приложение нужно перезапустить.

Вариант 1: Прямая публикация

Прямая публикация подходит для простых схем, когда INFRAX и IDENTYX доступны без отдельного reverse proxy. При первом запуске система создает SSL сертификат автоматически, если в каталоге data/ssl его еще нет.

ℹ️ Путь к сертификатам

Текущий код использует файлы data/ssl/apache.crt и data/ssl/apache.key. Если сертификаты заменяются вручную, приложение нужно остановить и запустить снова.

  1. Сначала настройте публичные URL через меню управления.
  2. Запустите приложение с новыми URL, чтобы оно создало или обновило SSL сертификаты.
  3. При необходимости остановите приложение и замените файлы apache.crt и apache.key на свои.
  4. Снова запустите приложение.

Когда подходит этот вариант

  • Небольшая инсталляция на одном сервере.
  • Тестовый стенд без отдельного reverse proxy.
  • Сценарий, где доступ к сервисам идет напрямую по портам 8040 и 8045.

Вариант 2: Публикация через Reverse Proxy

Для продакшн-среды reverse proxy обычно удобнее: он завершает TLS, обслуживает стандартные порты 80/443, пропускает WebSocket и позволяет держать backend на внутренних адресах.

Что должно поддерживаться в конфигурации

  • HTTPS termination на reverse proxy.
  • Передача заголовков Host, X-Real-IP, X-Forwarded-For и X-Forwarded-Proto.
  • Поддержка WebSocket.
  • Лимит загрузки файлов не ниже 20G.
  • Таймауты порядка 300s для долгих операций.
ℹ️ Backend адреса

Все примеры ниже направляют трафик на 127.0.0.1:8045 для INFRAX и на 127.0.0.1:8040 для IDENTYX.

Nginx

Ниже приведён пример для Nginx с двумя виртуальными хостами. Сначала поднимается конфигурация на порту 80, а certbot --nginx затем сам добавляет TLS.

Шаг 1. Создайте файл конфигурации (например /etc/nginx/sites-available/infrax.conf):

# Блок map задаёт переменную $connection_upgrade для проброса WebSocket.
# Объявляется один раз в контексте http (файлы sites-enabled/ и conf.d/ уже внутри http {}).
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name infrax.example.com;

    location / {
        proxy_pass https://127.0.0.1:8045;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        client_max_body_size 20G;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

server {
    listen 80;
    server_name auth.example.com;

    location / {
        proxy_pass https://127.0.0.1:8040;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

Шаг 2. Включите конфигурацию, проверьте синтаксис и перезагрузите Nginx:

sudo ln -s /etc/nginx/sites-available/infrax.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Шаг 3. Выпустите сертификат командой из раздела Установка реальных SSL сертификатов. certbot --nginx автоматически добавит в эти блоки listen 443 ssl, пути к сертификату Let's Encrypt и редирект с HTTP на HTTPS.

Готовые сертификаты (корпоративный CA или выпуск вручную)

Если сертификаты уже есть, certbot не нужен — пропишите TLS сами. Блок map остаётся тем же, а каждый server оформляется с редиректом и блоком 443 ssl (пример для INFRAX; для auth.example.com — аналогично, с proxy_pass на 127.0.0.1:8040):

server {
    listen 80;
    server_name infrax.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name infrax.example.com;

    ssl_certificate     /etc/ssl/infrax/fullchain.pem;
    ssl_certificate_key /etc/ssl/infrax/privkey.pem;

    location / {
        proxy_pass https://127.0.0.1:8045;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        client_max_body_size 20G;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

Traefik

Traefik удобен для Docker-окружений и автоматически работает с Lets Encrypt.

http:
  routers:
    infrax:
      rule: "Host(`infrax.example.com`)"
      entryPoints:
        - websecure
      service: infrax
      tls:
        certResolver: letsencrypt
    identyx:
      rule: "Host(`auth.example.com`)"
      entryPoints:
        - websecure
      service: identyx
      tls:
        certResolver: letsencrypt
  services:
    infrax:
      loadBalancer:
        servers:
          - url: "https://127.0.0.1:8045"
    identyx:
      loadBalancer:
        servers:
          - url: "https://127.0.0.1:8040"

В статической конфигурации Traefik добавьте точку входа HTTPS и получение сертификатов:

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      email: admin@example.com
      storage: /var/lib/traefik/acme.json
      httpChallenge:
        entryPoint: web

Caddy

Caddy подходит, если нужен короткий конфиг и автоматическое обновление сертификатов.

infrax.example.com {
    reverse_proxy https://127.0.0.1:8045 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

auth.example.com {
    reverse_proxy https://127.0.0.1:8040 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

HAProxy

HAProxy полезен, если нужен явный контроль над балансировкой и TLS.

frontend https-in
    bind *:443 ssl crt /etc/haproxy/certs/
    acl host_inf hdr(host) -i infrax.example.com
    acl host_id hdr(host) -i auth.example.com
    use_backend infrax if host_inf
    use_backend identyx if host_id

backend infrax
    server infrax1 127.0.0.1:8045 ssl verify none

backend identyx
    server identyx1 127.0.0.1:8040 ssl verify none

Apache HTTP Server

Для Apache включите proxy, proxy_http, rewrite, headers и ssl.

<VirtualHost *:443>
    ServerName infrax.example.com
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/infrax.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/infrax.example.com/privkey.pem
    ProxyPreserveHost On
    ProxyPass / https://127.0.0.1:8045/
    ProxyPassReverse / https://127.0.0.1:8045/
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) wss://127.0.0.1:8045/$1 [P,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName auth.example.com
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/auth.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/auth.example.com/privkey.pem
    ProxyPreserveHost On
    ProxyPass / https://127.0.0.1:8040/
    ProxyPassReverse / https://127.0.0.1:8040/
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) wss://127.0.0.1:8040/$1 [P,L]
</VirtualHost>

Установка реальных SSL сертификатов

Для продакшна используйте реальные сертификаты от корпоративного центра сертификации или от Let's Encrypt. Если reverse proxy завершает TLS, сертификаты нужны на нем. Если используется прямая публикация, сертификаты размещаются в каталоге data/ssl приложения.

Размещение при прямой публикации

  • data/ssl/apache.crt - сертификат с цепочкой
  • data/ssl/apache.key - приватный ключ

Примеры для reverse proxy

ℹ️ Порядок для Nginx

Перед запуском certbot конфигурация из раздела Nginx уже должна быть включена и проходить sudo nginx -t (на портах listen 80). Certbot сам отредактирует конфигурацию, добавит listen 443 ssl с путями к сертификату и перезагрузит Nginx.

# Nginx
sudo certbot --nginx -d infrax.example.com -d auth.example.com

# Apache
sudo certbot --apache -d infrax.example.com -d auth.example.com

# Traefik / Caddy
# Сертификаты обновляются автоматически

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

После настройки проверьте, что оба веб-приложения доступны.

curl -I https://infrax.example.com
curl -I https://auth.example.com
  • В браузере открывается INFRAX без ошибок сертификата.
  • Вкладка Авторизация открывает Identyx.
  • Вкладка Лицензирование открывает централизованную лицензию в Identyx.

Устранение неполадок

502 Bad Gateway

Причина: reverse proxy не видит backend-сервисы.

Решение: проверьте, что INFRAX и IDENTYX запущены, а порты 8040 и 8045 слушаются.

docker ps
netstat -tlnp | grep -E '8040|8045'

Не открывается Identyx

Причина: неверно настроены публичные URL или DNS-записи.

Решение: повторите пункт 7. ⚙️ Настроить URL приложений и убедитесь, что домены совпадают с reverse proxy.

✅ Готово

После настройки сервисы INFRAX и IDENTYX доступны по доменным именам.