Инструкция честно спёрта вот отсюда. Лично у меня всё заработало с первого раза, но пользоваться подобными вещами всё равно следует вдумчиво.
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”, расположенную в правом верхнем углу и введите данные суперпользователя из соответствующего шага. Теперь можно переходить к заполнению базы.