NetBox Installation

This section of the documentation discusses installing and configuring the NetBox application itself.

Install System Packages

Begin by installing all system packages required by NetBox and its dependencies. Note that beginning with NetBox v2.8, Python 3.6 or later is required.


# apt-get install -y python3.6 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev


# yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config
# easy_install-3.6 pip

Download NetBox

You may opt to install NetBox either from a numbered release or by cloning the master branch of its repository on GitHub.

Option A: Download a Release

Download the latest stable release from GitHub as a tarball or ZIP archive and extract it to your desired path. In this example, we'll use /opt/netbox.

# wget
# tar -xzf vX.Y.Z.tar.gz -C /opt
# cd /opt/
# ln -s netbox-X.Y.Z/ netbox
# cd /opt/netbox/

Option B: Clone the Git Repository

Create the base directory for the NetBox installation. For this guide, we'll use /opt/netbox.

# mkdir -p /opt/netbox/ && cd /opt/netbox/

If git is not already installed, install it:


# apt-get install -y git


# yum install -y git

Next, clone the master branch of the NetBox GitHub repository into the current directory:

# git clone -b master .
Cloning into '.'...
remote: Counting objects: 1994, done.
remote: Compressing objects: 100% (150/150), done.
remote: Total 1994 (delta 80), reused 0 (delta 0), pack-reused 1842
Receiving objects: 100% (1994/1994), 472.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1495/1495), done.
Checking connectivity... done.

Create the NetBox User

Create a system user account named netbox. We'll configure the WSGI and HTTP services to run under this account. We'll also assign this user ownership of the media directory. This ensures that NetBox will be able to save local files.


CentOS users may need to create the netbox group first.

# groupadd --system netbox
# adduser --system --gid netbox netbox
# chown --recursive netbox /opt/netbox/netbox/media/

Set Up Python Environment

We'll use a Python virtual environment to ensure NetBox's required packages don't conflict with anything in the base system. This will create a directory named venv in our NetBox root.

# python3 -m venv /opt/netbox/venv

Next, activate the virtual environment and install the required Python packages. You should see your console prompt change to indicate the active environment. (Activating the virtual environment updates your command shell to use the local copy of Python that we just installed for NetBox instead of the system's Python interpreter.)

# source venv/bin/activate
(venv) # pip3 install -r requirements.txt

NAPALM Automation (Optional)

NetBox supports integration with the NAPALM automation library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API. Installation of NAPALM is optional. To enable it, install the napalm package:

(venv) # pip3 install napalm

To ensure NAPALM is automatically re-installed during future upgrades, create a file named local_requirements.txt in the NetBox root directory (alongside requirements.txt) and list the napalm package:

# echo napalm >> local_requirements.txt

Remote File Storage (Optional)

By default, NetBox will use the local filesystem to storage uploaded files. To use a remote filesystem, install the django-storages library and configure your desired backend in

(venv) # pip3 install django-storages

Don't forget to add the django-storages package to local_requirements.txt to ensure it gets re-installed during future upgrades:

# echo django-storages >> local_requirements.txt


Move into the NetBox configuration directory and make a copy of named

(venv) # cd netbox/netbox/
(venv) # cp

Open with your preferred editor and set the following variables:



This is a list of the valid hostnames by which this server can be reached. You must specify at least one name or IP address.


ALLOWED_HOSTS = ['', '']


This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, replace localhost with its address. See the configuration documentation for more detail on individual parameters.


    'NAME': 'netbox',               # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
    'HOST': 'localhost',            # Database server
    'PORT': '',                     # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,            # Max database connection age


Redis is a in-memory key-value store required as part of the NetBox installation. It is used for features such as webhooks and caching. Redis typically requires minimal configuration; the values below should suffice for most installations. See the configuration documentation for more detail on individual parameters.

    'tasks': {
        'HOST': '',
        'PORT': 1234,
        'PASSWORD': 'foobar',
        'DATABASE': 0,
        'DEFAULT_TIMEOUT': 300,
        'SSL': False,
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'PASSWORD': '',
        'DATABASE': 1,
        'DEFAULT_TIMEOUT': 300,
        'SSL': False,


Generate a random secret key of at least 50 alphanumeric characters. This key must be unique to this installation and must not be shared outside the local system.

You may use the script located at netbox/ to generate a suitable key.


In the case of a highly available installation with multiple web servers, SECRET_KEY must be identical among all servers in order to maintain a persistent user session state.

Run Database Migrations

Before NetBox can run, we need to install the database schema. This is done by running python3 migrate from the netbox directory (/opt/netbox/netbox/ in our example):

(venv) # cd /opt/netbox/netbox/
(venv) # python3 migrate
Operations to perform:
  Apply all migrations: dcim, sessions, admin, ipam, utilities, auth, circuits, contenttypes, extras, secrets, users
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK

If this step results in a PostgreSQL authentication error, ensure that the username and password created in the database match what has been specified in

Create a Super User

NetBox does not come with any predefined user accounts. You'll need to create a super user to be able to log into NetBox:

(venv) # python3 createsuperuser
Username: admin
Email address:
Password (again):
Superuser created successfully.

Collect Static Files

(venv) # python3 collectstatic --no-input

959 static files copied to '/opt/netbox/netbox/static'.

Test the Application

At this point, NetBox should be able to run. We can verify this by starting a development instance:

(venv) # python3 runserver --insecure
Performing system checks...

System check identified no issues (0 silenced).
November 28, 2018 - 09:33:45
Django version 2.0.9, using settings 'netbox.settings'
Starting development server at
Quit the server with CONTROL-C.

Next, connect to the name or IP of the server (as defined in ALLOWED_HOSTS) on port 8000; for example, You should be greeted with the NetBox home page. Note that this built-in web service is for development and testing purposes only. It is not suited for production use.


If the test service does not run, or you cannot reach the NetBox home page, something has gone wrong. Do not proceed with the rest of this guide until the installation has been corrected.

Note that the initial UI will be locked down for non-authenticated users.

NetBox UI as seen by a non-authenticated user

After logging in as the superuser you created earlier, all areas of the UI will be available.

NetBox UI as seen by an administrator