Cómo instalar la herramienta de documentación y gestión de redes NetBox en Ubuntu 20.04 LTS

Netbox es una potente y gratuita herramienta de gestión de direcciones IP (IPAM) y de infraestructuras de centros de datos (DCIM). Sirve para almacenar información sobre tus redes, máquinas virtuales, inventarios y mucho más. Fue desarrollada originalmente por el equipo de ingeniería de redes de DigitalOcean. Esta herramienta está escrita en el framework Django Python y se apoya en la base de datos PostgreSQL. Su objetivo es funcionar como una fuente de verdad específica del dominio para las operaciones de red.

En este tutorial, explicaremos cómo instalar Netbox con Nginx como proxy inverso en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

Antes de empezar, necesitarás instalar algunas dependencias requeridas por Netbox. Puedes instalarlas todas ejecutando el siguiente comando:

apt-get install nginx git gcc supervisor python3 python3-dev python3-pip python3-setuptools build-essential libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libssl-dev zlib1g-dev -y

Una vez instalados todos los paquetes, puedes pasar al siguiente paso.

Instalar y configurar la base de datos PostgreSQL

Netbox depende de la base de datos PostgreSQL para el almacenamiento de datos. Puedes instalarla con el siguiente comando:

apt-get install postgresql postgresql-contrib -y

Una vez instalado el PostgreSQL, accede al PostgreSQL con el siguiente comando:

su - postgres
[email protected]:~$ psql

Deberías obtener la siguiente salida:

psql (12.2 (Ubuntu 12.2-4))
Type "help" for help.

A continuación, crea una base de datos y un usuario para Netbox con el siguiente comando:

postgres=# CREATE DATABASE netbox;
postgres=# CREATE USER netbox WITH PASSWORD 'password';

A continuación, concede todos los privilegios a la base de datos de Netbox con el siguiente comando:

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

A continuación, sal del shell PostgreSQL con el siguiente comando

postgres=# exit
[email protected]:~$ exit

Instalar y configurar NetBox

Primero, cambia el directorio a /opt y descarga la última versión de Netbox desde el repositorio Git Hub con el siguiente comando

cd /opt/
git clone -b master https://github.com/digitalocean/netbox.git

A continuación, crea un enlace simbólico del binario de Python con el siguiente comando

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

A continuación, cambia el directorio a /opt/netbox/netbox/ y genera la clave secreta de Django ejecutando el siguiente comando:

cd /opt/netbox/netbox/
./generate_secret_key.py

Deberías obtener la siguiente salida:

[email protected])eTDpo(k^f4Sm9bariUnK0syCPMGEIjW6XV_8l5xhB7z

A continuación, cambia el directorio a netbox y cambia el nombre del archivo de configuración de ejemplo:

cd netbox
mv configuration.example.py configuration.py

A continuación, edita el archivo de configuración de Netbox y define tu base de datos, la clave secreta y los hosts permitidos:

nano configuration.py

Realiza los siguientes cambios:

ALLOWED_HOSTS = ['your-server-ip']

# PostgreSQL database configuration. See the Django documentation for a complete list of available parameters:
#   https://docs.djangoproject.com/en/stable/ref/settings/#databases
DATABASE = {
    'NAME': 'netbox',         # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': 'password',           # PostgreSQL password
    'HOST': 'localhost',      # Database server
    'PORT': '',               # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,      # Max database connection age
}

SECRET_KEY = '[email protected])eTDpo(k^f4Sm9bariUnK0syCPMGEIjW6XV_8l5xhB7z'

Guarda y cierra el archivo y luego instala todas las dependencias de Python con el siguiente comando:

pip3 install -r /opt/netbox/requirements.txt

A continuación, migra la base de datos con el siguiente comando:

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

A continuación, crea un usuario administrativo de Netbox con el siguiente comando:

python3 manage.py createsuperuser

Se te pedirá que proporciones el nombre de usuario y la contraseña como se muestra a continuación:

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

A continuación, recoge el archivo estático con el siguiente comando:

python3 manage.py collectstatic

Deberías ver la siguiente salida:

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

Instalar y configurar Gunicorn

Netbox es una aplicación basada en Django. Así que necesitarás instalar Gunicorn en tu sistema. Puedes instalarlo ejecutando el siguiente comando:

pip3 install gunicorn

Después de instalar Gunicorn, crea un nuevo archivo de configuración de Gunicorn para Netbox con el siguiente comando:

nano /opt/netbox/gunicorn_config.py

Añade las siguientes líneas:

command = '/usr/local/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = 'your-server-ip:8001'
workers = 3
user = 'www-data'

Guarda y cierra el archivo cuando hayas terminado.

Instalar y configurar el Supervisor

El Supervisor es un sistema cliente/servidor que te permite supervisar y controlar el servicio NetBox. Puedes crear un nuevo archivo de configuración del Supervisor para Netbox con el siguiente comando:

nano /etc/supervisor/conf.d/netbox.conf

Añade las siguientes líneas:

[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data

Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio de Supervisor con el siguiente comando:

systemctl restart supervisor

También puedes verificar el estado del servicio Supervisor con el siguiente comando:

systemctl status supervisor

Deberías obtener la siguiente salida:

? supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-05-30 05:49:08 UTC; 14s ago
       Docs: http://supervisord.org
   Main PID: 550606 (supervisord)
      Tasks: 5 (limit: 4691)
     Memory: 184.3M
     CGroup: /system.slice/supervisor.service
             ??550606 /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
             ??550626 /usr/bin/python3 /usr/local/bin/gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
             ??550628 /usr/bin/python3 /usr/local/bin/gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
             ??550629 /usr/bin/python3 /usr/local/bin/gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
             ??550630 /usr/bin/python3 /usr/local/bin/gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi

May 30 05:49:08 ubuntu2004 systemd[1]: Started Supervisor process control system for UNIX.
May 30 05:49:08 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:08,664 CRIT Supervisor is running as root.  Privileges were not dropped becau>
May 30 05:49:08 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:08,664 INFO Included extra file "/etc/supervisor/conf.d/netbox.conf" during p>
May 30 05:49:08 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:08,671 INFO RPC interface 'supervisor' initialized
May 30 05:49:08 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:08,671 CRIT Server 'unix_http_server' running without any HTTP authentication>
May 30 05:49:08 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:08,672 INFO supervisord started with pid 550606
May 30 05:49:09 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:09,676 INFO spawned: 'netbox' with pid 550626
May 30 05:49:11 ubuntu2004 supervisord[550606]: 2020-05-30 05:49:11,060 INFO success: netbox entered RUNNING state, process has stayed up for

Configurar Nginx para NetBox

Es una buena idea configurar Nginx como proxy inverso para acceder a la Netbox en el puerto 80. Puedes crear una nueva configuración de host virtual Nginx con el siguiente comando:

nano /etc/nginx/sites-available/netbox.conf

Añade las siguientes líneas:

server {
    listen 80;
    server_name your-server-ip;
    client_max_body_size 25m;

    location /static/ {
        alias /opt/netbox/netbox/static/;
    }

    location / {
        proxy_pass http://your-server-ip:8001;
    }
}

Guarda y cierra el archivo. A continuación, crea un enlace simbólico al directorio /etc/nginx/sites-enabled/:

ln -s /etc/nginx/sites-available/netbox.conf /etc/nginx/sites-enabled/

A continuación, comprueba si Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Si todo está bien, deberías obtener la siguiente salida:

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

Por último, reinicia el servicio Nginx para aplicar los cambios.

systemctl restart nginx

También puedes verificar el Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-30 22:28:13 EST; 4min 14s ago
  Process: 984 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 982 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 980 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 985 (nginx)
    Tasks: 3 (limit: 25028)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??985 nginx: master process /usr/sbin/nginx
           ??986 nginx: worker process
           ??987 nginx: worker process

May 30 21:28:12 ubuntu2004 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 30 21:28:12 ubuntu2004 nginx[982]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 30 21:28:12 ubuntu2004 nginx[982]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 30 21:28:13 ubuntu2004 systemd[1]: Started The nginx HTTP and reverse proxy server.

En este punto, el servidor web Nginx está configurado para servir a Netbox en el puerto 80. Ahora puedes proceder a acceder a la interfaz web de Netbox.

Acceder a la interfaz web de Netbox

Abre tu navegador web y visita la URL http://your-server-ip. Serás redirigido a la siguiente página:

Interfaz de la caja de red

Haz clic en el botón de inicio de sesión. Deberías ver la página de inicio de sesión de Netbox en la siguiente pantalla:

Inicio de sesión en Netbox

Proporciona tu nombre de usuario y contraseña de administrador de Netbox, y haz clic en el botón de inicio de sesión. Deberías ver el panel de control por defecto de Netbox en la siguiente página:

Panel de administración de Netbox

Conclusión

En esta guía, has aprendido a instalar Netbox en Ubuntu 20.04 con Nginx. Ahora puedes empezar a documentar tu infraestructura de red. Para más información, visita la documentación oficial de Netbox. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...