Вместо вступления

Начал я проходить курсы системных администраторов Linux. Ну и одним из заданий стала установка Netbox с «нуля». Первым делом - как всегда - открыл официальную документацию Netbox-а. Тут есть подробнейшая инструкция (кстати, довольно информативная), как его установить, смотри.

Но на определённых этапах установки стали появляться совершенно непредвиденные проблемы. То, что в главном конфиге пароль нужно указывать дважды и то, как его вообще устанавливать - это уже мои недосмотры, а вот то, что для первой установки после создания базы /venv/bin нужно инициализировать статический контент - это я нашёл где-то совершенно случайно, и понял что оно работает, что называется, методом "волшебного тыка".

Саму установку делал под «чистым» debian. Такие условия у курсов... Но — на мой скромный взгляд — установка под «Убунтой» полностью идентична, а в Npm и Dnf based системах всё должно работать так же. Никаких специфичных пакетов тут нет.

И - сразу - что такое Netbox в принципе и зачем он нужен?
На мой (довольно субъективный) взгляд - это довольно мощная CRM для задач администрирования сетей уровня "крупное предприятие" или "провайдер". Его, кстати, весьма сильно рекламирует ЦОДД. Данные в неё вносятся вручную и валидируются - тоже, но это - с другой стороны - довольно универсальное решение. Его можно использовать и для небольшого офиса. Тут он будет скорее "записной книжкой", но это удобнее, всё-таки, чем эксель. А для крупных сетей он и предназначен.

Собственно Установка

Какие пакеты понадобятся

Возьмём список рекомендованных пакетов с официального сайта. Собственно, версии пакетов актуальны на 1 января 2026 для netbox 4.4.8

Пакет

Версия

PostgreSQL

14+

Redis

4+

Python

3.10, 3.11 или 3.12

Firewall

Ufw или подобный

HTTP-сервер

Nginx или Apache

NetBox components

... собственно, сам netbox ...

Gunicorn или uWSGI

Опционально

LDAP authentication

Опционально

OpenSSL

Или другой сервис выдачи сертификатов

Как веб-сервер я предпочитаю Nginx, в качестве файерволла берём Ufw. Сам netbox будем подтягивать с гитхаба. Это официальная рекомендация, а - как известно, не стоит отходить от рекомендаций. Сертификаты будем использовать самоподписанные, потому что работа с сертификатами уже выходит за рамки статьи.

Загружаем пакеты

Вопреки традиции, я сразу подгружаю все пакеты, а только потом их настраиваю.

Загружаем Postgres, Redis, Python и Python-библиотеки, Ufw, Nginx


    apt update
    
    apt install wget curl tar\
    redis-server \
    postgresql \
    -y
    
    apt install python3 python3-pip python3-venv python3-dev \
    build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev \
    libssl-dev zlib1g-dev \
    -y
    
    apt install nginx ufw openssl \
    -y


    systemctl start redis
    systemctl start postgresql
    systemctl start nginx

    systemctl enable redis
    systemctl enable postgresql
    systemctl enable nginx

    ufw enable
    ufw allow 443
    ufw allow 80
    ufw allow 8000

8000 порт мы будем использовать только для тестирования, потом его можно всегда закрыть.

Сразу же генерируем сертификаты. Адреса, по которым они будут располагаться любезно предложены авторами Netbox


    openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/netbox.key \
    -out /etc/ssl/certs/netbox.crt

Загружаем сам Netbox

Согласно рекомендациям во-первых, сам netbox будем ложить в /opt, и во-вторых - для использования создадим символьную ссылку на /opt/netbox с /opt/netbox[version]. Это нужно для более удобного обновления - достаточно будет переписать ссылку, а все адреса так и останутся /opt/netbox для сервиса и версии можно будет хранить как одновременно все, так и "на лету" переключать


    version=4.4.8

    wget https://github.com/netbox-community/netbox/archive/refs/tags/v$version.tar.gz
    tar -xzf v$version.tar.gz -C /opt
    rm v$version.tar.gz*
    
    ln -s /opt/netbox-$version/ /opt/netbox

Настраиваем права доступа для Netbox

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

Кстати, если это первая установка, то директории /opt/netbox/netbox/media может и не быть. Я просто создал её, чтобы потом не перенастраивать права доступа. Ну и переменная $version подразумевает работу с sh скриптом. Ниже я приведу сам скрипт. В данном случае она 4.4.8, но на момент чтения, скорее всего, версия будет более поздней

Сразу же подготавливаем конфигурацию. Чуть позже будем её настраивать. Ну и сразу же сгенерируем ключ. Можно его и самому написать, но для чего это делать, если есть уже готовая утилита? Ключ записываем в /opt/netbox/netbox/netbox/key.txt


    cd /opt/netbox/netbox/netbox/
    cp configuration_example.py configuration.py
    ../generate_secret_key.py > key.txt

Настраиваем Redis

Во-первых, проверяем, что сам Redis у нас корректно установился

redis-server --version

После нам нужно настроить аутентификацию по паролю и дать права администратора сервера systemd. Причём важны оба эта параметра. Если не задать пароль и попытаться сделать авторизацию без пароля, то последние версии Netbox-а просто не дадут вам возможности работать, и появится ошибка авторизации при входе уже через веб-интерфейс. А дать права systemd нужно, потому что мы будем настраивать наш Netbox как системный сервис.

Открываем /etc/redis/redis.conf Вимом. Если это первая установка, то requirepass и supervised нужно будет просто добавить.

vi /etc/redis/redis.conf

Для добавления строк нажимаем 'i', после ввода строк - 'esc' -> ':wq'

vi /etc/redis/redis.conf
vi /etc/redis/redis.conf

Конечно, пароль '1111' - только для теста, измените его на максимально сложный пароль

После настройки конфига перезагружаем redis проверяем аутентификацию на сервере

systemctl restart redis

    redis-cli
    
    AUTH 1111
    
    PING
    
    EXIT

Для проверки авторизации нужно зайти на сервер командой redis-cli. Чтобы войти в меню пользователя, в консоли Redis нужно ввести AUTH [ваш только что настроенный пароль]. Если вы настроили его правильно, то вы увидите сообщение "OK". Проверяем соединение командой PING. Если всё настроено правильно, то система ответит "PONG". Ну и выходим из консоли - EXIT

Настройка Postgresql

Традиционно проверяем, что Postgres корректно установился

psql --version

Заходим под пользователя "postgres"

su postgres

И входим в консоль: psql

psql

Создаём пользователя netbox с паролем, базу данных netbox и даём пользователю права на базу данных

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD '1111';
ALTER DATABASE netbox OWNER TO netbox;

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

\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
\l
\q

Выходим из под пользователя postgres

exit
Проверка, что база данных действительно создалась
Проверка, что база данных действительно создалась

После этого проверяем авторизацию под пользователем netbox в Postgres

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

У нас спросят пароль, и, если мы настроили всё правильно, то мы увидим соответствующее сообщение.

Проверяем данные соединения и выходим из консоли

netbox=> \conninfo
netbox=> \q
Проверка авторизации в netbox
Проверка авторизации в netbox

Настраиваем конфиг netbox

Открываем вимом конфиг

vi /opt/netbox/netbox/netbox/configuration.py

Нам в первую очередь нужны несколько параметров:

  1. Имя хоста, по которому разрешён доступ к сервису в одинарных кавычках (в данном случае введём '*', но, раз мы будем работать с веб-сервером, то можно ввести 'netbox.example.com' - замените имя сервера на своё имя домена

  2. Авторизацию в Postgresql - имя пользователя, имя БД, пароль, если вы не собираетесь менять порт со стандартного 5432, то порт записывать не нужно. В данном случае мы создали пароль '1111', БД netbox и пользователя netbox. Их и пишем. Настоятельно рекомендую имя пользователя и имя БД изменить на свои

  3. Авторизацию в Redis - тут нам нужен только пароль. Естественно вводим его дважды, потому что для работы сервиса нам нужны две базы данных Redis. Тут мы снова вводим '1111'. Измените пароль на тот, который вы создавали для авторизации в Redis

  4. Ключ доступа к Netbox. Мы сохранили его в той же директории, что и конфиг код именем 'key.txt'. Тут мы воспользуемся опцией Vim-а и не будем переписывать весь ключ вручную

Для открытия второго файла в меню команд введите ':split key.txt'. После того, как файл откроется нажмите 'v' для выбора текста, выберите стрелками весь ключ, нажмите 'y' для записи в буфер обмена Vim, после клавишами Ctrl+w+w переключитесь на конфиг, в нём выберите строку SECRET_KEY=' ' и вставьте ключ клавишей 'p'.

Выходим из Vim-а через :wq и :q для key.txt

Запускаем сам netbox. Пока в тестовом режиме

Для начала запускаем скрипт, который авторы почему-то назвали upgrade.sh

/opt/netbox/upgrade.sh

Мне предложили перезагрузить сервис через systemctl, потому что у меня он уже настроен.

Запускаем Python с sourse

cd /opt/netbox/venv/bin
source ./activate

Теперь очень важный этап:

  • Во-первых, нам нужно сделать миграцию

  • Во-вторых, создать суперпользователя

  • И - сразу же - запуститьcollectstatic

У нас первая установка, поэтому все три шага необходимы. Очевидно - авторы имели в виду обновление, а не первую установку, но, если не сделать этих шагов, и именно в таком порядке (!!!), то при первом входе мы получим очень серьёзные ошибки.

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

При создании суперпользователя у нас попросят ввести 'имя пользователя', и-мэйл и пароль. У меня всё уже было настроено, но у вас будут соответствующие сообщения

Запускаем наш сервер в тестовом режиме на 8000 порту. Это только тестовый режим без какой-либо конфиденциальности. О чём консоль нам любезно сообщит.

python3 manage.py runserver 0.0.0.0:8000 --insecure

Переходим со внешнего браузера пока по ip нашего сервера, http://192.168.0.190:8000 в моём случае и проверяем соединение

Если не было допущено никаких ошибок, мы должны увидеть следующий экран

После проверки останавливаем сервер через Ctrl+C

Настройка сервиса как системного (настройка systemd)

Первое, что нам нужно - настроить Gunicorn. Для этого конфиг Gunicorn переложим в /opt/netbox/gunicorn.py.
Кстати, в этом же конфиге мы можем изменить используемый по умолчанию порт 8001 в строке bind = '127.0.0.1:8001'

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

Следующий шаг - настройка systemd. Для этого просто из папки /opt/netbox/contrib копируем файлы с расширением .servise в /etc/systemd/system и перезагружаем демона

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

Запускаем сервис, активируем его автозагрузку и проверяем корректность его работы


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

Настройка веб-сервера

Для данной установки я использую Nginx. Авторы дали примеры как конфига Nginx-а, так и Apache.

Заберем конфиг из папки /opt/netbox/contrib

Сам сервер у нас уже установлен, поэтому просто настраиваем его:

cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox.conf
   rm /etc/nginx/sites-enabled/default
   ln -s /etc/nginx/sites-available/netbox.conf /etc/nginx/sites-enabled/netbox.conf

Сертификаты мы уже добавили по рекомендованному адресу. Нам нужна только одна строка 'server_name', для примера оставим netbox.example.com, но вам нужно будет изменить её на своё имя. Помним, что, если мы пока не настраивали DNS, то нам нужно будет переписать /etc/hosts на той машине, с которой мы будем вызывать наш сервер

Проверяем, правильно ли мы настроили nginx и перезагружаем его

    
    nginx -t
    systemctl restart nginx

Переходим во внешнем браузере по адресу https://example.netbox.com

Если мы настроили всё правильно, то нам будет показано то же самое окно, что и при тесте сервиса. Единственное - сертификат у нас самоподписанный, и браузер нам об это сообщит. Это у нас пока тест - соглашаемся и открываем портал

Вместо заключения

Во-первых, я сделал скрипты установки для тех, кто разбирается, как устанавливать сервисы, но им нужны удобные готовые скрипты. Найти их можно тут.

Тут есть как сжатое описание установки, так и два скрипта: Install_packages.sh для установки всех пакетов и зависимостей и Run_netbox_as_systemd.sh для настройки netbox как системного сервиса. Есть примеры конфигурации для 443 порта с SSL и 80 - без, если кому-то так удобнее.

Ну и во-вторых - это личный опыт. Он раз пять протестирован. Полностью работоспособен, но не претендует на истину в последней инстанции. Комментарии и замечания принимаются и приветствуются. Как в личных сообщениях, так и тут.

Комментарии (18)


  1. ky0
    04.01.2026 16:02

    С подключением. У нас тут, в 2026, знаете ли, вместо портянок башизмов можно один docker-compose up сделать :)


    1. SmileyK
      04.01.2026 16:02

      Фу фу фу , некоторым не нравится docker


      1. ky0
        04.01.2026 16:02

        Эмоциональная оценка тут неуместна - у контейнеризации есть объективные преимущества, игнорировать которые - значит записываться в стан замшелых и неэффективных ретроградов.