Вместо вступления
Начал я проходить курсы системных администраторов 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'

Конечно, пароль '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
Открываем вимом конфиг
vi /opt/netbox/netbox/netbox/configuration.py
Нам в первую очередь нужны несколько параметров:
Имя хоста, по которому разрешён доступ к сервису в одинарных кавычках (в данном случае введём '*', но, раз мы будем работать с веб-сервером, то можно ввести 'netbox.example.com' - замените имя сервера на своё имя домена
Авторизацию в Postgresql - имя пользователя, имя БД, пароль, если вы не собираетесь менять порт со стандартного 5432, то порт записывать не нужно. В данном случае мы создали пароль '1111', БД netbox и пользователя netbox. Их и пишем. Настоятельно рекомендую имя пользователя и имя БД изменить на свои
Авторизацию в Redis - тут нам нужен только пароль. Естественно вводим его дважды, потому что для работы сервиса нам нужны две базы данных Redis. Тут мы снова вводим '1111'. Измените пароль на тот, который вы создавали для авторизации в Redis
Ключ доступа к 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 - без, если кому-то так удобнее.
Ну и во-вторых - это личный опыт. Он раз пять протестирован. Полностью работоспособен, но не претендует на истину в последней инстанции. Комментарии и замечания принимаются и приветствуются. Как в личных сообщениях, так и тут.
ky0
С подключением. У нас тут, в 2026, знаете ли, вместо портянок башизмов можно один
docker-compose upсделать :)SmileyK
Фу фу фу , некоторым не нравится docker
ky0
Эмоциональная оценка тут неуместна - у контейнеризации есть объективные преимущества, игнорировать которые - значит записываться в стан замшелых и неэффективных ретроградов.