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 “-“.
1 |
su - |
Instale os pacotes que serão requisitos.
1 2 3 4 5 6 |
# 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.
1 |
# su - postgres |
Entre no terminal de comandos do postgres
1 |
$ psql |
Não esqueça de alterar a senha.
1 2 3 4 |
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.
1 |
$ redis-cli ping |
Deve retornar : PONG
Retorne ao usuario root
1 |
exit |
Atualize o pip
1 |
# 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.
1 2 3 4 5 6 |
# 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.
1 |
# /opt/netbox/netbox/generate_secret_key.py |
Ex.:
1 |
T7TE07O$j^Jqf9(*20q8M5kG4%NBIci#gEEn0$wuw*qodT7Lfo |
Copie o arquivo de configuração exemplo para ajustar com suas infomações
1 2 |
# 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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.
1 |
# pip3 install -r /opt/netbox/requirements.txt |
Vamos a instalção do bichão!
1 2 |
# cd /opt/netbox/netbox/ # python3 manage.py migrate |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
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:
1 |
# python3 manage.py createsuperuser |
1 2 3 4 5 |
Username (leave blank to use 'root'): remontti Email address: noc@remontti.com.br Password: sua_senha Password (again): sua_senha Superuser created successfully |
1 |
# python3 manage.py collectstatic |
1 |
979 static files copied to '/opt/netbox/netbox/static'. |
Vamos preparar nosso serviço web
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 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.
1 2 3 |
# 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
1 |
# vim /etc/renovassl.sh |
Adicione:
1 2 3 4 5 6 7 8 9 10 11 |
#!/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.
1 2 3 |
# 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.
1 2 |
# rm /etc/nginx/sites-enabled/default # vim /etc/nginx/sites-available/netbox.conf |
Ajuste o diretório do seu certificado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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!)
1 |
# sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf |
Verifique se seu arquivo de configuração do nginx está correto:
1 |
# nginx -t |
1 2 |
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.
1 2 |
# 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
1 2 3 4 5 |
# 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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).
1 2 |
# 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:
1 2 3 |
# 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.
1 2 3 |
# 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.
1 |
# 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.
1 2 |
# 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)
1 |
# mv /opt/netbox /opt/netbox_`date +%Y%m%d` |
Movemos nosso diretório atualizado para /opt/netbox.
1 |
# mv /tmp/netbox-2.10.8/ /opt/netbox |
Finalizamos copiando os arquivos empacotados estáticos e reiniciamos o supervisor (netbox).
1 2 |
# 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.
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…
Mesmo problema aqui, vou tentar seguir a documentação la no site, mas é praticamente igual
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
No comando para gerar a SECRET_KEY gera esse erro:
Traceback (most recent call last):
File “/opt/netbox/netbox/generate_secret_key.py”, line 3, in
import secrets
ImportError: No module named secrets
Bom dia,
Coloque o python3 na frente do comando: ” python3 /opt/netbox/netbox/generate_secret_key.py “
Parabens Pelo Tutorial….. Tudo 100%…. Muito Obrigado mesmo, agora com a chegada do IPv6… vai ser de grande valia.
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.
Mesmo problema aqui
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
Parabéns pelo conteúdo, vou usar pra documentar a rede na empresa.
Uma dúvida…
Qual seria a melhor opção? phpIPAM ou Netbox?
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?