Configure NetBox for your team

The settings you want before opening NetBox to colleagues: time zone and banners, outgoing mail, groups and permissions, the first plugins, and the custom fields your data needs.

intermediate~40 min hands-on
#netbox#permissions#plugins#api

Not validated end to end yet — be the first.Report a problem

Draft — not yet run end to end. This page was written but its author has not yet run it on a real machine. Commands may be wrong: read before you run, and tell us what breaks.

The gistYou, the API, and what you switch on
NetBox server
HTTPSssh
You (admin)curl · token
REST APIhttps:///api
configuration.py/netbox/netbox/
Groups & permissionsnetops · readers
Pluginslocal_requirements.txt
Mail relay:

Most of this page goes through the REST API with a token, so it can be replayed on the next instance. Mail, LDAP groups and plugins are optional pieces you decide on in the margin.

The previous page left you with a working NetBox and one administrator. Before colleagues get the URL, a handful of settings turn it from an install into your instance. Most of them live in configuration.py; the rest is done through the REST API, so you can replay it on the next instance.

Before you start

Check
$curl -sf -H 'Authorization: Token ' https:///api/status/ | python3 -m json.tool | head -3
Expected output
{
"django-version": "5.x",

Instance settings

Append to /netbox/netbox/configuration.py:

python
TIME_ZONE = ''
BANNER_TOP = ''
LOGIN_REQUIRED = True
CHANGELOG_RETENTION = 180

Outgoing mail

python
EMAIL = {
'SERVER': '',
'PORT': ,
'USE_TLS': True,
'FROM_EMAIL': '',
'TIMEOUT': 10,
}

After a restart (next section), send a test message to yourself:

Check
$sudo /venv/bin/python /netbox/manage.py sendtestemail you@example.com
Expected output
Test email sent to: you@example.com

Groups and permissions

$API=https:///api
$AUTH="Authorization: Token "
$curl -sf -H "$AUTH" -H 'Content-Type: application/json' "$API/users/groups/" -d '{"name": "netops"}'
$curl -sf -H "$AUTH" -H 'Content-Type: application/json' "$API/users/groups/" -d '{"name": "readers"}'

Plugins

$echo netbox-topology-views | sudo tee -a /local_requirements.txt

Enable them in configuration.py (module names use underscores):

python
PLUGINS = ['netbox_topology_views']

Then install and migrate:

$sudo /upgrade.sh

Custom fields

$curl -sf -H "$AUTH" -H 'Content-Type: application/json' "$API/extras/custom-fields/" -d '{
$ "name": "asset_tag_internal",
$ "label": "Internal asset tag",
$ "type": "text",
$ "object_types": ["dcim.device"],
$ "required": false,
$ "filter_logic": "exact"
$}'

Restart and verify

$sudo systemctl restart netbox netbox-rq
Check
$systemctl is-active netbox netbox-rq
Expected output
active
active
Check
$curl -sf -H 'Authorization: Token ' https:///api/users/groups/ | python3 -c 'import sys,json; print([g["name"] for g in json.load(sys.stdin)["results"]])'
Expected output
['netops', 'readers']
Check
$curl -sf -H 'Authorization: Token ' https:///api/plugins/ | grep -o '"name": "[^"]*"'
Expected output
"name": "Topology views"

Done

Your instance has a name on every page, sends mail, knows who may change what, and carries the first fields your data needs. Next: keeping it that way, with upgrades, backups and monitoring.

Did everything work?

If you followed this page to the end on a real machine, say so. Your validation is dated and records your stack, so the next reader on the same path knows it still works.

This copy is read-only. To report that it works, or that it does not, open an issue

Only your stack choices are recorded, never your values. The pseudonym stays on this browser.