Инструкция честно спёрта вот отсюда. Лично у меня всё заработало с первого раза, но пользоваться подобными вещами всё равно следует вдумчиво.

NetBox – это бесплатное решение с открытым исходным кодом для управления и документирования сети web-интерфейс. Написано всё на Django и использует PostgreSQL в качестве базы данных. Умеет следующее:

  • IPAM – управление IP-адресами
  • Управление VLAN
  • Учитывает высоту стоек
  • Управление VRF
  • Управление подключениями – интерфейсы, консоли, питание
  • Управление подключениями к провайдерам
  • Единая база данных
  • DCIM (Data Center Infrastructure Management) – управление инфраструктурой дата-центров

1. Обновляем систему и ставим зависимости

В этом руководстве мы установим и сконфигурируем NetBox на CentOS 8. Нам понадобятся:

  • CentOS 8
  • Пользователь с правами администратора
  • Python 3.8 и выше
  • PostgreSQL 10
  • Redis 4.0

Обновим нашу систему

sudo yum update -y

Установим репозиторий EPEL, необходимый для установки зависимостей

sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Устанавливаем зависимости

sudo dnf install -y gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config git nano

Переводим SELinux в режим разрешения, поскольку нам понадобятся TCP-порты.

sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
cat /etc/selinux/config | grep SELINUX=

2. Ставим Python и Pip

В этом руководстве мы установим Python 3.9, поскольку для текущей версии NetBox требуется Python 3.7 и выше. Python 3.9 доступен в стандартных репозиториях и может быть установлен командой:

sudo dnf install python3.9

Дерево зависимостей

....                  
Transaction Summary
================================================================================
Install  6 Packages

Total download size: 13 M
Installed size: 45 M
Is this ok [y/N]: y

Определяем путь до Python.

$ whereis python3.9
python3: /usr/bin/python3.9 /usr/bin/python3.6 /usr/bin/python3 /usr/bin/python3.6m /usr/lib/python3.9 /usr/lib/python3.6 /usr/lib64/python3.9 /usr/lib64/python3.6 /usr/include/python3.9 /usr/include/python3.6m /usr/share/man/man1/python3.1.gz

Создадим символическую ссылку на /usr/bin/python

sudo ln -fs /usr/bin/python3.9 /usr/bin/python3
sudo ln -fs /usr/bin/pip3.9 /usr/bin/pip3

Если она уже существует, то предварительно нужно будет удалить её:

sudo rm -rf /usr/bin/python3
sudo rm -rf /usr/bin/pip3

Проверяем версию

$ python3 --version
Python 3.9.16

3. Устанавливаем и настраиваем базу PostgreSQL

Поскольку NetBox использует в качестве базы данных PostgreSQL, потребуется её установить. Для начала проверим последние доступные версии.

$ sudo dnf module list postgresql
Rocky Linux 8 - AppStream
Name          Stream    Profiles              Summary
postgresql    9.6       client, server [d]    PostgreSQL server and client module
postgresql    10 [d]    client, server [d]    PostgreSQL server and client module
postgresql    12        client, server [d]    PostgreSQL server and client module
postgresql    13        client, server [d]    PostgreSQL server and client module
postgresql    15        client, server [d]    PostgreSQL server and client module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Сбросим дефолтный модуль PostgreSQL

sudo dnf module reset -y postgresql

Мы будем ставить 15 версию, выберем её:

$ sudo dnf module enable postgresql:15
......
Dependencies resolved.
================================================================================
 Package           Architecture     Version             Repository         Size
================================================================================
Enabling module streams:
 postgresql                         15                                        

Transaction Summary
================================================================================

Is this ok [y/N]: y

Продолжим и установим выбранную версию PostgreSQL:

sudo dnf install postgresql-server -y

Проинициализируем PostgreSQL:

sudo postgresql-setup --initdb

После успешного завершения установки запустим PostgreSQL и добавим службу в автозапуск:

sudo systemctl start postgresql && sudo systemctl enable postgresql

Пора создать базу для NetBox:

sudo -u postgres psql

Находясь в консоли PostgreSQL, создадим базу, как показано:

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'Str0ngDBPassw0rd';
ALTER DATABASE netbox OWNER TO netbox;
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
\q

Включим вход в PostgreSQL по паролю:

sudo sed -i -e 's/ident/md5/' /var/lib/pgsql/data/pg_hba.conf
sudo systemctl restart postgresql

Проверим, получится ли войти в базу, созданную с использованием пароля:

$ psql -U netbox -h localhost -W
Password: <Input-Password>
psql (15.3)
Type "help" for help.

netbox=> \q

Или одной строкой:

psql --username netbox --password --host localhost netbox

4. Устанавливаем и настраиваем Redis

Требуется Redis версии 4.0 и выше, установим:

sudo yum install -y redis

Запустим и добавим в автозапуск:

sudo systemctl start redis && sudo systemctl enable redis

Проверим установленную версию:

$ redis-server -v
Redis server v=5.0.3 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=7fa21edfc0646001

Проверим статус сервера:

$ redis-cli ping
PONG

5. Устанавливаем и настраиваем Netbox

Итак, помаленьку мы дошли до главной части руководства, в которой понадобится склонировать NetBox из git’а и настроить его в CentOS 8.

Сперва идем в каталог /opt/ directory и клонируем NetBox:

sudo mkdir -p /opt/netbox/ && cd /opt/netbox/
sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .

Создадим пользователя Netbox:

sudo groupadd --system netbox
sudo adduser --system -g netbox netbox
sudo chown --recursive netbox /opt/netbox/netbox/media/

Далее, сделаем файл конфигурации NetBox:

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

Откроем его редактором:

sudo nano configuration.py

И внесем следующие правки:

# Example: ALLOWED_HOSTS = ['netbox.example.com', 'netbox.internal.local']
ALLOWED_HOSTS = ['*']

# PostgreSQL database configuration.
DATABASE = {
    'NAME': 'netbox',                           # Database name you created
    'USER': 'netbox',                           # PostgreSQL username you created
    'PASSWORD': 'Str0ngDBPassw0rd',               # PostgreSQL password you set
    'HOST': 'localhost',                        # Database server
    'PORT': '',                                 # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,                        # Max database connection age
}

Поскольку Netbox требует две базы для задач и кэша, мы продолжим и поправим базы 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,
    }
}

Генерируем секретный ключ для Django

Сгенерируем секретный ключ для Django:

python3 ../generate_secret_key.py

Пример вывода:

Tzvw(9w1tc2^lRzwLc@cDgdrX^3AwDDWXBgMM7OU$vR7LLAh#V

С этим ключом возвращаемся в configuration.py и вставляем в соответствующий раздел:

$ sudo nano /opt/netbox/netbox/netbox/configuration.py
# https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-SECRET_KEY
SECRET_KEY = 'Tzvw(9w1tc2^lRzwLc@cDgdrX^3AwDDWXBgMM7OU$vR7LLAh#V'

Запустим скрипт обновления

Скрипт обновления автоматически выполнит следующее:

  • Создаст окружение Python и установит все пакеты, которые ему понадобятся
  • Запустит миграцию схемы базы данных
  • Создаст локальную документацию (для автономного использования)
  • Выполнит слияние статичных файлов на диске

Для этого используем команду:

sudo /opt/netbox/upgrade.sh

Пример вывода:

Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying extras.0001_squashed... OK
  Applying tenancy.0001_squashed_0012... OK
  Applying tenancy.0002_tenant_ordering... OK
  Applying dcim.0001_squashed... OK
  Applying dcim.0002_squashed... OK
  Applying ipam.0001_squashed... OK
  Applying virtualization.0001_squashed_0022... OK
  Applying extras.0002_squashed_0059... OK
  Applying extras.0060_customlink_button_class... OK
...
Collecting static files (python3 netbox/manage.py collectstatic --no-input)...

478 static files copied to '/opt/netbox/netbox/static'.
Removing stale content types (python3 netbox/manage.py remove_stale_contenttypes --no-input)...
Removing expired user sessions (python3 netbox/manage.py clearsessions)...
Upgrade complete! Don't forget to restart the NetBox services:
  > sudo systemctl restart netbox netbox-rq

Создаем учетную запись пользователя в NetBox

Далее потребуется создать учетную запись суперпользователя, поскольку из коробки NetBox пользователей не содержит. Выполним команды:

source /opt/netbox/venv/bin/activate
cd /opt/netbox/netbox
python3 manage.py createsuperuser

Отвечаем на вопросы:

Username (leave blank to use 'thor'): admin
Email address: admin@local.net
Password: 
Password (again): 
Superuser created successfully.

Продолжим и запланируем службы уборки мусора

sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping

Проверяем собранную конструкцию

Пора проверить работу приложения. Но сперва нужно не забыть открыть 8000 порт на файрволе

sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

Вот теперь можно проверять работу Netbox

$ python3 manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...

System check identified no issues (0 silenced).
May 05, 2022 - 15:52:46
Django version 4.0.4, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Сейчас можно получить доступ к NetBox используя адрес вида http://IP_Address:8000. Можно также попробовать войти в систему, используя созданную учетную запись суперпользователя.

Остановим сервер, используя CTL+C и продолжим.

Устанавливаем и настраиваем модуль Gunicorn

Netbox по умолчанию поставляется с конфигурацией Gunicorn, которую можно скопировать в каталог Netbox:

sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

Возможно, захочется отредактировать этот файл и настроить привязки IP-адреса и порта

sudo nano /opt/netbox/gunicorn.py

Добавим в файл следующие строки:

bind = '127.0.0.1:8001'

workers = 5

threads = 3

timeout = 120

# The maximum number of requests a worker can handle before being respawned
max_requests = 5000
max_requests_jitter = 500

Создаем сервисный файл для systemd

Чтобы можно было рулить Netbox’ом так же, как и другими системными службами, понадобится системный файл:

sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload

Запускаем службы Netbox и добавляем их в автозапуск:

sudo systemctl start netbox netbox-rq
sudo systemctl enable netbox netbox-rq

Проверим, что служба стартовала:

$ systemctl status netbox.service
● netbox.service - NetBox WSGI Service
   Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-05-05 12:07:27 EDT; 11s ago
     Docs: https://docs.netbox.dev/
 Main PID: 12914 (gunicorn)
    Tasks: 6 (limit: 23505)
   Memory: 384.4M
   CGroup: /system.slice/netbox.service
           ├─12914 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c>
           ├─12916 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c>
           ├─12917 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c>
           ├─12918 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c>
           ├─12919 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c>
           └─12920 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --c

Службы должна слушать порт 8001:

$ ss -tunelp | grep 8001
tcp   LISTEN 0      128        127.0.0.1:8001      0.0.0.0:*    uid:993 ino:24304646 sk:1e <->

6. Устанавливаем и настраиваем Nginx для Netbox

В этом руководстве приведена конфигурация с использованием веб-сервера Nginx. Установим его на CentOS 8 следующей командой:

sudo yum -y install nginx

Создадим файл виртуального хоста для нашей web-страницы

sudo nano /etc/nginx/conf.d/netbox.conf

Добавим в файл следующие строки, на забыв заменить netbox.example.com актуальным FQDN или IP-адресом:

server {
    listen 80;
    server_name netbox.example.com;
    client_max_body_size 25m;

    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;
    }
}

Если сервер должен отвечать по нескольким адресам, просто разделяем их пробелами. Проверим созданный файл на предмет синтаксических ошибок:

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Запустим Nginx и добавим его службы в автозапуск:

sudo systemctl restart nginx
sudo systemctl enable nginx

Откроем 8001 порт в SELinux:

sudo semanage port -a -t dns_port_t -p tcp 8001
sudo setsebool -P httpd_can_network_connect 1

Если вы используете firewalld, также откроем порты и на файрволе:

sudo firewall-cmd --permanent --add-port={80,443}/tcp
sudo firewall-cmd --reload

7. Доступ к Netbox через Web-интерфейс

Теперь, когда всё настроено, как требуется, можно получить доступ к web-интерфейсу Netbox по адресу http://Hostname или http://IP_Address. Откроется стартовая страница. Для внесения данных необходимо авторизоваться. Для этого нужно нажать кнопку “Log in”, расположенную в правом верхнем углу и введите данные суперпользователя из соответствующего шага. Теперь можно переходить к заполнению базы.

Добавить комментарий