Como instalar Netbox, ferramenta grátis para documentar sua rede


Netbox é um aplicativo web de código aberto projetado para ajudar a gerenciar e documentar redes de computadores. Concebido inicialmente pela equipe de engenharia de rede da DigitalOcean , o NetBox foi desenvolvido especificamente para atender às necessidades dos engenheiros de rede e infraestrutura. Abrange os seguintes aspectos de gerenciamento de rede:

Gerenciamento de endereço IP (IPAM) – redes e endereços IP, VRFs e VLANs

  • Racks de equipamentos – organizados por grupo e local
  • Dispositivos – Tipos de dispositivos e onde estão instalados
  • Conexões – Rede, console e conexões de energia entre dispositivos
  • Virtualização – máquinas virtuais e clusters
  • Circuitos de dados – circuitos e provedores de comunicações de longa distância
  • Segredos – armazenamento criptografado de credenciais confidenciais

Requisitos:
Como de costume vou realizar a instalação no Debian 10 limpo (sem pacotes extras)
Vire root da forma correta, colocando após os su o “-“.

su -

Instale os pacotes que serão requisitos.

# apt install vim net-tools wget redis-server supervisor\
  postgresql-contrib postgresql libpq-dev gcc\
  python-minimal python3 python3-pip python3-venv\
  python3-dev build-essential libxml2-dev libxslt1-dev\
  libffi-dev libssl-dev zlib1g-dev graphviz\
  nginx redis python3-setuptools

Vire o usuário postgres, para poder criar nosso banco de dados.

# su - postgres

Entre no terminal de comandos do postgres

$ psql

Não esqueça de alterar a senha.

postgres=# CREATE DATABASE netboxdb;
postgres=# CREATE USER netboxuser WITH PASSWORD 'senha';
postgres=# GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netboxuser;
postgres=# exit

Verifique ser o serviço redis esta respondendo.

$ redis-cli ping

Deve retornar : PONG
Retorne ao usuario root

exit

Atualize o pip

# pip3 install --upgrade pip

Agora vamos baixar o projeto NetBox. Verifique em https://github.com/netbox-community/netbox/releases não existe uma nova versão.
Entre em tmp (diretório temporário do linux que após um reboot é apagado) em seguida fizemos o download, extraímos, movemos para o diretório correto bem como ajustamos permissões do diretório que faremos upload de arquivos.

# cd /tmp
# wget https://github.com/netbox-community/netbox/archive/refs/tags/v2.10.8.tar.gz
# tar vxf v2.10.8.tar.gz
# mv netbox*/ /opt/netbox
# cd /opt/netbox/
# chown www-data. /opt/netbox/netbox/media/ -R

Execute o comando abaixo para gerar nossa SECRET KEY que iremos usar em seguida.

# /opt/netbox/netbox/generate_secret_key.py 

Ex.:

T7TE07O$j^Jqf9(*20q8M5kG4%NBIci#gEEn0$wuw*qodT7Lfo

Copie o arquivo de configuração exemplo para ajustar com suas infomações

# cp /opt/netbox/netbox/netbox/configuration.example.py /opt/netbox/netbox/netbox/configuration.py
# vim /opt/netbox/netbox/netbox/configuration.py

Localize as linhas como exemplo abaixo e altere os valores.

ALLOWED_HOSTS = ['localhost','netbox.remontti.com.br']

DATABASE = {
    'NAME': 'netboxdb',       # Database name
    'USER': 'netboxuser',     # PostgreSQL username
    'PASSWORD': 'senha',      # PostgreSQL password
    'HOST': 'localhost',      # Database server
    'PORT': '',               # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,      # Max database connection age
}
# Gerado com o comando /opt/netbox/netbox/generate_secret_key.py
SECRET_KEY = 'T7TE07O$j^Jqf9(*20q8M5kG4%NBIci#gEEn0$wuw*qodT7Lfo'

LOGIN_REQUIRED = True

Instalaremos os pacotes do py requeiridos.

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

Vamos a instalção do bichão!

# cd /opt/netbox/netbox/
# python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, circuits, contenttypes, dcim, extras, ipam, secrets, sessions, taggit, tenancy, users, virtualization
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying tenancy.0001_initial... OK
Applying tenancy.0002_tenant_group_optional... OK
Applying tenancy.0003_unicode_literals... OK
Applying taggit.0001_initial... OK
Applying taggit.0002_auto_20150616_2121... OK
Applying tenancy.0004_tags... OK
Applying tenancy.0005_change_logging... OK
Applying dcim.0001_initial... OK
Applying ipam.0001_initial... OK
Applying dcim.0002_auto_20160622_1821... OK
Applying extras.0001_initial... OK
Applying extras.0002_custom_fields... OK
Applying extras.0003_exporttemplate_add_description... OK
Applying extras.0004_topologymap_change_comma_to_semicolon... OK
Applying extras.0005_useraction_add_bulk_create... OK
Applying extras.0006_add_imageattachments... OK
Applying extras.0007_unicode_literals... OK
Applying extras.0008_reports... OK
Applying extras.0009_topologymap_type... OK
Applying extras.0010_customfield_filter_logic... OK
Applying extras.0011_django2... OK
Applying extras.0012_webhooks... OK
Applying extras.0013_objectchange... OK
Applying ipam.0002_vrf_add_enforce_unique... OK
Applying dcim.0003_auto_20160628_1721... OK
Applying dcim.0004_auto_20160701_2049... OK
Applying dcim.0005_auto_20160706_1722... OK
Applying dcim.0006_add_device_primary_ip4_ip6... OK
Applying dcim.0007_device_copy_primary_ip... OK
Applying dcim.0008_device_remove_primary_ip... OK
Applying dcim.0009_site_32bit_asn_support... OK
Applying dcim.0010_devicebay_installed_device_set_null... OK
Applying ipam.0003_ipam_add_vlangroups... OK
Applying ipam.0004_ipam_vlangroup_uniqueness... OK
Applying ipam.0005_auto_20160725_1842... OK
Applying ipam.0006_vrf_vlan_add_tenant... OK
Applying ipam.0007_prefix_ipaddress_add_tenant... OK
Applying ipam.0008_prefix_change_order... OK
Applying ipam.0009_ipaddress_add_status... OK
Applying ipam.0010_ipaddress_help_texts... OK
Applying ipam.0011_rir_add_is_private... OK
Applying dcim.0011_devicetype_part_number... OK
Applying dcim.0012_site_rack_device_add_tenant... OK
Applying dcim.0013_add_interface_form_factors... OK
Applying dcim.0014_rack_add_type_width... OK
Applying dcim.0015_rack_add_u_height_validator... OK
Applying dcim.0016_module_add_manufacturer... OK
Applying dcim.0017_rack_add_role... OK
Applying dcim.0018_device_add_asset_tag... OK
Applying dcim.0019_new_iface_form_factors... OK
Applying dcim.0020_rack_desc_units... OK
Applying dcim.0021_add_ff_flexstack... OK
Applying dcim.0022_color_names_to_rgb... OK
Applying ipam.0012_services... OK
Applying ipam.0013_prefix_add_is_pool... OK
Applying ipam.0014_ipaddress_status_add_deprecated... OK
Applying ipam.0015_global_vlans... OK
Applying ipam.0016_unicode_literals... OK
Applying ipam.0017_ipaddress_roles... OK
Applying ipam.0018_remove_service_uniqueness_constraint... OK
Applying dcim.0023_devicetype_comments... OK
Applying dcim.0024_site_add_contact_fields... OK
Applying dcim.0025_devicetype_add_interface_ordering... OK
Applying dcim.0026_add_rack_reservations... OK
Applying dcim.0027_device_add_site... OK
Applying dcim.0028_device_copy_rack_to_site... OK
Applying dcim.0029_allow_rackless_devices... OK
Applying dcim.0030_interface_add_lag... OK
Applying dcim.0031_regions... OK
Applying dcim.0032_device_increase_name_length... OK
Applying dcim.0033_rackreservation_rack_editable... OK
Applying dcim.0034_rename_module_to_inventoryitem... OK
Applying dcim.0035_device_expand_status_choices... OK
Applying dcim.0036_add_ff_juniper_vcp... OK
Applying dcim.0037_unicode_literals... OK
Applying dcim.0038_wireless_interfaces... OK
Applying dcim.0039_interface_add_enabled_mtu... OK
Applying dcim.0040_inventoryitem_add_asset_tag_description... OK
Applying dcim.0041_napalm_integration... OK
Applying dcim.0042_interface_ff_10ge_cx4... OK
Applying dcim.0043_device_component_name_lengths... OK
Applying virtualization.0001_virtualization... OK
Applying ipam.0019_virtualization... OK
Applying ipam.0020_ipaddress_add_role_carp... OK
Applying dcim.0044_virtualization... OK
Applying dcim.0045_devicerole_vm_role... OK
Applying dcim.0046_rack_lengthen_facility_id... OK
Applying dcim.0047_more_100ge_form_factors... OK
Applying dcim.0048_rack_serial... OK
Applying dcim.0049_rackreservation_change_user... OK
Applying dcim.0050_interface_vlan_tagging... OK
Applying dcim.0051_rackreservation_tenant... OK
Applying dcim.0052_virtual_chassis... OK
Applying dcim.0053_platform_manufacturer... OK
Applying dcim.0054_site_status_timezone_description... OK
Applying dcim.0055_virtualchassis_ordering... OK
Applying dcim.0056_django2... OK
Applying dcim.0057_tags... OK
Applying dcim.0058_relax_rack_naming_constraints... OK
Applying dcim.0059_site_latitude_longitude... OK
Applying dcim.0060_change_logging... OK
Applying dcim.0061_platform_napalm_args... OK
Applying extras.0014_configcontexts... OK
Applying extras.0015_remove_useraction... OK
Applying extras.0016_exporttemplate_add_cable... OK
Applying extras.0017_exporttemplate_mime_type_length... OK
Applying extras.0018_exporttemplate_add_jinja2... OK
Applying extras.0019_tag_taggeditem... OK
Applying dcim.0062_interface_mtu... OK
Applying dcim.0063_device_local_context_data... OK
Applying dcim.0064_remove_platform_rpc_client... OK
Applying dcim.0065_front_rear_ports... OK
Applying circuits.0001_initial... OK
Applying circuits.0002_auto_20160622_1821... OK
Applying circuits.0003_provider_32bit_asn_support... OK
Applying circuits.0004_circuit_add_tenant... OK
Applying circuits.0005_circuit_add_upstream_speed... OK
Applying circuits.0006_terminations... OK
Applying dcim.0066_cables...
Adding console connections... 0 cables created
Adding power connections... 0 cables created
Adding interface connections... 0 cables created
OK
Applying circuits.0007_circuit_add_description... OK
Applying circuits.0008_circuittermination_interface_protect_on_delete... OK
Applying circuits.0009_unicode_literals... OK
Applying circuits.0010_circuit_status... OK
Applying circuits.0011_tags... OK
Applying circuits.0012_change_logging... OK
Applying circuits.0013_cables...
Adding circuit terminations... 0 cables created
OK
Applying circuits.0014_circuittermination_description... OK
Applying circuits.0015_custom_tag_models... OK
Applying circuits.0016_3569_circuit_fields... OK
Applying circuits.0017_circuittype_description... OK
Applying circuits.0018_standardize_description... OK
Applying circuits.0019_nullbooleanfield_to_booleanfield... OK
Applying virtualization.0002_virtualmachine_add_status... OK
Applying virtualization.0003_cluster_add_site... OK
Applying virtualization.0004_virtualmachine_add_role... OK
Applying virtualization.0005_django2... OK
Applying virtualization.0006_tags... OK
Applying virtualization.0007_change_logging... OK
Applying virtualization.0008_virtualmachine_local_context_data... OK
Applying virtualization.0009_custom_tag_models... OK
Applying virtualization.0010_cluster_add_tenant... OK
Applying virtualization.0011_3569_virtualmachine_fields... OK
Applying tenancy.0006_custom_tag_models... OK
Applying virtualization.0012_vm_name_nonunique... OK
Applying virtualization.0013_deterministic_ordering... OK
Applying virtualization.0014_standardize_description... OK
Applying ipam.0021_vrf_ordering... OK
Applying ipam.0022_tags... OK
Applying ipam.0023_change_logging... OK
Applying ipam.0024_vrf_allow_null_rd... OK
Applying ipam.0025_custom_tag_models... OK
Applying ipam.0026_prefix_ordering_vrf_nulls_first... OK
Applying ipam.0027_ipaddress_add_dns_name... OK
Applying ipam.0028_3569_prefix_fields... OK
Applying ipam.0029_3569_ipaddress_fields... OK
Applying ipam.0030_3569_vlan_fields... OK
Applying ipam.0031_3569_service_fields... OK
Applying ipam.0032_role_description... OK
Applying ipam.0033_deterministic_ordering... OK
Applying ipam.0034_fix_ipaddress_status_dhcp... OK
Applying ipam.0035_drop_ip_family... OK
Applying ipam.0036_standardize_description... OK
Applying secrets.0001_initial... OK
Applying secrets.0002_userkey_add_session_key... OK
Applying secrets.0003_unicode_literals... OK
Applying secrets.0004_tags... OK
Applying secrets.0005_change_logging... OK
Applying secrets.0006_custom_tag_models... OK
Applying dcim.0067_device_type_remove_qualifiers... OK
Applying dcim.0068_rack_new_fields... OK
Applying dcim.0069_deprecate_nullablecharfield... OK
Applying dcim.0070_custom_tag_models... OK
Applying extras.0020_tag_data... OK
Applying extras.0021_add_color_comments_changelog_to_tag... OK
Applying extras.0022_custom_links... OK
Applying extras.0023_fix_tag_sequences... OK
Applying extras.0024_scripts... OK
Applying extras.0025_objectchange_time_index... OK
Applying extras.0026_webhook_ca_file_path... OK
Applying extras.0027_webhook_additional_headers... OK
Applying extras.0028_remove_topology_maps... OK
Applying extras.0029_3569_customfield_fields... OK
Applying extras.0030_3569_objectchange_fields... OK
Applying extras.0031_3569_exporttemplate_fields... OK
Applying extras.0032_3569_webhook_fields... OK
Applying extras.0033_graph_type_template_language... OK
Applying extras.0034_configcontext_tags... OK
Applying extras.0035_deterministic_ordering... OK
Applying extras.0036_contenttype_filters_to_q_objects... OK
Applying extras.0037_configcontexts_clusters... OK
Applying extras.0038_webhook_template_support... OK
Applying extras.0039_update_features_content_types... OK
Applying extras.0040_standardize_description... OK
Applying extras.0041_tag_description... OK
Applying extras.0042_customfield_manager... OK
Applying virtualization.0015_vminterface... OK
Applying ipam.0037_ipaddress_assignment... OK
Applying dcim.0071_device_components_add_description... OK
Applying dcim.0072_powerfeeds... OK
Applying dcim.0073_interface_form_factor_to_type... OK
Applying dcim.0074_increase_field_length_platform_name_slug... OK
Applying dcim.0075_cable_devices...
Updating cable device terminations...
OK
Applying dcim.0076_console_port_types... OK
Applying dcim.0077_power_types... OK
Applying dcim.0078_3569_site_fields... OK
Applying dcim.0079_3569_rack_fields... OK
Applying dcim.0080_3569_devicetype_fields... OK
Applying dcim.0081_3569_device_fields... OK
Applying dcim.0082_3569_interface_fields... OK
Applying virtualization.0016_replicate_interfaces...
Replicating 0 VM interfaces...
Replicating assigned objects...
OK
Applying dcim.0082_3569_port_fields... OK
Applying dcim.0083_3569_cable_fields... OK
Applying dcim.0084_3569_powerfeed_fields... OK
Applying dcim.0085_3569_poweroutlet_fields... OK
Applying dcim.0086_device_name_nonunique... OK
Applying dcim.0087_role_descriptions... OK
Applying dcim.0088_powerfeed_available_power... OK
Applying dcim.0089_deterministic_ordering... OK
Applying dcim.0090_cable_termination_models... OK
Applying dcim.0091_interface_type_other... OK
Applying dcim.0092_fix_rack_outer_unit... OK
Applying dcim.0093_device_component_ordering... OK
Applying dcim.0094_device_component_template_ordering... OK
Applying dcim.0095_primary_model_ordering... OK
Applying dcim.0096_interface_ordering... OK
Applying dcim.0097_interfacetemplate_type_other... OK
Applying dcim.0098_devicetype_images... OK
Applying dcim.0099_powerfeed_negative_voltage... OK
Applying dcim.0100_mptt_remove_indexes... OK
Applying dcim.0101_nested_rackgroups... OK
Applying dcim.0102_nested_rackgroups_rebuild... OK
Applying dcim.0103_standardize_description... OK
Applying dcim.0104_correct_infiniband_types... OK
Applying dcim.0105_interface_name_collation... OK
Applying dcim.0106_role_default_color... OK
Applying dcim.0107_component_labels... OK
Applying dcim.0108_add_tags... OK
Applying dcim.0109_interface_remove_vm... OK
Applying dcim.0110_virtualchassis_name... OK
Applying dcim.0111_component_template_description... OK
Applying dcim.0112_standardize_components... OK
Applying dcim.0113_nullbooleanfield_to_booleanfield... OK
Applying dcim.0114_update_jsonfield... OK
Applying dcim.0115_rackreservation_order... OK
Applying dcim.0116_rearport_max_positions... OK
Applying extras.0043_report... OK
Applying extras.0044_jobresult... OK
Applying extras.0045_configcontext_changelog... OK
Applying extras.0046_update_jsonfield... OK
Applying extras.0047_tag_ordering... OK
Applying users.0001_api_tokens... OK
Applying users.0002_unicode_literals... OK
Applying users.0003_token_permissions... OK
Applying users.0004_standardize_description... OK
Applying users.0005_userconfig... OK
Applying users.0006_create_userconfigs... OK
Applying users.0007_proxy_group_user... OK
Applying users.0008_objectpermission... OK
Applying users.0009_replicate_permissions... OK
Applying secrets.0007_secretrole_description... OK
Applying secrets.0008_standardize_description... OK
Applying secrets.0009_secretrole_drop_users_groups... OK
Applying sessions.0001_initial... OK
Applying taggit.0003_taggeditem_add_unique_index... OK
Applying tenancy.0007_nested_tenantgroups... OK
Applying tenancy.0008_nested_tenantgroups_rebuild... OK
Applying tenancy.0009_standardize_description... OK
Applying users.0010_update_jsonfield... OK
Applying virtualization.0017_update_jsonfield... OK

Crie seu usuário para o acesso web:

# python3 manage.py createsuperuser 
Username (leave blank to use 'root'): remontti
Email address: noc@remontti.com.br
Password: sua_senha
Password (again): sua_senha
Superuser created successfully
# python3 manage.py collectstatic
979 static files copied to '/opt/netbox/netbox/static'.

Vamos preparar nosso serviço web

# pip3 install gunicorn
# cat <<EOF | tee /opt/netbox/gunicorn_config.py
command = '/usr/local/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'
EOF
# cat <<EOF | tee /etc/supervisor/conf.d/netbox.conf
[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data
EOF
# systemctl restart supervisor

Caso você não queira ter certificado e nem vai usar um domínio pode pular esta parte...
Vou instalar o letsencrypt para gerar nosso certificado (pode preencher como quiser as perguntas). Caso queira instalar com um certificado "privado/invalido" veja aqui.

# apt install letsencrypt python-certbot-nginx
# systemctl stop nginx
# letsencrypt --authenticator standalone --installer nginx -d netbox.remontti.com.br

Crie um script para renomar o certificado automaticamente

# vim  /etc/renovassl.sh

Adicione:

#!/bin/bash
# Para o nginx 
/usr/bin/systemctl stop nginx
# Aguarda 10 seg (tempo do nginx parar) 
sleep 10
# Renova o certificado
/usr/bin/certbot -q renew
# Aguarda o certificado renovar
sleep 30
# Restarta o nginx 
/usr/bin/systemctl restart nginx

Altere as permissões para executa-lo e adicione o scrip ao cron para ser rodado todo dia 1º do mês.

# chmod +x /etc/renovassl.sh
# echo '00 00   1 * *   root    /etc/renovassl.sh' >> /etc/crontab
# systemctl restart cron

Removemos o arquivo defautl do nosso servidor web (nginx), e iremos criar um novo, estou usando um domínio, caso esteja utilizando com IP privado apenas coloque um underline ou sei próprio IP.

# rm /etc/nginx/sites-enabled/default
# vim /etc/nginx/sites-available/netbox.conf

Ajuste o diretório do seu certificado.

server {
listen 443 ssl;
# Quiser limitar o acesso apenas a seus IPs
#allow  192.168.1.0/24;
#allow  2001:0db8::/32;
#deny   all;
#error_page  403   http://www.remontti.com.br;
server_name netbox.remontti.com.br;
ssl_certificate /etc/letsencrypt/live/netbox.remontti.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/netbox.remontti.com.br/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://localhost:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name netbox.remontti.com.br;
return 301 https://$host$request_uri;
}

Ou a versão simplificada sem certificado, usando o seu endereço IP, se ainda assim deseja só usar o domínios basta colocar no lugar no IP.

server {
listen 80;
server_name 192.168.0.2;
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://localhost:8001;
}
}

Remova assinatura do nginx (ninguém precisa saber a versão!)

# sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf

Verifique se seu arquivo de configuração do nginx está correto:

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

Crie o atalho do arquivo de configuração dentro do diretório enabled para que o mesmo seja carregado ao restart o nginx.

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

Agora acesse seu domínios "https://netbox.remontti.com.br/" ou "https://ip/" e entre com sua senha criada anteriormente.

🙂

PLUGINs

Netbox Topology Views

https://github.com/mattieserver/netbox-topology-views

Netbox QR Code

https://github.com/k01ek/netbox-qrcode

# pip install netbox-topology-views
# pip install netbox-qrcode
# echo netbox-topology-views >> /opt/netbox/local_requirements.txt
# echo netbox-qrcode >> /opt/netbox/local_requirements.txt
# vim /opt/netbox/netbox/netbox/configuration.py

Adicione:

PLUGINS = ['netbox_topology_views','netbox_qrcode']
PLUGINS_CONFIG = {
'netbox_topology_views': {
'device_img': 'router,switch,firewall',
'preselected_device_roles': 'Router, Firewall',
'allow_coordinates_saving': False,
'ignore_cable_type': '',
},
'netbox_qrcode': {
'with_text': True,
'text_fields': ['name', 'serial'],
'font': 'ArialMT',
'custom_text': 'Remontti\ntel.00-000-000-000',
'qr_version': 1,
'qr_error_correction': 0,
'qr_box_size': 4,
'qr_border': 4,
'cable': None,
'rack': {
'text_fields': [
'site',
'name',
'tenant'
]
},
'device': {
'text_fields': [
'name',
'serial',
'tenant',
'primary_ip'
]
}
}
}

Copiamos os arquivos empacotados estáticos e reiniciamos o supervisor (netbox).

# python3 /opt/netbox/netbox/manage.py collectstatic --no-input
# systemctl restart supervisor

COMO ATUALIZAR PARA FUTURAS VERSÕES

Procure pela ultima atualização: https://github.com/netbox-community/netbox/releases, e copie a url da versão tar.gz, no exemplo estou atualizando para versão 2.10.8, então preste atenção no nome dos diretórios.
Vou baixar e extrair:

# cd /tmp/
# wget https://github.com/netbox-community/netbox/archive/refs/tags/v2.10.8.tar.gz
# tar -xzf v2.10.8.tar.gz

Copie os arquivos de configuração para a versão mais nova, preste atenção nos nomes de diretórios que contém a versãi no ex. "2.10.8" para a versão que esteja atualizando.

# cp /opt/netbox/netbox/netbox/configuration.py /tmp/netbox-2.10.8/netbox/netbox/
# cp /opt/netbox/local_requirements.txt /tmp/netbox-2.10.8/
# cp /opt/netbox/gunicorn_config.py /tmp/netbox-2.10.8/

Copie os arquivos que você enviou, exemplo fotos etc.

# cp -pr /opt/netbox/netbox/media/ /tmp/netbox-2.10.8/netbox/

Além disso, certifique-se de copiar ou vincular quaisquer scripts e relatórios personalizados que você fez.

# cp -r /opt/netbox/netbox/scripts /opt/netbox/netbox/
# cp -r /opt/netbox/netbox/reports /opt/netbox/netbox/

Renomeia o antigo diretório (Não vamos remover, pois se der ruim basta volta-lo)

# mv /opt/netbox /opt/netbox_`date +%Y%m%d`

Movemos nosso diretório atualizado para /opt/netbox.

# mv /tmp/netbox-2.10.8/ /opt/netbox

Finalizamos copiando os arquivos empacotados estáticos e reiniciamos o supervisor (netbox).

# python3 /opt/netbox/netbox/manage.py collectstatic --no-input
# systemctl restart supervisor

Espero que tenha gostado!

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Participe do canal no telegram para ficar atualizado sempre que publicar um novo tutorial.

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Fonte:
https://netbox.readthedocs.io/en/stable/installation

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

14 Resultados

  1. Fábio Sosnoski disse:

    Instalei em uma VM só pra testar a ferramenta, sem certificado, sem erros durante o processo, inclusive os plugins. Mas após o primeiro login ele dá um erro 403 e quer um certificado…

  2. Felipe Victor disse:

    Não estou conseguindo instalar os pacotes está dando os seguintes erros:

    apt install vim net-tools wget redis-server supervisor\
    > postgresql-contrib postgresql libpq-dev gcc\
    > python-minimal python3 python3-pip python3-venv\
    > python3-dev build-essential libxml2-dev libxslt1-dev\
    > libffi-dev libssl-dev zlib1g-dev graphviz\
    > nginx redis python3-setuptools
    Lendo listas de pacotes… Pronto
    Construindo árvore de dependências
    Lendo informação de estado… Pronto
    E: Impossível encontrar o pacote supervisorpostgresql-contrib
    E: Impossível encontrar o pacote gccpython-minimal
    E: Impossível encontrar o pacote python3-venvpython3-dev
    E: Impossível encontrar o pacote libxslt1-devlibffi-dev
    E: Impossível encontrar o pacote graphviznginx

  3. Eder Cas disse:

    No comando para gerar a SECRET_KEY gera esse erro:

  4. Antenor Valentim disse:

    Parabens Pelo Tutorial….. Tudo 100%…. Muito Obrigado mesmo, agora com a chegada do IPv6… vai ser de grande valia.

  5. Albuquerque disse:

    Boa noite!

    Parabéns pelo excelente material para estudos e aplicação desta ferramenta.

    Minha dúvida mesmo seguindo tutorial arrisca apresentou o seguinte erro. Alguém poderia me ajudar . Abaixo os erros.
    root@srv-netbox:/opt/netbox/netbox# python3 manage.py migrate
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python3.7/dist-packages/django/core/management/__init__.py”, line 401, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python3.7/dist-packages/django/core/management/__init__.py”, line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python3.7/dist-packages/django/core/management/base.py”, line 330, in run_from_argv
    self.execute(*args, **cmd_options)
    File “/usr/local/lib/python3.7/dist-packages/django/core/management/base.py”, line 371, in execute
    output = self.handle(*args, **options)
    File “/usr/local/lib/python3.7/dist-packages/django/core/management/base.py”, line 82, in wrapped
    saved_locale = translation.get_language()
    File “/usr/local/lib/python3.7/dist-packages/django/utils/translation/__init__.py”, line 254, in get_language
    return _trans.get_language()
    File “/usr/local/lib/python3.7/dist-packages/django/utils/translation/__init__.py”, line 57, in __getattr__
    if settings.USE_I18N:
    File “/usr/local/lib/python3.7/dist-packages/django/conf/__init__.py”, line 82, in __getattr__
    self._setup(name)
    File “/usr/local/lib/python3.7/dist-packages/django/conf/__init__.py”, line 69, in _setup
    self._wrapped = Settings(settings_module)
    File “/usr/local/lib/python3.7/dist-packages/django/conf/__init__.py”, line 189, in __init__
    raise ImproperlyConfigured(“The SECRET_KEY setting must not be empty.”)
    django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

  6. Claudio P. Costa - IndioX disse:

    Mano vc ouviu eu falando alto aqui em casa kkkk!
    Essa semana tava seguindo uns artigos defasados e comentei “pô no Remontti poderia ter um artigo resumindo a instalação… ” tive que refazer a instalação e seguir a doc oficial pois tinha mudanças nas releases mais recente… qdo terminei e coloquei no ar, no dia seguinte vc me publica o artigo! kkkk

  7. ANDRE CARLOS GROTH disse:

    Parabéns pelo conteúdo, vou usar pra documentar a rede na empresa.

  8. Delvan disse:

    Uma dúvida…
    Qual seria a melhor opção? phpIPAM ou Netbox?

  9. Rafael Barboza disse:

    Muito bom Rudimar!
    Já utilizo a algum tempo, realmente salva quando não se tem nada.
    Uma pergunta, tentei por algumas vezes adicionar os Plugins Netbox-QRcode e Netbox-Topology-Viewer e sempre dão erro. Existe algum segredo para tal?

  1. 5 de abril de 2022

    […] Como instalar Netbox, ferramenta grátis para documentar sua … […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *