How to Install NetBox on Ubuntu 20.04

In this article, we’ll explain how to install NetBox on Ubuntu 20.04. This will guide you with the installation and configuration process.

NetBox is an infrastructure resource modeling (IRM) application designed to empower network automation. NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.

NetBox runs as a web application atop the Django Python framework with a PostgreSQL database.

Prerequisites:

  • A Ubuntu 20.04 installed KVM VPS.
  • A root user access or normal user with administrative privileges

1. Keep the server up to date

# apt update -y && apt upgrade -y

2. Install and Configure PostgreSQL Database

We’ll install and configure a local PostgreSQL database.

Note: NetBox requires PostgreSQL 9.6 or higher. Please note that MySQL and other relational databases are not currently supported.

Install PostgreSQL database using following command:

# apt install -y postgresql libpq-dev

Start and enable PostgreSQL service:

# systemctl start postgresql

# systemctl enable postgresql

Next, we need to create a database for NetBox and assign it a username and password for authentication.

# sudo -u postgres psql psql

postgres=# CREATE DATABASE netbox;

CREATE DATABASE

postgres=# CREATE USER netbox WITH PASSWORD ‘r5t6^7$%gyuuyt4’;

CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;

GRANT

postgres=# q

3. Install Redis

Redis is an in-memory key-value store which NetBox employs for caching and queuing. Use following command to install Redis:

# apt install redis-server -y

Start and enable redis-server service:

# systemctl start redis-server

# systemctl enable redis-server

Use the redis-cli utility to ensure the Redis service is functional:

# redis-cli ping

PONG

4. Install and Configure NetBox

There are two ways to install NetBox.

  1. Download a Release Archive
  2. Clone the Git Repository

We’ll install NetBox by cloning the Git repository.

First, install required packages and its dependencies:

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

Update pip (Python’s package management tool) to its latest release:

# pip3 install –upgrade pip

Create the base directory /opt/netbox for the NetBox installation.

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

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

# git clone -b master https://github.com/netbox-community/netbox.git .

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.

# adduser –system –group netbox

# chown –recursive netbox /opt/netbox/netbox/media/

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

# cd /opt/netbox/netbox/netbox/

# cp configuration.example.py configuration.py

Create a symbolic link of Python binary.

# ln -s /usr/bin/python3 /usr/bin/python

Generate a random SECRET_KEY of at least 50 alphanumeric characters.

# /opt/netbox/netbox/generate_secret_key.py

Above command will create a secret key, store it so that we can use it in the configuration.py.

Open and edit the configuration file configuration.py.

# nano /opt/netbox/netbox/netbox/configuration.py

The final file should have the following configurations.

ALLOWED_HOSTS = [‘*’]

DATABASE = {
‘NAME’: ‘netbox’, # Database name you created
‘USER’: ‘netbox’, # PostgreSQL username you created
‘PASSWORD’: ‘r5t6^7$%gyuuyt4’, # PostgreSQL password you set
‘HOST’: ‘localhost’, # Database server
‘PORT’: ”, # Database port (leave blank for default)
}

SECRET_KEY = ‘YOUR SECRET KEY’

Once NetBox has been configured, we’re ready to proceed with the actual installation.

We’ll run the packaged upgrade script (upgrade.sh) to perform the following actions:

  • Create a Python virtual environment
  • Install all required Python packages
  • Run database schema migrations
  • Aggregate static resource files on disk

# /opt/netbox/upgrade.sh

Enter the Python virtual environment created by the upgrade script:

# source /opt/netbox/venv/bin/activate

Create a superuser account using the createsuperuser

# cd /opt/netbox/netbox

# python3 manage.py createsuperuser

Output:

Email address: admin@example.com

Password:

Password (again):

Superuser created successfully.

5. Configure Gunicorn

NetBox ships with a default configuration file for gunicorn. To use it, copy /opt/netbox/contrib/gunicorn.py to /opt/netbox/gunicorn.py.

# cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

Copy contrib/netbox.service and contrib/netbox-rq.service to the /etc/systemd/system/ directory and reload the systemd dameon:

# cp -v /opt/netbox/contrib/*.service /etc/systemd/system/

# systemctl daemon-reload

Start and enable the netbox and netbox-rq services:

# systemctl start netbox netbox-rq

# systemctl enable netbox netbox-rq

6. Configure Nginx Web Server

Install Nginx web server using following command:

# apt install -y nginx

Copy the nginx configuration file provided by NetBox to /etc/nginx/sites-available/netbox.

# cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox

Edit the netbox configuration file and remove all the content and copy paste below contents:

# nano /etc/nginx/sites-available/netbox

Remember to change server_name.

server {
listen 80;

# CHANGE THIS TO YOUR SERVER’S NAME
server_name 127.0.0.1;

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 $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Then, delete /etc/nginx/sites-enabled/default and create a symlink in the sites-enabled directory to the configuration file you just created.

# rm /etc/nginx/sites-enabled/default

# ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox

Now test Nginx configuration and restart the Nginx service:

# nginx -t

# systemctl restart nginx

That’s it we have successfully completed with the installation and configuration process.

Navigate to your browser and access NetBox with using either server IP or domain name.

In this article, we’ve seen how to install NetBox on Ubuntu 20.04.

Ubuntu Server Admin

View Comments

Recent Posts

Kolla Ansible OpenStack Installation (Ubuntu 24.04)

Kolla Ansible provides production-ready containers (here, Docker) and deployment tools for operating OpenStack clouds. This…

18 hours ago

Canonical announces first Ubuntu Desktop image for Qualcomm Dragonwing™ Platform with Ubuntu 24.04

This public beta enables the full Ubuntu Desktop experience on the Qualcomm Dragonwing™ QCS6490 and…

2 days ago

The long march towards delivering CRA compliance

Time is running out to be in full compliance with the EU Cyber Resilience Act,…

2 days ago

Extra Factor Authentication: how to create zero trust IAM with third-party IdPs

Identity management is vitally important in cybersecurity. Every time someone tries to access your networks,…

3 days ago

Ubuntu Weekly Newsletter Issue 889

Welcome to the Ubuntu Weekly Newsletter, Issue 889 for the week of April 20 –…

4 days ago

From pidfd to Shimanami Kaido: My RubyKaigi 2025 Experience

Introduction I just returned from RubyKaigi 2025, which ran from April 16th to 18th at…

5 days ago