Найти в Дзене
Linux | Network | DevOps

Установка NetBox в Rocky Linux 9

Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов. Добавляем репозиторий PostgreSQL $ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm $ sudo dnf -y update Отключаем модуль postgresql, что бы PostgreSQL не устанавливался из дефолтных репозиториев $ sudo dnf -qy module disable postgresql Устанавливаем PostgreSQL 15 $ sudo dnf -y install postgresql15-server Инициализируем БД $ sudo /usr/pgsql-15/bin/postgresql-15-setup initdb Правим конфиг pg_hba.conf $ sudo nano /var/lib/pgsql/15/data/pg_hba.conf ... host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 ... Запускаем PostgreSQL $ sudo systemctl enable postgresql-15 $ sudo sy
Оглавление
Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.

Установка PostgreSQL 15 из репозитория

Добавляем репозиторий PostgreSQL

$ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

$ sudo dnf -y update

Отключаем модуль postgresql, что бы PostgreSQL не устанавливался из дефолтных репозиториев

$ sudo dnf -qy module disable postgresql

Устанавливаем PostgreSQL 15

$ sudo dnf -y install postgresql15-server

Инициализируем БД

$ sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

Правим конфиг pg_hba.conf

$ sudo nano /var/lib/pgsql/15/data/pg_hba.conf

...

host all all 127.0.0.1/32 md5

# IPv6 local connections:

host all all ::1/128 md5

...

Запускаем PostgreSQL

$ sudo systemctl enable postgresql-15

$ sudo systemctl start postgresql-15

$ sudo systemctl status postgresql-15

Устанавливаем пароль пользователя postgres

$ sudo -u postgres psql

ALTER USER postgres WITH PASSWORD 'mysuperpass';

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

=# CREATE USER netbox WITH ENCRYPTED PASSWORD 'passwdnetbox';

=# CREATE DATABASE netboxdb OWNER netbox;

=# GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netbox;

=# \q

Установка Redis

Redis - быстрое хранилище данных типа «ключ‑значение» в памяти, с открытым исходным кодом

Устанавливаем Redis из дефолтного репозитория

$ sudo dnf -y install redis

Задаем пароль

$ sudo nano /etc/redis/redis.conf

...

# requirepass foobared

requirepass myredissuperpasswd

Запускаем Redis

$ sudo systemctl start redis

$ sudo systemctl enable redis

$ sudo systemctl status redis

Установка Netbox

Устанавливаем необходимые пакеты

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

Создаем пользователя netbox

$ sudo useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox

Создаем каталог, переходим в него, клонируем репозиторий

$ sudo mkdir -p /opt/netbox

$ cd /opt/netbox

$ sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .

Меняем владельца каталога

$ sudo chown -R netbox:netbox /opt/netbox

$ cd /opt/netbox/netbox/netbox

Копируем и переименовываем конфиг

$ sudo -u netbox cp configuration_example.py configuration.py

Генерируем ключ

$ sudo -u netbox python3 ../generate_secret_key.py

#oi*fQIE&jNqFjaJd8l@j^%=*_Kh%P*I8MyjIIVCD^zcd4vHH_

Правим конфиг configuration.py

$ sudo -u netbox nano configuration.py

...

ALLOWED_HOSTS = ['*']

DATABASE = {

'NAME': 'netboxdb', # Database name

'USER': 'netbox', # PostgreSQL username

'PASSWORD': 'passwdnetbox', # 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,

# Comment out `HOST` and `PORT` lines and uncomment the following if using Redis Sentinel

# 'SENTINELS': [('mysentinel.redis.example.com', 6379)],

# 'SENTINEL_SERVICE': 'netbox',

'USERNAME': '',

'PASSWORD': 'myredissuperpasswd',

'DATABASE': 0,

'SSL': False,

# Set this to True to skip TLS certificate verification

# This can expose the connection to attacks, be careful

# 'INSECURE_SKIP_TLS_VERIFY': False,

},

'caching': {

'HOST': 'localhost',

'PORT': 6379,

# Comment out `HOST` and `PORT` lines and uncomment the following if using Redis Sentinel

# 'SENTINELS': [('mysentinel.redis.example.com', 6379)],

# 'SENTINEL_SERVICE': 'netbox',

'USERNAME': '',

'PASSWORD': 'myredissuperpasswd',

'DATABASE': 1,

'SSL': False,

# Set this to True to skip TLS certificate verification

# This can expose the connection to attacks, be careful

# 'INSECURE_SKIP_TLS_VERIFY': False,

}

}

SECRET_KEY = '#oi*fQIE&jNqFjaJd8l@j^%=*_Kh%P*I8MyjIIVCD^zcd4vHH_'

...

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

$ sudo -u netbox /opt/netbox/upgrade.sh

Переключаемся на пользователя root

$ sudo su

Активируем виртуальную среду Python и переходим в каталог netbox

# source /opt/netbox/venv/bin/activate

(venv) # /opt/netbox/netbox

Создаем админа Nebox

(venv) # python3 manage.py createsuperuser

Username (leave blank to use 'root'): admin

Email address: admin@itdraft.ru

Password: admin

Password (again): admin

Superuser created successfully.

Создаем сим линк скрипта netbox-housekeeping.sh в ежедневные задания cron. Сценарий netbox-housekeeping.sh используется для очистки среды Netbox, он удаляет просроченные задачи, старые сеансы или записи с истекшим сроком действия.

(venv) # sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping

Копируем конфиг gunicorn.py

(venv) # sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

Копируем файлы Systemd Unit

(venv) # sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/

'/opt/netbox/contrib/netbox-rq.service' -> '/etc/systemd/system/netbox-rq.service'

'/opt/netbox/contrib/netbox.service' -> '/etc/systemd/system/netbox.service'

Выполняем daemon-reload, что бы Systemd нашел новые сервисы

(venv) # sudo systemctl daemon-reload

Запускаем сервисы и смотрим статус

(venv) # sudo systemctl start netbox netbox-rq

(venv) # sudo systemctl enable netbox netbox-rq

(venv) # sudo systemctl status netbox

(venv) # sudo systemctl status netbox-rq

Выходим из виртуальной среды Python и переключаемся с пользователя root

(venv) # deactivate

# exit

Установка Nginx

Добавляем репозиторий Nginx

$ sudo nano /etc/yum.repos.d/nginx.repo

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

[nginx-mainline]

name=nginx mainline repo

baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/

gpgcheck=1

enabled=0

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

Устанавливаем Nginx

$ sudo dnf -y install nginx

Отключаем дефолтный конфиг

$ sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disable

Копируем и редактируем конфиг из дистрибутива Netbox

$ sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/conf.d/netbox.conf

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

server {

listen [::]:443 ssl ipv6only=off;

# CHANGE THIS TO YOUR SERVER'S NAME

server_name _;

ssl_certificate /etc/nginx/ssl/server.crt;

ssl_certificate_key /etc/nginx/ssl/server.key;

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;

}

}

server {

# Redirect HTTP traffic to HTTPS

listen [::]:80 ipv6only=off;

server_name _;

return 301 https://$host$request_uri;

}

Создаем каталог для SSL-сертификата

$ sudo mkdir /etc/nginx/ssl/

Копируем наш сертификат

$ sudo mv /home/user/server.* /etc/nginx/ssl/

Отключаем SELinux

$ sudo setenforce 0

$ sudo grubby --update-kernel ALL --args selinux=0

Запускаем Nginx, и добавляем сервис в автозагрузку

$ sudo systemctl enable --now nginx

Настройка Firewall

Открываем http и https порты

$ sudo firewall-cmd --add-servic={http,https} --permanent

$ sudo firewall-cmd --reload

Установка плагина для NetBox

Для примера установим плагин netbox-dns

Переключаемся на пользователя root

$ sudo su

# cd ~

Активируем виртуальную среду Python

# source /opt/netbox/venv/bin/activate

Устанавливаем плагин из репозитория Python

(venv) # pip install netbox-dns

Добавляем строку в файл local_requirements.txt

(venv) # nano /opt/netbox/local_requirements.txt

...

netbox-dns

Редактируем конфиг configuration.py, добавляем в него строку

(venv) # nano /opt/netbox/netbox/netbox/configuration.py

...

PLUGINS = [

"netbox_dns"

]

Запускаем процесс миграции (добавляются необходимые таблицы, устанавливаются недостающие модули Python)

(venv) # cd /opt/netbox/netbox/

(venv) # python3 manage.py migrate

Перезапускаем сервисы, смотрим их статус

(venv) # systemctl restart netbox netbox-rq

(venv) # systemctl status netbox netbox-rq

Выходим из виртуальной среды Python

(venv) # deactivate

Ошибка при установкt netbox, связанная с Redis

Если при установке Netbox столкнулся с ошибкой, связанной с паролем в Redis. Убираем его, т.к. по дефолту коннект к Redis разрешен только локально

$ sudo nano /etc/redis/redis.conf

...

# requirepass foobared

# requirepass myredissuperpasswd

$ sudo -u netbox nano configuration.py

...

'PASSWORD': '',

...

Обсудить эту статью можно в Телеграм канале: https://t.me/linautonet