NETBOX — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
 
(не показано 29 промежуточных версий этого же участника)
Строка 1: Строка 1:
The following sections detail how to set up a new instance of NetBox:
+
Установим Netbox на Debian 13
  
PostgreSQL database<br>
 
  
Ставим PostgreSQL в данном случае версия 17
+
'''<font color=blue>PostgreSQL</font>'''<br>
 +
 
 +
Ставим БД, в данном случае версия 17
 
  apt install -y postgresql
 
  apt install -y postgresql
 
  sudo -u postgres psql
 
  sudo -u postgres psql
 +
  
 
Создаём базу и пользователя
 
Создаём базу и пользователя
Строка 14: Строка 16:
 
  \connect netbox;
 
  \connect netbox;
 
  GRANT CREATE ON SCHEMA public TO netbox;
 
  GRANT CREATE ON SCHEMA public TO netbox;
 +
  
 
Проверяем подключение
 
Проверяем подключение
Строка 27: Строка 30:
  
  
Redis<br>
+
'''<font color=blue>Redis</font>'''<br>
NetBox components<br>
+
 
uWSGI<br>
+
Устанавливаем redis-сервер
HTTP server<br>
+
 
LDAP authentication (optional)<br>
+
apt install -y redis-server
 +
 
 +
 
 +
Проверяем
 +
# redis-server -v
 +
Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=3951f4e1c0288395
 +
# redis-cli ping
 +
PONG
 +
 
 +
 
 +
'''<font color=blue>Компоненты Netbox</font>'''<br>
 +
 
 +
Переходим к установке Netbox. Устанавливаемая версия 4.5 поддерживает Python 3.12 и выше
 +
 
 +
 
 +
Ставим зависимости
 +
apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
 +
 
 +
 
 +
Проверяем версию Python после установки
 +
python3 -V
 +
Python 3.13.5
 +
 
 +
 
 +
Определяемся с версией Netbox https://github.com/netbox-community/netbox/releases и скачиваем
 +
wget https://github.com/netbox-community/netbox/archive/refs/tags/vX.Y.Z.tar.gz
 +
tar -xzf vX.Y.Z.tar.gz -C /opt
 +
ln -s /opt/netbox-X.Y.Z/ /opt/netbox
 +
 
 +
Рекомендуется устанавливать NetBox в каталог, названный в соответствии с номером его версии. Например, NetBox v4.5.0 следует установить в /opt/netbox-4.5.0, а симлинк из /opt/netbox/ будет указывать на это местоположение. Это позволяет устанавливать будущие версии параллельно, не прерывая текущую установку. При переходе на новую версию необходимо обновить только симлинк.
 +
 
 +
 
 +
Создаём пользователя и даём ему права
 +
adduser --system --group netbox
 +
chown --recursive netbox /opt/netbox/netbox/media/
 +
chown --recursive netbox /opt/netbox/netbox/reports/
 +
chown --recursive netbox /opt/netbox/netbox/scripts/
 +
 
 +
 
 +
Переходим к конфигурационному файлу
 +
cd /opt/netbox/netbox/netbox/
 +
cp configuration_example.py configuration.py
 +
 
 +
 
 +
Готовим конфиг<br>
 +
 
 +
Основное блоки
 +
* ALLOWED_HOSTS
 +
* API_TOKEN_PEPPERS
 +
* DATABASES
 +
* REDIS
 +
* SECRET_KEY
 +
 
 +
 
 +
'''ALLOWED_HOSTS'''<br>
 +
Это список допустимых имен хостов и IP-адресов, с помощью которых можно получить доступ к этому серверу. Надо указать хотя бы одно имя или IP-адрес(Для проверки заголовка HTTP-узла)
 +
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
 +
 
 +
 
 +
'''API_TOKEN_PEPPERS'''<br>
 +
Код который будет использоваться для генерации контрольных сумм API-токенов
 +
API_TOKEN_PEPPERS = {
 +
    # DO NOT USE THIS EXAMPLE PEPPER IN PRODUCTION
 +
    1: 'kp7ht*76fiQAhUiiop086HfASLlYUE_S^gI^(7J^K5M!LfoH@vl&b_',
 +
}
 +
 
 +
Можем использовать generate_secret_key.py скрипт для генерации случайного pepper
 +
python3 ../generate_secret_key.py
 +
 
 +
 
 +
'''DATABASES'''<br>
 +
Задаём параметры подключения к БД
 +
DATABASES = {
 +
    'default': {
 +
        'NAME': 'netbox',              # Database name
 +
        'USER': 'netbox',              # PostgreSQL username
 +
        'PASSWORD': 'STronGPassWord',  # PostgreSQL password
 +
        'HOST': 'localhost',            # Database server
 +
        'PORT': '',                      # Database port (leave blank for default)
 +
        'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
 +
    }
 +
}
 +
 
 +
 
 +
'''REDIS'''<br>
 +
Задаём параметры подключения к redis-серверу
 +
REDIS = {
 +
    'tasks': {
 +
        'HOST': 'localhost',      # Redis server
 +
        'PORT': 6379,            # Redis port
 +
        'PASSWORD': '',          # Redis password (optional)
 +
        'DATABASE': 0,            # Database ID
 +
        'SSL': False,            # Use SSL (optional)
 +
    },
 +
    'caching': {
 +
        'HOST': 'localhost',
 +
        'PORT': 6379,
 +
        'PASSWORD': '',
 +
        'DATABASE': 1,            # Unique ID for second database
 +
        'SSL': False,
 +
    }
 +
}
 +
 
 +
'''SECRET_KEY'''<br>
 +
Создаём secret-key
 +
python3 ../generate_secret_key.py
 +
 
 +
 
 +
Пример конфига
 +
ALLOWED_HOSTS = ['netbox.iwad.ru', '172.16.37.28', '172.16.37.10']
 +
 +
DATABASES = {
 +
    'default': {
 +
        'ENGINE': 'django.db.backends.postgresql',  # Database engine
 +
        'NAME': 'netbox',        # Database name
 +
        'USER': 'netbox',        # PostgreSQL username
 +
        'PASSWORD': 'PASSWORD',  # PostgreSQL password
 +
        'HOST': 'localhost',      # Database server
 +
        'PORT': '',              # Database port (leave blank for default)
 +
        'CONN_MAX_AGE': 300,      # Max database connection age
 +
    }
 +
}
 +
 +
REDIS = {
 +
    'tasks': {
 +
        'HOST': 'localhost',
 +
        'PORT': 6379,
 +
        'USERNAME': '',
 +
        'PASSWORD': '',
 +
        'DATABASE': 0,
 +
        'SSL': False,
 +
    },
 +
    'caching': {
 +
        'HOST': 'localhost',
 +
        'PORT': 6379,
 +
        'USERNAME': '',
 +
        'PASSWORD': '',
 +
        'DATABASE': 1,
 +
        'SSL': False,
 +
    }
 +
}
 +
 +
SECRET_KEY = 'N9-)X8OWr^aLQ-BL+dpNn897gdfg0bs%P8bHzEYUw2xrg73Ja4'
 +
 +
# Optional settings  #
 +
ADMINS = [
 +
    # ('John Doe', 'jdoe@example.com'),
 +
]
 +
 +
# Permit the retrieval of API tokens after their creation.
 +
ALLOW_TOKEN_RETRIEVAL = False
 +
 +
# Base URL path if accessing NetBox within a directory. For example, if installed at https://example.com/netbox/, set:
 +
# BASE_PATH = 'netbox/'
 +
BASE_PATH = ''
 +
 +
# API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be
 +
# allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or
 +
# CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers
 +
CORS_ORIGIN_ALLOW_ALL = False
 +
CORS_ORIGIN_WHITELIST = [
 +
  #    'https://hostname.example.com'',
 +
]
 +
CORS_ORIGIN_REGEX_WHITELIST = [
 +
    # r'^(https?://)?(\w+\.)?example\.com$',
 +
]
 +
 +
# The name to use for the CSRF token cookie.
 +
#CSRF_COOKIE_NAME = 'csrftoken'
 +
 +
CSRF_TRUSTED_ORIGINS = ['https://netbox.iwad.ru']
 +
 +
# Enable installed plugins. Add the name of each plugin to the list.
 +
PLUGINS = [
 +
#"netbox_ipcalculator",
 +
]
 +
 +
# Remote authentication support
 +
REMOTE_AUTH_ENABLED = False
 +
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
 +
REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER'
 +
REMOTE_AUTH_USER_FIRST_NAME = 'HTTP_REMOTE_USER_FIRST_NAME'
 +
REMOTE_AUTH_USER_LAST_NAME = 'HTTP_REMOTE_USER_LAST_NAME'
 +
REMOTE_AUTH_USER_EMAIL = 'HTTP_REMOTE_USER_EMAIL'
 +
REMOTE_AUTH_AUTO_CREATE_USER = True
 +
REMOTE_AUTH_DEFAULT_GROUPS = []
 +
REMOTE_AUTH_DEFAULT_PERMISSIONS = {}
 +
 
 +
 
 +
Запускаем установку Netbox
 +
/opt/netbox/upgrade.sh
 +
 
 +
 
 +
Запускаем виртуальное окружение и создаём суперпользователя
 +
source /opt/netbox/venv/bin/activate
 +
 +
cd /opt/netbox/netbox
 +
python3 manage.py createsuperuser
 +
 
 +
 
 +
Netbox работает как WSGI-приложение за HTTP-сервером. В нашем примере показано, как установить и настроить uWSGI для этой роли, однако доступны и другие WSGI-серверы, которые должны работать аналогично.
 +
 
 +
Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим pyuwsgi
 +
source /opt/netbox/venv/bin/activate
 +
pip3 install pyuwsgi
 +
 
 +
 
 +
После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды
 +
echo 'pyuwsgi' >> /opt/netbox/local_requirements.txt
 +
 
 +
 
 +
Копируем дефолтный конфиг, его вполне достаточно для работы
 +
cp /opt/netbox/contrib/uwsgi.ini /opt/netbox/uwsgi.ini
 +
 
 +
 
 +
Далее скопируем файлы systemd для управления uWSGI и фоновым рабочим процессом NetBox
 +
cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
 +
 
  
 +
Отредактируем файл netbox.service, удалив строку начинающуюся с ExecStart=/opt/netbox/venv/bin/gunicorn, и раскомментируем строку с ExecStart=/opt/netbox/venv/bin/uwsgi
 +
  systemctl daemon-reload
  
  
 +
Стартуем сервис и проверяем, что он запустился
 +
systemctl enable --now netbox netbox-rq
 +
systemctl status netbox.service
  
  
 +
Для удобства поставим Nginx и добавим конфиг для Netbox
 +
server {
 +
        listen 80;
 +
        server_name netboxold.iwad.ru;
 +
 +
location /static/ {
 +
        alias /opt/netbox/netbox/static/;
 +
    }
 +
 +
location / {
 +
        # proxy_pass http://127.0.0.1:8001;
 +
        # proxy_set_header X-Forwarded-Host $http_host;
 +
        # proxy_set_header X-Real-IP $remote_addr;
 +
        # proxy_set_header X-Forwarded-Proto $scheme;
 +
        # comment the lines above and uncomment the lines below if using uWSGI
 +
        include uwsgi_params;
 +
        uwsgi_pass  127.0.0.1:8001;
 +
        uwsgi_param Host $host;
 +
        uwsgi_param X-Real-IP $remote_addr;
 +
        uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
 +
 +
        access_log /var/log/nginx/netbox.access.log;
 +
        error_log  /var/log/nginx/netbox.error.log;
 +
       
 +
        location = /favicon.ico {
 +
            log_not_found off;
 +
            access_log off;
 +
                }
 +
          location ~ /\.ht {
 +
            deny all;
 +
              }
 +
    }
 +
}
  
  
 +
Установка завершена, заходим в браузер и смотрим картинки
  
  
 +
<font color=blue>'''LDAP аутентификация'''</font><br>
  
 +
Ставим нужные пакеты
 +
apt install -y libldap2-dev libsasl2-dev libssl-dev
  
  
 +
Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим django-auth-ldap
 +
source /opt/netbox/venv/bin/activate
 +
pip3 install django-auth-ldap
  
  
 +
После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды
 +
echo 'django-auth-ldap' >> /opt/netbox/local_requirements.txt
 +
 +
 +
Включаем ldap-аутентификацию в <code>configuration.py</code>
 +
REMOTE_AUTH_ENABLED = True
 +
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
 +
 +
 +
Далее создаём файл в той же директории, что и configuration.py(обычно /opt/netbox/netbox/netbox/), с именем ldap_config.py и определяем все необходимые параметры
 +
import ldap
 +
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, LDAPGroupQuery
 +
 +
# включение логирования
 +
#import logging
 +
#logger = logging.getLogger('django_auth_ldap')
 +
#logger.addHandler(logging.StreamHandler())
 +
#logger.setLevel(logging.DEBUG)
 +
 +
# Server URI
 +
AUTH_LDAP_SERVER_URI = "ldap://ldap.iwad.ru"
 +
 
 +
# Set the DN and password for the NetBox service account.
 +
AUTH_LDAP_BIND_DN = "cn=admin,dc=iwad,dc=ru"
 +
AUTH_LDAP_BIND_PASSWORD = "kQN5UVz3jISa9LLvk2q5"
 +
#AUTH_LDAP_BIND_DN = "cn=netbox,dc=iwad,dc=ru"
 +
#AUTH_LDAP_BIND_PASSWORD = "FepfLVh8xjd9xnN7fZqv"
 +
 +
# Include this setting if you want to ignore certificate errors. This might be needed to accept a self-signed cert.
 +
# Note that this is a NetBox-specific setting which sets:
 +
#    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
 +
LDAP_IGNORE_CERT_ERRORS = True
 +
 +
# Include this setting if you want to validate the LDAP server certificates against a CA certificate directory on your server
 +
# Note that this is a NetBox-specific setting which sets:
 +
#    ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, LDAP_CA_CERT_DIR)
 +
LDAP_CA_CERT_DIR = '/etc/ssl/certs'
 +
 +
# User configuration
 +
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE,"(uid=%(user)s)")
 +
AUTH_LDAP_USER_DN_TEMPLATE = None
 +
AUTH_LDAP_USER_ATTR_MAP = {
 +
    "first_name": "givenName",
 +
    "last_name": "sn",
 +
    "email": "mail"
 +
}
 +
 +
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("groups,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
 +
# Ограничение доступа только для группы netbox_users
 +
AUTH_LDAP_REQUIRE_GROUP = "cn=netbox_users,ou=groups,dc=iwad,dc=ru"
 +
 +
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
 +
AUTH_LDAP_CACHE_TIMEOUT = 3600
  
  
 +
Перезагружаем Netbox и проверяем авторизацию
 +
systemctl restart netbox
  
  
https://nixhub.ru/posts/netbox-install/<br>
+
Здесь тоже самое на англицком https://netboxlabs.com/docs/netbox/installation/
https://netboxlabs.com/docs/netbox/installation/
 

Текущая версия на 16:19, 15 марта 2026

Установим Netbox на Debian 13


PostgreSQL

Ставим БД, в данном случае версия 17

apt install -y postgresql
sudo -u postgres psql


Создаём базу и пользователя

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'пароль';
ALTER DATABASE netbox OWNER TO netbox;
-- the next two commands are needed on PostgreSQL 15 and later
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;


Проверяем подключение

root@netbox ~ # psql --username netbox --password --host localhost netbox
Password: 
psql (17.8 (Debian 17.8-1.pgdg13+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.

netbox=> \conninfo
You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)


Redis

Устанавливаем redis-сервер

apt install -y redis-server


Проверяем

# redis-server -v
Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=3951f4e1c0288395
# redis-cli ping
PONG


Компоненты Netbox

Переходим к установке Netbox. Устанавливаемая версия 4.5 поддерживает Python 3.12 и выше


Ставим зависимости

apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev


Проверяем версию Python после установки

python3 -V
Python 3.13.5


Определяемся с версией Netbox https://github.com/netbox-community/netbox/releases и скачиваем

wget https://github.com/netbox-community/netbox/archive/refs/tags/vX.Y.Z.tar.gz
tar -xzf vX.Y.Z.tar.gz -C /opt
ln -s /opt/netbox-X.Y.Z/ /opt/netbox

Рекомендуется устанавливать NetBox в каталог, названный в соответствии с номером его версии. Например, NetBox v4.5.0 следует установить в /opt/netbox-4.5.0, а симлинк из /opt/netbox/ будет указывать на это местоположение. Это позволяет устанавливать будущие версии параллельно, не прерывая текущую установку. При переходе на новую версию необходимо обновить только симлинк.


Создаём пользователя и даём ему права

adduser --system --group netbox
chown --recursive netbox /opt/netbox/netbox/media/
chown --recursive netbox /opt/netbox/netbox/reports/
chown --recursive netbox /opt/netbox/netbox/scripts/


Переходим к конфигурационному файлу

cd /opt/netbox/netbox/netbox/
cp configuration_example.py configuration.py


Готовим конфиг

Основное блоки

  • ALLOWED_HOSTS
  • API_TOKEN_PEPPERS
  • DATABASES
  • REDIS
  • SECRET_KEY


ALLOWED_HOSTS
Это список допустимых имен хостов и IP-адресов, с помощью которых можно получить доступ к этому серверу. Надо указать хотя бы одно имя или IP-адрес(Для проверки заголовка HTTP-узла)

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


API_TOKEN_PEPPERS
Код который будет использоваться для генерации контрольных сумм API-токенов

API_TOKEN_PEPPERS = {
    # DO NOT USE THIS EXAMPLE PEPPER IN PRODUCTION
    1: 'kp7ht*76fiQAhUiiop086HfASLlYUE_S^gI^(7J^K5M!LfoH@vl&b_',
}

Можем использовать generate_secret_key.py скрипт для генерации случайного pepper

python3 ../generate_secret_key.py


DATABASES
Задаём параметры подключения к БД

DATABASES = {
    'default': {
        'NAME': 'netbox',               # Database name
        'USER': 'netbox',               # PostgreSQL username
        'PASSWORD': 'STronGPassWord',   # PostgreSQL password
        'HOST': 'localhost',            # Database server
        'PORT': ,                      # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
    }
}


REDIS
Задаём параметры подключения к redis-серверу

REDIS = {
    'tasks': {
        'HOST': 'localhost',      # Redis server
        'PORT': 6379,             # Redis port
        'PASSWORD': ,           # Redis password (optional)
        'DATABASE': 0,            # Database ID
        'SSL': False,             # Use SSL (optional)
    },
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'PASSWORD': ,
        'DATABASE': 1,            # Unique ID for second database
        'SSL': False,
    }
}

SECRET_KEY
Создаём secret-key

python3 ../generate_secret_key.py


Пример конфига

ALLOWED_HOSTS = ['netbox.iwad.ru', '172.16.37.28', '172.16.37.10']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Database engine
        'NAME': 'netbox',         # Database name
        'USER': 'netbox',         # PostgreSQL username
        'PASSWORD': 'PASSWORD',   # PostgreSQL password
        'HOST': 'localhost',      # Database server
        'PORT': ,               # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,      # Max database connection age
    }
}

REDIS = {
    'tasks': {
        'HOST': 'localhost',
        'PORT': 6379,
        'USERNAME': ,
        'PASSWORD': ,
        'DATABASE': 0,
        'SSL': False,
    },
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'USERNAME': ,
        'PASSWORD': ,
        'DATABASE': 1,
        'SSL': False,
    }
}

SECRET_KEY = 'N9-)X8OWr^aLQ-BL+dpNn897gdfg0bs%P8bHzEYUw2xrg73Ja4'

# Optional settings   #
ADMINS = [
    # ('John Doe', 'jdoe@example.com'),
]

# Permit the retrieval of API tokens after their creation.
ALLOW_TOKEN_RETRIEVAL = False

# Base URL path if accessing NetBox within a directory. For example, if installed at https://example.com/netbox/, set:
# BASE_PATH = 'netbox/'
BASE_PATH = 

# API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be
# allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or
# CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = [
 #     'https://hostname.example.com,
]
CORS_ORIGIN_REGEX_WHITELIST = [
    # r'^(https?://)?(\w+\.)?example\.com$',
]

# The name to use for the CSRF token cookie.
#CSRF_COOKIE_NAME = 'csrftoken'

CSRF_TRUSTED_ORIGINS = ['https://netbox.iwad.ru']

# Enable installed plugins. Add the name of each plugin to the list.
PLUGINS = [
#"netbox_ipcalculator",
]

# Remote authentication support
REMOTE_AUTH_ENABLED = False
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER'
REMOTE_AUTH_USER_FIRST_NAME = 'HTTP_REMOTE_USER_FIRST_NAME'
REMOTE_AUTH_USER_LAST_NAME = 'HTTP_REMOTE_USER_LAST_NAME'
REMOTE_AUTH_USER_EMAIL = 'HTTP_REMOTE_USER_EMAIL'
REMOTE_AUTH_AUTO_CREATE_USER = True
REMOTE_AUTH_DEFAULT_GROUPS = []
REMOTE_AUTH_DEFAULT_PERMISSIONS = {}


Запускаем установку Netbox

/opt/netbox/upgrade.sh


Запускаем виртуальное окружение и создаём суперпользователя

source /opt/netbox/venv/bin/activate

cd /opt/netbox/netbox
python3 manage.py createsuperuser


Netbox работает как WSGI-приложение за HTTP-сервером. В нашем примере показано, как установить и настроить uWSGI для этой роли, однако доступны и другие WSGI-серверы, которые должны работать аналогично.

Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим pyuwsgi

source /opt/netbox/venv/bin/activate
pip3 install pyuwsgi


После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды

echo 'pyuwsgi' >> /opt/netbox/local_requirements.txt


Копируем дефолтный конфиг, его вполне достаточно для работы

cp /opt/netbox/contrib/uwsgi.ini /opt/netbox/uwsgi.ini


Далее скопируем файлы systemd для управления uWSGI и фоновым рабочим процессом NetBox

cp -v /opt/netbox/contrib/*.service /etc/systemd/system/


Отредактируем файл netbox.service, удалив строку начинающуюся с ExecStart=/opt/netbox/venv/bin/gunicorn, и раскомментируем строку с ExecStart=/opt/netbox/venv/bin/uwsgi

 systemctl daemon-reload


Стартуем сервис и проверяем, что он запустился

systemctl enable --now netbox netbox-rq
systemctl status netbox.service


Для удобства поставим Nginx и добавим конфиг для Netbox

server {
        listen 80;
        server_name netboxold.iwad.ru;

location /static/ {
        alias /opt/netbox/netbox/static/;
    }

location / {
        # proxy_pass http://127.0.0.1:8001;
        # proxy_set_header X-Forwarded-Host $http_host;
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-Proto $scheme;
        # comment the lines above and uncomment the lines below if using uWSGI
        include uwsgi_params;
        uwsgi_pass  127.0.0.1:8001;
        uwsgi_param Host $host;
        uwsgi_param X-Real-IP $remote_addr;
        uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
        uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;

        access_log /var/log/nginx/netbox.access.log;
        error_log  /var/log/nginx/netbox.error.log;
       
        location = /favicon.ico {
            log_not_found off;
            access_log off;
               }
         location ~ /\.ht {
            deny all;
              }
    }
}


Установка завершена, заходим в браузер и смотрим картинки


LDAP аутентификация

Ставим нужные пакеты

apt install -y libldap2-dev libsasl2-dev libssl-dev


Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим django-auth-ldap

source /opt/netbox/venv/bin/activate
pip3 install django-auth-ldap


После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды

echo 'django-auth-ldap' >> /opt/netbox/local_requirements.txt


Включаем ldap-аутентификацию в configuration.py

REMOTE_AUTH_ENABLED = True
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'


Далее создаём файл в той же директории, что и configuration.py(обычно /opt/netbox/netbox/netbox/), с именем ldap_config.py и определяем все необходимые параметры

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, LDAPGroupQuery

# включение логирования
#import logging
#logger = logging.getLogger('django_auth_ldap')
#logger.addHandler(logging.StreamHandler())
#logger.setLevel(logging.DEBUG)

# Server URI
AUTH_LDAP_SERVER_URI = "ldap://ldap.iwad.ru"
 
# Set the DN and password for the NetBox service account.
AUTH_LDAP_BIND_DN = "cn=admin,dc=iwad,dc=ru"
AUTH_LDAP_BIND_PASSWORD = "kQN5UVz3jISa9LLvk2q5"
#AUTH_LDAP_BIND_DN = "cn=netbox,dc=iwad,dc=ru"
#AUTH_LDAP_BIND_PASSWORD = "FepfLVh8xjd9xnN7fZqv"
# Include this setting if you want to ignore certificate errors. This might be needed to accept a self-signed cert.
# Note that this is a NetBox-specific setting which sets:
#     ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
LDAP_IGNORE_CERT_ERRORS = True

# Include this setting if you want to validate the LDAP server certificates against a CA certificate directory on your server
# Note that this is a NetBox-specific setting which sets:
#     ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, LDAP_CA_CERT_DIR)
LDAP_CA_CERT_DIR = '/etc/ssl/certs'

# User configuration
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE,"(uid=%(user)s)")
AUTH_LDAP_USER_DN_TEMPLATE = None
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

AUTH_LDAP_GROUP_SEARCH = LDAPSearch("groups,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
# Ограничение доступа только для группы netbox_users
AUTH_LDAP_REQUIRE_GROUP = "cn=netbox_users,ou=groups,dc=iwad,dc=ru"

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_CACHE_TIMEOUT = 3600


Перезагружаем Netbox и проверяем авторизацию

systemctl restart netbox


Здесь тоже самое на англицком https://netboxlabs.com/docs/netbox/installation/