Netbox е супер инструмент, служещ да ни помогне в управлението и документирането на компютърни мрежи. Първоначално замислена от екипа за мрежово инженерство в DigitalOcean, NetBox е разработена специално, за да отговори на нуждите на мрежовите и инфраструктурни инженери. В процеса на работа не винаги съм се натъквал на добре документирано хардуерно/софтуерно съдържание при клиент, което почти винаги е забавяло процесът на работа. Попадах няколко пъти на въпросният инструмент, но не намирах време да го разгледам. Е оказа се за мойте нужди, направо превъзходен. Първите тестове бяха в контейнер на локалната ми машина, но го исках на виртуална машина. Самият софтуер е написан на python + django, за база от данни се използва postgresql, с много приятен(изчистен) и динамичен уеб интерфейс. Може да се направи интеграция с активна директория.
В публикацията ще опиша, по какъв начин съм го инсталирал във виртуална среда.
Машината е с минимален хардуерен ресурс 2vCPU, 4 GiB ram, 50 HDD. Върху нея ще инсталирам CentOS8 от netinstall. Нищо не обичайно или сложно. Само съм му забранил FirewallD и SELinux.
Следваща стъпка, документацията на Netbox.
Първо се инсталира PostgreSQL. Текущо в хранилището на Centos8 е версия 10.14. След инсталация се инициализира, извършва се корекция в конфигурацията на pgsql за да работи с md5, услугата се стартира, разрешава за автоматично стартиране със зареждане на операционната система и създаване на база от данни, потребител/парола за нуждите на инструмента.
dnf install postgresql postgresql-server
postgresql-setup --initdb
Редакция на конфигурационният файл на postgresql: ident става md5
vim /var/lib/pgsql/data/pg_hba.conf
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Стартиране и добавяне в auto-start:
systemctl enable postgresql
systemctl start postgresql
Създаване на база от данни, потребител и парола към потребителят:
sudo -i -u postgres psql
postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD 'strongpassword';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q
Инсталиране на Redis, добавяне в auto-start и стартиране на самият процес.
systemctl enable redis
systemctl start redis
systemctl status -l redis
#test
redis-cli ping
Инсталиране на системни пакети
dnf install -y gcc python38 python38-devel python38-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config git
pip3 install --upgrade pip
Изтегляне на NetBox. В документацията им използват, като работна директория /opt/netbox, в примера ще го използвам и аз.
mkdir -p /opt/netbox/ && cd /opt/netbox/
git clone -b master https://github.com/netbox-community/netbox.git .
Добавяне на системен профил за netbox. Ще конфигурираме услугите WSGI и HTTP да работят под този акаунт. Също така ще присвоим това потребителско право на собственост върху медийната директория. Това гарантира, че NetBox ще може да запазва качени файлове.
groupadd --system netbox
adduser --system -g netbox netbox
chown --recursive netbox /opt/netbox/netbox/media/
Конфигуриране на Netbox. В директорията /opt/netbox/netbox/netbox/ има примерен конфигурационен файл(configuration.example.py), който ще го копираме в същатата директория но с друго име: configuration.py. С любимото Vim го отварям и извършвам лека корекция, настройка на ALLOWED_HOSTS(списък с валидните имена на хостове и IP адреси, чрез които може да се достигне до този сървър), данни за базата от данни, данни за redis сървъра.
cd /opt/netbox/netbox/netbox/
cp configuration.example.py configuration.py
vim configuration.py
ALLOWED_HOSTS = ['netbox.devops.lab, '172.16.16.10']
DATABASE = {
'NAME': 'netbox', # Името на DB-то, което създадохме
'USER': 'netbox', # потребителско име за db
'PASSWORD': 'strongpassword', # парола
'HOST': 'localhost', # db server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}
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,
}
}
SECRET_KEY=?
Трябва да се генерира secret key, като от netbox са написали инструмент за генерирането му.
python3 ../generate_secret_key.py
Създаване на административен потребил за достъп до Netbox.
source /opt/netbox/venv/bin/activate
(venv) # cd /opt/netbox/netbox
(venv) # python3 manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
Password (again):
Superuser created successfully.
Тест на приложението:
python3 manage.py runserver 0.0.0.0:8000 --insecure
След това се свържете с името или IP на сървъра (както е дефинирано в ALLOWED_HOSTS) на порт 8000; например http://172.16.16.10:8000/ . Трябва да бъдете посрещнати с началната страница на NetBox.
Настройка на systemd
Ще използваме systemd, за да контролираме както gunicorn, така и фоновия работен процес на NetBox. Първо копирайте contrib/netbox.service и contrib/netbox-rq.service в /etc/systemd/system/ директорията и презаредете systemd dameon:
cp contrib/*.service /etc/systemd/system/
systemctl daemon-reload
systemctl start netbox netbox-rq
systemctl enable netbox netbox-rq
До тук добре, но е хубаво вместо да го отварям на порт 8000 да го зареждам директно с името на домейна. За целта ще инсталираме един apache уеб сървър.
yum install httpd -y
systemctl enable httpd
systemctl start httpd
cp /opt/netbox/contrib/apache.conf /etc/httpd/sites-available/netbox.conf
cp /opt/netbox/contrib/apache.conf /etc/httpd/sites-enabled/netbox.conf
yum install mod_proxy_html -y
service httpd restart
После в любим уеб браузър се отваря въпросното IP или ако има DNS запис.
Успех!