===== Netbox =====
Netbox is a service to document server-infrastrucure
==== Installation ====
- Install Postgresql
# apt install postgresql libpq-dev
- Create database and user to access it
$ sudo -u posgres psql
psql (9.4.5)
Type "help" for help.
postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD '';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q
- Install requirements for netbox
# apt install -y python3 python3-pip python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libs
- download and extract the latest release
$ wget https://github.com/digitalocean/netbox/archive/v2.5.10.tar.gz
$ sudo tar -xzf v2.5.10.tar.gz -C /opt
- create a symlink to the new folder
# ln -s /opt/netbox-2.5.10/ /opt/netbox
- Install python dependencies
$ cd /opt/netbox/
$ sudo pip3 install -r requirements.txt
- copy the example configuration file
# cp netbox/netbox/configuration.example.py netbox/netbox/configuration.py
- generate a secret key
# cd netbox
# python3 generate_secret_key.py
- insert the key, aswell as your hostname, and posgres account into ''/opt/netbox/netbox/netbox/configuration.py''
ALLOWED_HOSTS = ['netbox.cm.in.tum.de', '172.24.25.68']
DATABASE = {
'NAME': 'netbox', # Database name
'USER': 'netbox', # PostgreSQL username
'PASSWORD': '', # PostgreSQL password
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
}
SECRET_KEY = ''
- Initialize the database
# cd /opt/netbox/netbox
# python3 manage.py migrate
- Create root user # python3 manage.py creeatesuperuser
- Collect static files # python3 manage.py collectstatic --no-input
- Install webserver
# apt install nginx
- create ''/etc/nginx/sites-available/netbox'' with the following content:
server {
listen 80;
server_name netbox.cm.in.tum.de;
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
- Remove ''/etc/nginx/sites-enabled/default'' and create a symlink to the just created file
# rm /etc/nginx/sites-enabled/default
# ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-available/
- restart nginx # service nginx restart
- Install gunicorn and supervisor
# pip3 install gunicorn
# apt install supervisor
- create ''/opt/netbox/gunicorn_config.py'' with the following content:
command = '/usr/local/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'
- create ''/etc/supervisor/conf.d/netbox.conf'' with the following content:
[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data
[program:netbox-rqworker]
command = python3 /opt/netbox/netbox/manage.py rqworker
directory = /opt/netbox/netbox/
user = www-data
- Restart supervisor
# service supervisor restart
- Netbox should now be available under the configured domain.
==== Configuration ====
=== LDAP Login ===
- Additional dependecnies need to be installed
# apt install libldap2-dev libsasl2-dev libssl-dev
# pip3 install django-auth-ldap
- create ''/opt/netbox/netbox/netbox/ldap_config.py'' with the following content:
import ldap
AUTH_LDAP_SERVER_URI = "ldaps://ldap.in.tum.de:636"
from django_auth_ldap.config import LDAPSearch
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Personen, ou=IN, o=TUM, c=de", ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
from django_auth_ldap.config import LDAPSearch, PosixGroupType
# This search ought to return all groups to which the user belongs. django_auth_ldap uses this to determine group
# hierarchy.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Gruppen, ou=IN, o=TUM, c=de", ldap.SCOPE_SUBTREE,
"(objectClass=posixGroup)")
AUTH_LDAP_GROUP_TYPE = PosixGroupType()
# Define a group required to login.
AUTH_LDAP_REQUIRE_GROUP = "cn=il11admin, ou=Gruppen, ou=IN, o=TUM, c=de"
# Mirror LDAP group assignments.
AUTH_LDAP_MIRROR_GROUPS = True
# Define special user types using groups. Exercise great caution when assigning superuser status.
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=il11admin,ou=Gruppen,ou=IN,o=TUM,c=de",
"is_staff": "cn=il11admin,ou=Gruppen,ou=IN,o=TUM,c=de",
"is_superuser": "cn=il11admin,ou=Gruppen,ou=IN,o=TUM,c=de"
}
# For more granular permissions, we can map LDAP groups to Django groups.
AUTH_LDAP_FIND_GROUP_PERMS = True
# Cache groups for one hour to reduce LDAP traffic
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
- restart netbox
# supervisorctl restart netbox