Blog of Things

NetBox Installation and Configuration on CentOS 7

This post captures details on how to install NetBox and configure it on a server running CentOS 7. NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. As part of the install process, we shall be installing and configuring, the following:

  1. PostgreSQL – Database used by NetBox
  2. Apache – NetBox can be made accessible either using Apache or nginx. This post covers Apache and setting it up as reverse proxy.
  3. NetBox – the application itself
  4. gunicorn – Python WSGI server
  5. supervisord – a process control system used to control gunicorn.
  6. firewalld – used to configure firewall on CentOS 7

Install and Start PostgreSQL

NetBox uses PostgreSQL as the database to store all information. Follow the instructions below to install, configure and start PostgreSQL.

yum install -y postgresql postgresql-server postgresql-devel python-psycopg2

Initialize PostgreSQL database

postgresql-setup initdb

Modify the PostgreSQL configuration to accept password-based authentication by replacing ident with md5 for all host entries within /var/lib/pgsql/data/pg_hba.conf.

host    all             all               md5
host    all             all             ::1/128                 md5

Then, start the service:

systemctl enable postgresql
systemctl start postgresql
Create Database for NetBox

Use the commands below to create the database that will be used by NetBox and a user for the database.

Run the psql command as user postgres and create the netbox database.

sudo -u postgres psql

NetBox Install and Configuration

NetBox requires a few programs to be installed, before it can be installed. Using the commands below will enable Extra Packages for Enterprise Linux (epel) repository and install the programs required.

yum install -y epel-release
yum install -y gcc python2 python-devel python-pip libxml2-devel libxslt-devel libffi-devel graphviz openssl-devel git

Create netbox directory and clone netbox repository from github.

mkdir /home/netbox
cd /home/netbox
git clone -b master .

Install all Python dependancies, using the commands below.

pip install --upgrade pip
pip install -r requirements.txt

Configure NetBox

cd netbox/netbox/

Edit and change the following:

DATABASE configuration
SECRET_KEY - Run ‘python /home/netbox/netbox/’ to generate a random key

Run the commands below to create the database schema.

cd /home/netbox/netbox/
./ migrate

Run the command below to create admin account

./ createsuperuser

Follow the prompts to create an admin account.

Run the command below to collect static files.

./ collectstatic

This will give a head start by creating some of the definitions in the database.

./ loaddata initial_data
Apache Installation and Configuration

This section captures the details on installation of Apache and configuring it to act as a reverse proxy to serve content from gunicorn.

Install Apache and configure it to start automatically on boot.

yum -y install httpd
systemctl enable httpd

Configure a new Virtual Host in Apache to listen on port 8000. The snippet below, will create a file called netbox.conf in /etc/httpd/conf.d directory.

echo "
Listen 8000

    ProxyPreserveHost On
    ServerName $DROPLETNAME
    Alias /static /home/netbox/netbox/static
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
        ProxyPass !
    ProxyPass /
    ProxyPassReverse /

" > /etc/httpd/conf.d/netbox.conf

Start Apache service

systemctl restart httpd
Install and Configure gunicorn

Use pip to install gunicorn.

pip install gunicorn

Use the snippet below to create the gunicorn configuration file called under /home/netbox/ directory.

echo  "
command = '/usr/bin/gunicorn'
pythonpath = '/home/netbox/netbox'
bind = ''
workers = 3
user = 'apache'
" > /home/netbox/

The formula for calculating the number of workers to configure is

workers = 2n + 1

where n is the number of CPU cores.

Install and Configure supervisord

Install supervisor using yum and create a configuration file for netbox.

yum -y install supervisor
echo "
command = gunicorn -c /home/netbox/ netbox.wsgi
directory = /home/netbox/netbox/
user = apache
" > /etc/supervisord.d/netbox.ini

Configure supervisord to automatically start on boot and start the service.

systemctl enable supervisord
systemctl start supervisord
Configure firewalld

Note: Ignore this part of the post if you are not using firewalld. You can verify whether firewalld is running on your CentOS 7 server or not by executing the command:

firewall-cmd status

If the output is “running”, then your system is configured for firewalld.

Earlier in the post, Apache was configured as a reverse proxy to allow client browsers to connect to port 8000. The requests are proxied to gunicorn WSGI listening on port 8001. I order to allow clients to successfully connect to NetBox, port 8000 must be open in the firewall.

To verify the firewall rule set, run the command

firewall-cmd --list-all

You should see an output similar to one below, which shows that ssh is the only service allowed on this server.

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  services: ssh
  masquerade: no
  rich rules: 

To allow inbound connections to port 800, run the command below and reload the firewall rule set.

firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reload

You should be able to access NetBox by accessing it using http://hostname.of.server:8000/



Check the inode, it’s not always disk


Deploying NetBox on Digital Ocean


  1. Rich

    I get this error;

    [root@localhost netbox]# pip install -r requirements.txt
    Could not open requirements file: [Errno 2] No such file or directory: ‘requirements.txt’

    • gaurav

      Hi Rich,

      Did the git clone complete properly? If you do a “ls -al /home/netbox”, you should see all the files and one of them should be requirements.txt.

      Let me know if you need help with this.


Leave a Reply

Your email address will not be published. Required fields are marked *