Пост

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

Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.

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

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

1
2
$ 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 не устанавливался из дефолтных репозиториев

1
$ sudo dnf -qy module disable postgresql

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

1
$ sudo dnf -y install postgresql15-server

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

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

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

1
2
3
4
5
6
$ 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

1
2
3
$ sudo systemctl enable postgresql-15
$ sudo systemctl start postgresql-15
$ sudo systemctl status postgresql-15

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

1
2
$ sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'mysuperpass';

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

1
2
3
4
=# CREATE USER netbox WITH ENCRYPTED PASSWORD 'passwdnetbox';
=# CREATE DATABASE netboxdb OWNER netbox;
=# GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netbox;
=# \q

Установка Redis

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

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

1
$ sudo dnf -y install redis

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

1
2
3
4
$ sudo nano /etc/redis/redis.conf
...
# requirepass foobared
requirepass myredissuperpasswd

Запускаем Redis

1
2
3
$ sudo systemctl start redis
$ sudo systemctl enable redis
$ sudo systemctl status redis

Установка Netbox

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

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

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

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

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

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

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

1
2
$ sudo chown -R netbox:netbox /opt/netbox
$ cd /opt/netbox/netbox/netbox

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

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

Генерим ключ

1
2
$ sudo -u netbox python3 ../generate_secret_key.py
#oi*fQIE&jNqFjaJd8l@j^%=*_Kh%P*I8MyjIIVCD^zcd4vHH_

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
$ 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

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

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

1
$ sudo su

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

1
2
# source /opt/netbox/venv/bin/activate
(venv) # /opt/netbox/netbox

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

1
2
3
4
5
6
(venv) # python3 manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: [email protected]
Password: admin
Password (again): admin
Superuser created successfully.

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

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

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

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

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

1
2
3
(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 нашел новые сервисы

1
(venv) # sudo systemctl daemon-reload

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

1
2
3
4
5
(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

1
2
(venv) # deactivate
# exit

Установка Nginx

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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

1
$ sudo dnf -y install nginx

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ 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-сертификата

1
$ sudo mkdir /etc/nginx/ssl/

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

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

Отключаем SELinux

1
2
$ sudo setenforce 0
$ sudo grubby --update-kernel ALL --args selinux=0

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

1
$ sudo systemctl enable --now nginx

Настройка Firewall

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

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

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

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

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

1
2
$ sudo su
# cd ~

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

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

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

1
(venv) # pip install netbox-dns

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

1
2
3
(venv) # nano /opt/netbox/local_requirements.txt
...
netbox-dns

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

1
2
3
4
5
(venv) # nano /opt/netbox/netbox/netbox/configuration.py
...
PLUGINS = [
    "netbox_dns"
]

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

1
2
(venv) # cd /opt/netbox/netbox/
(venv) # python3 manage.py migrate

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

1
2
(venv) # systemctl restart netbox netbox-rq
(venv) # systemctl status netbox netbox-rq

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

1
(venv) # deactivate

UPD 19.12.2023 (Ошибка при установка netbox, связанная с Redis)

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

1
2
3
4
5
6
7
8
9
$ sudo nano /etc/redis/redis.conf
...
# requirepass foobared
# requirepass myredissuperpasswd

$ sudo -u netbox nano configuration.py
...
'PASSWORD': '',
...
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.