NetBox. Установка
Установка NetBox.
Содержание
1 Системные требования
2 Предварительная подготовка
- Будем устанавливать на отдельную операционную систему.
- Rocky Linux. Установка сервера
3 Установка компонент
3.1 Python
- Установим python-3.12:
dnf -y install python3.12 python3.12-devel
- Добавим варианты python в список альтернатив:
alternatives --remove python /usr/bin/python3.9 alternatives --install /usr/bin/python python /usr/bin/python3.12 1
- Выберем необходимую версию python:
alternatives --config python
3.2 Postgres
- Версии, которая идёт в комплекте с дистрибутивом, достаточно.
- Но лучше установить версию поновее.
- Смотрим, какие версии в наличии:
dnf module list postgresql
- Установим postgresql-16:
dnf module -y install postgresql:16
- Проверьте установленную версию:
postgres -V
- Инициализируем базу данных:
postgresql-setup --initdb --unit postgresql
- Проверим, что в
/var/lib/pgsql/data/postgresql.conf
установлен алгоритм шифрования:password_encryption = scram-sha-256
- Замените параметры внутреннего подключения:
sed -i -e 's/^\(host[ ]*all.*\)ident/\1scram-sha-256/' /var/lib/pgsql/data/pg_hba.conf
- Запустим postgres:
systemctl enable --now postgresql
- Подключимся к базе данных:
sudo -u postgres psql
- Создадим базу данных (укажите необходимый пароль):
CREATE DATABASE netbox; CREATE USER netbox WITH PASSWORD '<password>'; ALTER DATABASE netbox OWNER TO netbox; \connect netbox; GRANT CREATE ON SCHEMA public TO netbox; \q
- Проверьте подключение к базе данных:
psql --username netbox --password --host localhost netbox
- После подключения посмотрите параметры соединения:
\conninfo \q
3.3 Redis
Redis — быстрое хранилище данных типа ключ‑значение в памяти.
С 2024 года сменила лицензию на SSPL (закрытую).
Установим redis:
dnf -y install redis
Запустим redis:
systemctl enable --now redis
Проверим, что сервер работает:
redis-cli ping
- В качестве ответа должен быть
PONG
.
- В качестве ответа должен быть
3.4 NetBox
3.4.1 Предварительная установка NetBox
- Установим необходимое программное обеспечение:
dnf -y install gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config git
- Клонируем репозиторий:
mkdir -p /opt/netbox/ cd /opt/netbox git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
- Создадим нового системного пользователя:
groupadd --system netbox adduser --system -m -g netbox netbox chown -R netbox:netbox /opt/netbox chown --recursive netbox /opt/netbox/netbox/media/ chown --recursive netbox /opt/netbox/netbox/reports/ chown --recursive netbox /opt/netbox/netbox/scripts/
3.4.2 Конфигурация Netbox
- Создадим файл конфигурации:
cd /opt/netbox/netbox/netbox/ cp configuration_example.py configuration.py
- Сконфигурим необходимые параметры.
ALLOWED_HOSTS
- Список допустимых имен хостов и IP-адресов, по которым можно связаться с этим сервером (имя вашего сервера).
- Необходимо указать хотя бы одно имя или IP-адрес, например:
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
- Если вы еще не уверены, каким будет доменное имя и/или IP-адрес установки NetBox, вы можете установить подстановочный знак (звездочку), чтобы разрешить все значения хоста:
ALLOWED_HOSTS = ['*']
DATABASE
- Сведения о конфигурации базы данных.
- Нужно задать имя пользователя и пароль, используемые при настройке PostgreSQL.
- Если служба запущена на удалённом хосте, обновите параметры HOST и PORT:
DATABASE = { 'NAME': 'netbox', # Database name 'USER': 'netbox', # PostgreSQL username 'PASSWORD': '<password>', # PostgreSQL password 'HOST': 'localhost', # Database server 'PORT': '', # Database port (leave blank for default) 'CONN_MAX_AGE': 300, # Max database connection age (seconds) }
REDIS
- NetBox требует указания двух отдельных баз данных Redis:
tasks
иcaching
. - Обе они могут предоставляться одной и той же службой Redis, однако каждый из них должен иметь уникальный числовой идентификатор базы данных.
REDIS = { 'tasks': { 'HOST': 'localhost', # Redis server 'PORT': 6379, # Redis port 'PASSWORD': '', # Redis password (optional) 'DATABASE': 0, # Database ID 'SSL': False, # Use SSL (optional) }, 'caching': { 'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '', 'DATABASE': 1, # Unique ID for second database 'SSL': False, } }
- NetBox требует указания двух отдельных баз данных Redis:
SECRET_KEY
- Этому параметру должен быть назначен случайно сгенерированный ключ, используемый в качестве соли для хеширования и связанных с ним криптографических функций.
- Этот ключ должен быть уникальным для данной установки, и его рекомендуется иметь длину не менее 50 символов. Его не следует использовать за пределами локальной системы.
- Простой скрипт Python с именем
generate_secret_key.py
предоставляется в родительском каталоге для помощи в создании подходящего ключа:python3 ../generate_secret_key.py
- В случае высокодоступной установки с несколькими веб-серверами
SECRET_KEY
должен быть одинаковым на всех серверах, чтобы поддерживать постоянное состояние сеанса пользователя.
3.4.3 Развёртывание NetBox
- Скрипт обновления выполнит следующие действия:
- создание виртуального окружения Python;
- установка необходимых пакетов Python;
- запуск миграции схемы базы данных;
- создание локальной документации;
- объединение статических файлов ресурсов на диске.
- Запускаем скрипт установки Netbox:
sudo -u netbox PYTHON=/usr/bin/python3.12 /opt/netbox/upgrade.sh
3.4.4 Суперпользователь
- NetBox не имеет предустановленных учётных записей пользователей.
- Необходимо создать суперпользователя (административную учетную запись), чтобы иметь возможность войти в NetBox.
- Войдём в виртуальную среду Python:
source /opt/netbox/venv/bin/activate
- Создадим учётную запись суперпользователя:
cd /opt/netbox/netbox python3 manage.py createsuperuser
- Указывать адрес электронной почты пользователя не обязательно.
3.4.5 Планирование очистки рабочей среды
- NetBox включает в себя скрипт
housekeeping
, который выполняет повторяющиеся задачи очистки (очистка старых сеансов и записей об изменениях с истекшим сроком действия). - Установим его:
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
3.4.6 Брандмауэр
- Настроим брандмауэр:
firewall-cmd --add-port=8000/tcp --permanent firewall-cmd --reload
3.5 Gunicorn
- NetBox работает как приложение WSGI для HTTP-сервера.
- Можно использовать Gunicorn или uWSGI.
- Скопируем файл конфигурации:
sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
- Установим скрипты для systemd:
cp -v /opt/netbox/contrib/*.service /etc/systemd/system/ systemctl daemon-reload
- Запустим сервисы
netbox
иnetbox-rq
:systemctl enable --now netbox netbox-rq
3.6 HTTP-сервер
3.6.1 Nginx
- Установим nginx.
- Выберем нужный модуль:
dnf module list nginx dnf module switch-to nginx:1.24 dnf -y install nginx
- Скопируем шаблон файла конфигурации:
cp /opt/netbox/contrib/nginx.conf /etc/nginx/conf.d/netbox.conf
- Замените
netbox.example.com
именем домена или IP-адресом сервера.
3.6.2 SSL-сертификат
- Сгенерим самоподписанный SSL-сертификат в качестве заглушки:
mkdir -p /etc/ssl/private /etc/ssl/certs openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt
- Потом заменим его на нормальный.
3.6.3 SELinux
- Настройте политики SELinux:
setsebool httpd_can_network_connect 1 setsebool -P httpd_can_network_connect 1
3.6.4 Брандмауэр
- Настроим брандмауэр:
firewall-cmd --add-servic={http,https} --permanent firewall-cmd --reload
3.6.5 Запуск http-сервера
- Запустим nginx:
systemctl enable --now nginx
3.7 Установка https-сертификата LetsEncrypt
3.7.1 Установка certbot
- Проверьте, что установлен репозитории EPEL:
dnf -y install epel-release
- Установите certbot:
dnf -y install certbot
- Для веб-сервера Apache:
dnf -y install python3-certbot-apache
- Для веб-сервера Nginx:
dnf -y install python3-certbot-nginx
3.7.2 Сервер Nginx
- Плагин
certbot-nginx
предоставляет автоматическую настройку Nginx HTTP Server. - Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Let’s Encrypt.
- Первоначальная настройка виртуальных хостов:
certbot --nginx
- Обновление сертификатов:
certbot renew
- Изменение сертификатов без изменения файлов конфигурации nginx:
certbot --nginx certonly
3.7.3 Конфигурационный файл Nginx
- В файле
/etc/nginx/conf.d/netbox.conf
должны быть следующие записи:ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;