Перейти к содержанию

Обязательные параметры конфигурации

ALLOWED_HOSTS

Это список допустимых полных доменных имён (FQDN) и/или IP-адресов, которые могут использоваться для доступа к сервису InfraVision. Обычно это то же самое, что и имя хоста сервера InfraVision, но может отличаться; например, при использовании обратного прокси, обслуживающего веб-сайт InfraVision под другим FQDN, чем имя хоста сервера InfraVision. Чтобы защититься от атак на HTTP-заголовок Host, InfraVision не разрешит доступ к серверу через любые другие имена хостов (или IP-адреса).

Примечание

Этот параметр всегда должен быть определён как список или кортеж, даже если предоставлено только одно значение.

Значение этого параметра также используется для установки CSRF_TRUSTED_ORIGINS, которое ограничивает POST-запросы тем же набором хостов (подробнее об этом здесь). Имейте в виду, что InfraVision по умолчанию устанавливает USE_X_FORWARDED_HOST в True, что означает, что если вы используете обратный прокси, именно FQDN, используемое для доступа к этому обратному прокси, должно быть в этом списке (подробнее об этом здесь).

Пример:

ALLOWED_HOSTS = ['infravision.example.com', '192.0.2.123']

Если вы ещё не уверены, какое доменное имя и/или IP-адрес будет у установки InfraVision, и готовы принять связанные с этим риски, вы можете установить подстановочный знак (звёздочку), чтобы разрешить все значения хоста:

ALLOWED_HOSTS = ['*']

DATABASE

Внимание

Параметр конфигурации DATABASE устарел и будет удалён в будущем релизе. Пользователям рекомендуется перейти на новый параметр DATABASES (множественное число), который позволяет настраивать несколько баз данных.

См. конфигурацию DATABASES ниже для использования.


DATABASES

InfraVision требует доступа к сервису базы данных PostgreSQL 14 или новее для хранения данных. Этот сервис может работать локально на сервере InfraVision или на удалённой системе. Базы данных определяются как именованные словари:

DATABASES = {
    'default': {...},
    'external1': {...},
    'external2': {...},
}

Для самого InfraVision требуется только определение базы данных default. Однако некоторые плагины могут требовать настройки дополнительных баз данных. (Рассмотрите также настройку параметра DATABASE_ROUTERS при использовании нескольких баз данных.)

Для каждой базы данных должны быть определены следующие параметры:

  • NAME - Имя базы данных
  • USER - Имя пользователя PostgreSQL
  • PASSWORD - Пароль PostgreSQL
  • HOST - Имя или IP-адрес сервера базы данных (используйте localhost при локальной работе)
  • PORT - TCP-порт сервиса PostgreSQL; оставьте пустым для порта по умолчанию (TCP/5432)
  • CONN_MAX_AGE - Время жизни постоянного соединения с базой данных, в секундах (по умолчанию 300)
  • ENGINE - Бэкенд базы данных; должен быть совместимым с PostgreSQL бэкендом (например, django.db.backends.postgresql)

Пример:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'name',               # Имя базы данных
        'USER': 'user',               # Имя пользователя PostgreSQL
        'PASSWORD': 'J5brHrAXFLQSif0K', # Пароль PostgreSQL
        'HOST': 'localhost',            # Сервер базы данных
        'PORT': '',                     # Порт базы данных (оставьте пустым для порта по умолчанию)
        'CONN_MAX_AGE': 300,            # Максимальное время жизни соединения с БД
    }
}

Примечание

InfraVision поддерживает все параметры базы данных PostgreSQL, поддерживаемые базовым фреймворком Django. Полный список доступных параметров см. в документации Django.

Внимание

Параметр ENGINE должен указывать совместимый с PostgreSQL бэкенд базы данных. Если не определён, будет использоваться движок по умолчанию django.db.backends.postgresql.


REDIS

Redis — это легковесное хранилище данных в памяти, похожее на memcached. InfraVision использует Redis для очереди фоновых задач и других функций.

Redis настраивается с использованием параметра конфигурации, аналогичного DATABASE, и эти настройки одинаковы для обоих подразделов tasks и caching:

  • HOST - Имя или IP-адрес сервера Redis (используйте localhost при локальной работе)
  • PORT - TCP-порт сервиса Redis; оставьте пустым для порта по умолчанию (6379)
  • USERNAME - Имя пользователя Redis (если установлено)
  • PASSWORD - Пароль Redis (если установлен)
  • DATABASE - Числовой идентификатор базы данных
  • SSL - Использовать SSL-соединение с Redis
  • INSECURE_SKIP_TLS_VERIFY - Установите в True, чтобы отключить проверку TLS-сертификата (не рекомендуется)

Ниже приведён пример конфигурации:

REDIS = {
    'tasks': {
        'HOST': 'redis.example.com',
        'PORT': 1234,
        'USERNAME': 'netbox',
        'PASSWORD': 'foobar',
        'DATABASE': 0,
        'SSL': False,
    },
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'USERNAME': '',
        'PASSWORD': '',
        'DATABASE': 1,
        'SSL': False,
    }
}

Внимание

Настоятельно рекомендуется держать базы данных задач и кэша отдельно. Использование одного и того же номера базы данных на одном экземпляре Redis для обоих может привести к потере фоновых задач в очереди при событиях очистки кэша.

Поддержка UNIX-сокетов

Redis также можно настроить, указав полный URL вместо отдельных компонентов. Этот подход поддерживает использование соединения через UNIX-сокет. Например:

REDIS = {
    'tasks': {
        'URL': 'unix:///run/redis-netbox/redis.sock?db=0'
    },
    'caching': {
        'URL': 'unix:///run/redis-netbox/redis.sock?db=1'
    },
}

Использование Redis Sentinel

Если вы используете Redis Sentinel для целей высокой доступности, требуется минимальная настройка для перевода InfraVision на его распознавание. Это требует удаления ключей HOST и PORT из вышеприведённого примера и добавления трёх новых ключей.

  • SENTINELS: Список кортежей или кортеж кортежей, где каждый внутренний кортеж содержит имя или IP-адрес сервера Redis и порт для каждого экземпляра sentinel для подключения
  • SENTINEL_SERVICE: Имя master-сервиса для подключения
  • SENTINEL_TIMEOUT: Таймаут соединения, в секундах

Пример:

REDIS = {
    'tasks': {
        'SENTINELS': [('mysentinel.redis.example.com', 6379)],
        'SENTINEL_SERVICE': 'netbox',
        'SENTINEL_TIMEOUT': 10,
        'PASSWORD': '',
        'DATABASE': 0,
        'SSL': False,
    },
    'caching': {
        'SENTINELS': [
            ('mysentinel.redis.example.com', 6379),
            ('othersentinel.redis.example.com', 6379)
        ],
        'SENTINEL_SERVICE': 'netbox',
        'PASSWORD': '',
        'DATABASE': 1,
        'SSL': False,
    }
}

Примечание

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


SECRET_KEY

Это секретная псевдослучайная строка, используемая для создания новых криптографических хешей для паролей и HTTP-куки. Ключ, определённый здесь, не должен передаваться за пределы файла конфигурации. SECRET_KEY может быть изменён в любое время без влияния на сохранённые данные, однако имейте в виду, что это приведёт к аннулированию всех существующих пользовательских сессий. Развёртывания InfraVision, состоящие из нескольких узлов, должны иметь одинаковый секретный ключ, настроенный на всех узлах.

SECRET_KEY должен быть длиной не менее 50 символов и содержать комбинацию букв, цифр и символов. Скрипт, расположенный в $INSTALL_ROOT/netbox/generate_secret_key.py, может быть использован для генерации подходящего ключа. Обратите внимание, что этот ключ не используется напрямую для хеширования паролей пользователей или для зашифрованного хранения секретных данных в InfraVision.