Установка и запуск Netbox на Linux Ubuntu
Опубликовано:
Используемые термины: NetBox, PostgreSQL, Redis, Nginx, Python.
NetBox используется сетевыми инженерами и системными администраторами как единый источник правды о состоянии сети. В этой инструкции установим NetBox на Ubuntu вместе с PostgreSQL, Redis и nginx.
Требования к системе
Установка и настройка PostgreSQL
Запуск Redis
Развертывание Netbox
Установка зависимостей
Загрузка дистрибутива
Настройка конфигурационного файла
Инициализация
Создание суперпользователя
Автоматическая очистка
Настройка автозапуска
Обратное проксирование с Nginx
Системные требования
На момент обновления инструкции для запуска Netbox необходимо было установить следующие компоненты:
- Redis.
- PostgreSQL.
- HTTP server.
- NetBox components.
- Gunicorn или uWSGI.
А также Python версии 3.12 / 3.13 / 3.14.
Актуальный список требований можно посмотреть на официальном сайте NetBox, в документации (раздел Installation).
PostgreSQL
Смотрим, какая версия PostgreSQL будет установлена из встроенного репозитория:
apt search --names-only '^postgresql$'
Если версия соответствует требованиям, устанавливаем:
apt install postgresql postgresql-contrib
Если у нас старая система и версия PostgreSQL не подходит, смотрите подробный разбор установки и первичной настройки PostgreSQL в отдельной инструкции.
Убедимся, что в системе есть русская локаль — она понадобится при создании и корректной работы базы данных NetBox:
locale-gen ru_RU.UTF-8
Перезапускаем PostgreSQL, чтобы локаль подхватилась:
systemctl restart postgresql
Заходим в psql от аккаунта postgres:
sudo -iu postgres psql
Создаём пользователя, базу данных netbox и выдаём права на схему:
> CREATE USER netbox WITH PASSWORD 'netbox_123';
> CREATE DATABASE netbox WITH OWNER netbox ENCODING 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TEMPLATE = 'template0';
> GRANT CREATE ON SCHEMA public TO netbox;
> quit
* netbox_123 — в реальном окружении замените на свой.
База данных готова.
Redis
Устанавливаем Redis:
apt install redis-server
Открываем конфигурационный файл:
vi /etc/redis/redis.conf
Меняем значение для директивы supervised:
supervised systemd
* данная настройка позволит инициализировать запуск Redis как службы. В соответствии с официальной документацией, это позволит нам получить больше контроля над базой данных.
Перезапускаем redis-server:
systemctl restart redis-server
Проверяем, что служба отвечает:
redis-cli ping
PONG
Наш сервер готов к работе.
Netbox
Для удобства, разобьем процесс на стадии.
Установка зависимостей
Проверяем, какие версии Python доступны в репозитории:
apt search --names-only '^python[.0-9]{3,4}$'
Выбираем нужную версию и сохраняем в переменную:
PY_VER=3.12
* переменная PY_VER будет подставляться в команды ниже — укажите версию, которую нашли на предыдущем шаге.
Если в нашей системе нет подходящей под требования версии Python, выполняем установку по инструкции Установка и использование Python на Ubuntu.
Устанавливаем Python и модуль для виртуального окружения:
apt install python${PY_VER}-venv python${PY_VER}-dev
Ставим системные зависимости, необходимые для сборки Python-пакетов NetBox:
apt install build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev curl
Зависимости установлены.
Скачивание NetBox
Актуальный релиз можно посмотреть на странице проекта на GitHub.
Для удобства, определяем номер последней версии с помощью команды и сохраняем ее в переменную:
NB_VER=$(curl -s https://api.github.com/repos/netbox-community/netbox/releases/latest | grep 'tag_name' | cut -d\" -f4)
* NB_VER подставится в команды скачивания и распаковки архива ниже.
** при необходимости, можно не выполнять команду curl, а подставить свое значение версии.
Скачиваем архив с исходниками NetBox:
curl -sLO https://github.com/netbox-community/netbox/archive/refs/tags/${NB_VER}.tar.gz
Создаём каталог для установки:
mkdir -p /opt/netbox
Распаковываем архив в него:
tar -xzf ${NB_VER}.tar.gz -C /opt/netbox --strip-components 1
Заводим системного пользователя, от имени которого будет работать NetBox:
useradd netbox -r
Отдаём каталог во владение этому пользователю:
chown -R netbox:netbox /opt/netbox
NetBox скачан и распакован.
Настройка конфигурационного файла
Переходим в каталог с конфигурацией:
cd /opt/netbox/netbox/netbox
Копируем пример конфигурационного файла:
cp configuration_example.py configuration.py
Генерируем секретный ключ приложения:
python3 ../generate_secret_key.py
Мы получим что-то на подобие:
v0w(mr8B0IC$RK*sn^hYnQHjItfDA-TnzI0#AaTE1ji9KbzoIO
Фиксируем его. После открываем конфигурационный файл:
vi configuration.py
Прописываем разрешённые хосты, параметры подключения к базе данных и полученный секретный ключ:
ALLOWED_HOSTS = ['netbox.dmosk.ru', '192.168.1.10', '127.0.0.1']
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'netbox',
'USER': 'netbox',
'PASSWORD': 'netbox_123',
'HOST': 'localhost',
'PORT': '',
'CONN_MAX_AGE': 300,
}
}
...
SECRET_KEY = 'v0w(mr8B0IC$RK*sn^hYnQHjItfDA-TnzI0#AaTE1ji9KbzoIO'
* где заменяем значения для:
- ALLOWED_HOSTS — перечисляем узлы, которые будут идентифицировать сервере: доменное имя для входа на netbox, IP-адрес сервера, локальный адрес.
- PASSWORD — наш пароль для подключения к базе данных.
- SECRET_KEY — серет, который мы сформировали выше.
Конфигурация готова.
Инициализация приложения и миграция базы
Запускаем скрипт upgrade.sh — он создаст виртуальное окружение, установит python-зависимости и выполнит миграции базы данных:
PYTHON=/usr/bin/python${PY_VER} /opt/netbox/upgrade.sh
* процесс может занять несколько минут — скрипт скачивает и собирает все python-пакеты.
Зависимости установлены, база данных проинициализирована.
Создание суперпользователя
Активируем виртуальное окружение:
source /opt/netbox/venv/bin/activate
Переходим в каталог с manage.py:
cd /opt/netbox/netbox
Создаём учётную запись администратора:
python3 manage.py createsuperuser
Отвечаем на вопросы мастера, например:
Username: admin
Email address: admin@dmosk.ru
Password:
Password (again):
Superuser created successfully.
Выходим из виртуального окружения:
deactivate
Администратор создан.
Автоматическая очистка
NetBox поставляется со скриптом ежедневной очистки — он удаляет устаревшие сессии, истёкшие изменения и прочий накопленный мусор. Подключаем его через cron простой командой:
ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
Установка завершена. Можно запускать и пользоваться.
Настройка запуска Netbox
Рассмотрим процесс запуска, также, по шагам.
Проверка запуска
Прежде чем настраивать systemd и nginx, проверим, что приложение стартует. Запускаем тестовый сервер:
sudo -u netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py runserver 0.0.0.0:8000 --insecure
В отдельном терминале проверяем, что страница логина отдаётся:
curl http://127.0.0.1:8000/login/
* runserver не предназначен для продакшена — используем его только для проверки, после теста останавливаем сочетанием Ctrl+C.
Настройка службы для автозапуска (systemd)
Копируем конфигурацию Gunicorn:
cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
Копируем unit-файлы systemd для NetBox и очереди фоновых задач:
cp /opt/netbox/contrib/*.service /etc/systemd/system/
Включаем автозапуск и запускаем оба сервиса:
systemctl enable --now netbox netbox-rq
Проверяем статус:
systemctl status netbox netbox-rq
Убеждаемся, что Gunicorn отвечает на своём порту:
curl http://127.0.0.1:8001/login/
* порт 8001 задан в скопированном gunicorn.py — при необходимости меняем его там же.
NetBox запущен как служба.
Настройка Nginx
Для использования красивого адреса, а также настройки https, удобнее всего использовать обратный прокси. В качестве такого revers-proxy будем использовать nginx.
Устанавливаем его:
apt install nginx
Копируем готовый конфиг NetBox для nginx:
cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-enabled/netbox.conf
Удаляем дефолтный конфиг, чтобы он не конфликтовал:
rm -f /etc/nginx/sites-enabled/default
Создаём SSL-сертификат:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=netbox.dmosk.ru" -addext "subjectAltName=DNS:netbox.dmosk.ru,IP:192.168.1.10,IP:127.0.0.1"
* сертификат самоподписанный — подходит для теста. Для продакшена используем сертификат от доверенного удостоверяющего центра, например, бесплатного от Let's Encrypt.
Проверяем конфигурацию и перезапускаем nginx:
nginx -t && nginx -s reload
NetBox полностью готов к работе.
Открываем в браузер и переходим по адресу https://<доменное имя>. Заходим под учётной записью admin, которую создали на шаге создания суперпользователя. Дальше в интерфейсе NetBox добавляем сайты, стойки и оборудование, ведём IP-адресацию и строим карту сети — но это уже тема для отдельной инструкции по работе с NetBox.