IP address management tool
NetBox requires a PostgreSQL database located on a local or remote server. The PostgreSQL server must be in Version 11.0 or higher. Because NetBox makes heavy usage of its built-in network address datatypes other RDBMS's like MySQL, MariaDB, etc. are not supported.
$ psql -U postgres postgres
postgres=# CREATE DATABASE netbox; CREATE DATABASE postgres=# CREATE USER netbox WITH PASSWORD 'S4mpleP4ssw0rd'; CREATE ROLE postgres=# ALTER DATABASE netbox OWNER TO netbox; GRANT postgres=# \q
References
Netbox requires a Redis server (databases/redis) instance (local or remote) for background tasks and caching objects.
# cd /usr/local/share/netbox/netbox/ # install -m 0640 -o www configuration_example.py configuration.py
DATABASE = {
'NAME': 'netbox', # Database name
'USER': 'netbox', # PostgreSQL username
'PASSWORD': 'S4mpleP4ssw0rd', # PostgreSQL password you used in
# step "Create the PostgreSQL database"
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}
References
REDIS = {
'tasks': {
'HOST': 'tasks-redis-server.example.com', # Redis server
'PORT': 6379, # Redis port
'PASSWORD': '', # Redis password (optional)
'DATABASE': 0, # Database ID
'SSL': False, # Use SSL (optional)
},
'caching': {
'HOST': 'caching-redis-server.example.com',
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1, # Unique ID for second database
'SSL': False,
}
}
References
# python3.9 /usr/local/share/netbox/generate_secret_key.py
SECRET_KEY = 'dfIOdfa<dfOs0KxxjSb[ddljLfdghSSs9AsldxzZsajSoyssls'
References
To be able to access the embedded documentation, the DOCS_ROOT variable must be set accordingly.
DOCS_ROOT = '/usr/local/share/doc/netbox'
# cd /usr/local/share/netbox # python3.9 manage.py migrate
# mkdocs build
# python3.9 manage.py collectstatic --no-input
# python3.9 manage.py createsuperuser
# python3.9 manage.py runserver 0.0.0.0:8000 --insecure
You should reach NetBox at port 8000 and should be greeted with the NetBox home page. Try logging in using the username and password specified when creating a superuser.
References
NetBox can be run as a service by using either the supplied rc scripts that are installed by default via the EXAMPLES option or sysutils/py-supervisor.
Since 24c244e70f76 NetBox installs a sample script by default (kudos to Thomas Kurschel!). Using the rc script can be used nearly out of the box and eliminates the need of supervisord:
# cp /usr/local/share/examples/netbox/netboxrc.sample /usr/local/etc/rc.d/netbox # chmod 555 /usr/local/etc/rc.d/netbox # sysrc netbox_enable="YES" # service netbox start
Start the netbox rc script and verify that www/py-gunicorn listens on 127.0.0.1:8001 . Please see this chapter how to configure www/py-gunicorn for multiple interfaces/addresses, e.g. if using an IPv4/IPv6 dualstack configuration.
Configure gunicorn to use a separate configuration file (optional)
The script already uses various default values for www/py-gunicorn that are defined by upstream and should cause no issues on most installations. You can configure those values either by setting the appropriate rc variables (see the script for further details) or using a separate configuration file.
sysrc netbox_use_config="YES"
sysrc netbox_config="/your/own/path/to/netbox.conf.py"
The RQ worker service is required for background tasks and webhooks. The sample rc script that is installed via the EXAMPLES option can be set up quickly for this task:
# cp /usr/local/share/examples/netbox/netbox_rq.sample /usr/local/etc/rc.d/netbox_rq # chmod 555 /usr/local/etc/rc.d/netbox_rq # sysrc netbox_rq_enable="YES" # service netbox_rq start
[program:netbox] command = /usr/local/bin/gunicorn -c /usr/local/etc/netbox.conf.py netbox.wsgi directory = /usr/local/share/netbox/ user = www
[program:netbox_rq] command = /usr/local/bin/python3.9 manage.py rqworker directory = /usr/local/share/netbox user = www
command = '/usr/local/bin/gunicorn' pythonpath = '/usr/local/share/netbox' # The IP address (typically localhost) and port that the Netbox WSGI process should listen on bind = '127.0.0.1:8001' # If NetBox should listen on multiple interfaces, e.g. with a IPv4/IPv6 # dualstack configuration, use the following line instead # bind = ['127.0.0.1:8001','[::1]:8001'] # Number of gunicorn workers to spawn. This should typically be 2n+1, where # n is the number of CPU cores present. workers = 5 # Number of threads per worker process threads = 3 # Timeout (in seconds) for a request to complete timeout = 120 # The maximum number of requests a worker can handle before being respawned max_requests = 5000 max_requests_jitter = 500 # The user to run gunicorn with user = 'www'
References
If www/py-gunicorn should listen on multiple interfaces/addresses, e.g. with an IPv4/IPv6 dualstack, some small tweaks are required.
sysrc netbox_extra_args="-b '[::1]:8001'"
bind = ['127.0.0.1:8001','[::1]:8001']
A new “housekeeping” command has been introduced since NetBox 3.0 and a corresponding periodic script (via the default EXAMPLES option) has been added in 0627700a0bbe, which can be enabled via the following steps:
# cp /usr/local/share/examples/netbox/850.netbox-housekeeping.sample /usr/local/etc/periodic/daily/850.netbox-housekeeping # chmod 555 /usr/local/etc/periodic/daily/850.netbox-housekeeping # sysrc -f /etc/periodic.conf daily_netbox_housekeeping_enable="YES"
The following sections describes the setup using the Apache HTTP server to communicate with the gunicorn WSGI. It's also possible to use www/nginx as HTTP server instead of Apache.
If a self-signed certificate should be used the following command can be used:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/etc/ssl/netbox.key -out /usr/local/etc/ssl/netbox.crt
Please change the parameters and permissions that suit your environment.
References
<VirtualHost *:443>
ProxyPreserveHost On
ServerName netbox
Alias /static /usr/local/share/netbox/static
SSLEngine on
SSLCertificateFile /usr/local/etc/ssl/netbox.crt
SSLCertificateKeyFile /usr/local/etc/ssl/netbox.key
<Directory /usr/local/share/netbox/static>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
<Location /static>
ProxyPass !
</Location>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>
References
server {
listen 443 ssl;
server_name netbox;
ssl_certificate /usr/local/etc/ssl/netbox.crt;
ssl_certificate_key /usr/local/etc/ssl/netbox.key;
client_max_body_size 25m;
location /static/ {
alias /usr/local/share/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
# Redirect HTTP traffic to HTTPS
listen 80;
server_name _;
return 301 https://$host$request_uri;
# Stricter and more correct type of redirect
# See also https://datatracker.ietf.org/doc/html/rfc7538
#
# return 308 https://$host$request_uri;
#
# Note: This might break some old browsers, e.g. IE11 on Win7
}
References
As always it is strongly encouraged to make a backup before the upgrade is started. After the port has been updated the following steps are required to finish the upgrade:
# cd /usr/local/share/netbox # python3.9 manage.py migrate
# python3.9 manage.py trace_paths --no-input
# mkdocs build
# python3.9 manage.py collectstatic --no-input
# python3.9 manage.py remove_stale_contenttypes --no-input
# python3.9 manage.py reindex --lazy
# python3.9 manage.py clearsessions
# python3.9 manage.py clearcache
References