NetBox, an open-source web application designed to manage and document computer networks, stands as an invaluable tool for network engineers and administrators. With its intuitive interface and robust feature set, NetBox simplifies network infrastructure management, offering functionalities such as IP address management (IPAM), device inventory, circuit tracking, and more.

This guide outlines the step-by-step process to install NetBox on Ubuntu 22.04.

Step 1 – Install PostgreSQL Server

NetBox uses PostgreSQL as a database engine, so you must install it on your server. You can install it with the following command.

apt update -y
apt install postgresql postgresql-contrib -y

Next, verify the PostgreSQL service.

systemctl status postgresql

Output.

● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2024-02-15 02:45:47 UTC; 4s ago
    Process: 3807 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 3807 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Feb 15 02:45:47 ubuntu systemd[1]: Starting PostgreSQL RDBMS...
Feb 15 02:45:47 ubuntu systemd[1]: Finished PostgreSQL RDBMS.

Next, login to PostgreSQL.

sudo -i -u postgres psql

Create a database and user for Netbox.

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'password';
ALTER DATABASE netbox OWNER TO netbox;

Exit from the PostgreSQL shell.

\q

Step 2 – Install Redis

NetBox uses Redis for caching, so you will need to install it on your server. You can install it using the following command.

apt install redis -y

You can verify the Redis installation using the following command.

redis-server -v

Output.

Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=a3fdef44459b3ad6

Next, edit the Redis configuration file.

nano /etc/redis/redis.conf

Change the following line to enable Redis authentication.

requirepass password

Save the file then restart the Redis to apply the changes.

systemctl restart redis-server

Step 3 – Install Netbox

First, install all required 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

Next, create a directory for NetBox.

mkdir -p /opt/netbox/

Then, change the directory to NetBox and download the latest version of NetBox from the Git repo.

cd /opt/netbox
git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
git config --global --add safe.directory /opt/netbox

Next, create a user and group for NetBox.

adduser --system --group netbox

Change the ownership of the NetBox directory.

chown --recursive netbox /opt/netbox
chown --recursive netbox /opt/netbox/netbox/media/

Next, rename the NetBox sample configuration file.

cd /opt/netbox/netbox/netbox/
cp configuration_example.py configuration.py

Then, generate a secret key.

python3 ../generate_secret_key.py

Output.

3ChOm5a9!J)Ik*vxXNZBu&MdaQN545_Dyh93#PnII7uv_AeqNP

Next, edit the NetBox configuration file.

nano configuration.py

Change the following lines:

ALLOWED_HOSTS = ['netbox.example.com', '']

DATABASE = {
    'NAME': 'netbox',              
    'USER': 'netbox',             
    'PASSWORD': 'password',
    'HOST': 'localhost',
    'PORT': '',             
    'CONN_MAX_AGE': 300, 
}

REDIS = {
    'tasks': {
        'HOST': 'localhost',
        'PORT': 6379,
        'PASSWORD': 'password',
        'DATABASE': 0,
        'SSL': False,
    },
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'PASSWORD': 'password',
        'DATABASE': 1,
        'SSL': False,

    }
}

SECRET_KEY = '3ChOm5a9!J)Ik*vxXNZBu&MdaQN545_Dyh93#PnII7uv_AeqNP'

Save and close the file, then install NetBox using the following command.

/opt/netbox/upgrade.sh

Step 4 – Create a Netbox Admin User

First, activate the NetBox virtual environment.

source /opt/netbox/venv/bin/activate

Next, create a superuser for NetBox.

cd /opt/netbox/netbox
python3 manage.py createsuperuser

Define your user and password as shown below.

Username (leave blank to use 'root'): nadmin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Next, create a symbolic link to the NetBox service file.

ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping

Step 5 – Start Netbox Server

You can now start the NetBox server using the following command.

python3 manage.py runserver 0.0.0.0:8000 --insecure

Output.

System check identified no issues (0 silenced).
February 15, 2024 - 03:15:24
Django version 4.2.9, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Now, open your web browser and access NetBox using the URL http://netbox.example.com:8000. You will see the NetBox following page.

Click on the Log In button. You will see the following page.

Provide your admin username and password and click on Sign In. You will see the NetBox dashboard on the following screen.

Finally, deactivate from the virtual environment using the following command.

deactivate

Step 6 – Create a Systemd Service File

By default, Netbox comes with a pre-built system file to manage the NetBox.

First, copy all required files to the desired location.

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

Next, reload the systemd daemon to apply the changes.

systemctl daemon-reload

Next, start and enable the NetBox service.

systemctl start netbox netbox-rq
systemctl enable netbox netbox-rq

You can now verify the NetBox service using the following command.

systemctl status netbox

Output.

● netbox.service - NetBox WSGI Service
     Loaded: loaded (/etc/systemd/system/netbox.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-02-15 03:20:32 UTC; 5s ago
       Docs: https://docs.netbox.dev/
   Main PID: 113448 (gunicorn)
      Tasks: 6 (limit: 4579)
     Memory: 506.7M
        CPU: 6.533s
     CGroup: /system.slice/netbox.service
             ├─113448 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>
             ├─113450 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>
             ├─113451 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>
             ├─113452 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>
             ├─113453 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>
             └─113454 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicor>

Step 7 – Configure Nginx as a Reverse Proxy

First, install the Nginx packages.

apt install nginx

Next, edit the Nginx main configuration file.

nano /etc/nginx/nginx.conf

Add the following line after the line http{:

server_names_hash_bucket_size  64;

Then, create a new Nginx virtual host configuration file.

nano /etc/nginx/conf.d/netbox.conf

Add the following configurations.

server {

  listen         80;
  server_name    netbox.example.com;
  access_log                /var/log/nginx/netbox.access.log;
  error_log                 /var/log/nginx/netbox.error.log;

  client_max_body_size 25m;

  # Proxy everything over to the netbox server
  location /static/ {
    alias /opt/netbox/netbox/static/;
  }

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header	    X-Forwarded-Host $http_host;
    proxy_pass              http://127.0.0.1:8001;
  }
}

Save the file then verify the Nginx for any syntax error.

nginx -t

Output.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Finally, restart the Nginx service to apply the changes.

systemctl restart nginx

You can now access NetBox using the URL http://netbox.example.com.

Conclusion

By following the installation process outlined in this guide, network administrators can harness the full potential of NetBox to streamline operations, enhance visibility, and maintain a well-documented network infrastructure. Embrace the power of NetBox on Ubuntu 22.04 and take control of your network infrastructure with confidence. Try to deploy NetBox on dedicated server hosting from Atlantic.Net!