• 基于 Ubuntu 20.04 系统 部署 NetBox


    提示:请注意 信息的时效性、环境的匹配度。侵删!


    前言

      NetBox 是一个集 IP地址管理工具和网络设施基础结构管理的工具。适合数据中心、园区网、中小企业等使用。


    Netbox 官网:
      https://github.com/netbox-community/netbox




    `提示:以下是本篇文章正文内容,下面案例可供参考。建议初次安装参考文中的路径配置。`

    NetBox 安装


    一、环境

    • Ubuntu20.04 LTS
    • 2核 4G
    • PostgreSQL
    • > v10
    • Redis
    • > 4.0
    • NetBox
    • > v3
    • Python
    • > 3.8
    • Git



    二、安装


    1.安装 PostgreSQL

    # 安装 
    sudo apt install -y postgresql
    
    # 验证
    user@ubuntu:~$ psql -V
    psql (PostgreSQL) 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)
    
    # 配置数据库并设置开机自启
    user@ubuntu:~$ sudo systemctl start postgresql  && sudo systemctl enable postgresql
    
    # 创建数据库
    user@ubuntu:~$ sudo -u postgres psql    # 进入数据库
    # 建库授权
    CREATE DATABASE netbox;
    CREATE USER netbox WITH PASSWORD 'passwork';
    GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
    # 退出
    \q
    
    # 验证数据库状态
    user@ubuntu:~$  psql --username netbox --password --host localhost netbox
    Password:    # 密码输入上面的 password
    psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    netbox=> \conninfo
    You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    netbox=> \q
    user@ubuntu:~$ 
    
    
    • 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

    Netbox数据库的 备份导出 和 导入恢复 方法:

    # 导入数据,postgres需要密码
    user@ubuntu:~$ su postgres
    postgres@ubuntu:/home/user$ psql netbox < netbox.sql
    
    # 导出数据可以使用 pg_dump
    postgres@ubuntu:/home/user$ pg_dump --username netbox --password --host localhost netbox > netbox.sql
    
    # 记得切换用户 否则会报错:
    user@ubuntu:~$ pg_dump
    pg_dump: error: connection to database "user" failed: FATAL:  role "user" does not exist
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.安装 Redis

    # 安装就行
    user@ubuntu:~$  sudo apt install -y redis-server
    
    # 查看版本信息
    user@ubuntu:~$ redis-server -v
    Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=66bd629f924ac924
    
    # 验证。返回 PONG 表示正常。
    user@ubuntu:~$ redis-cli ping
    PONG
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.安装 Python

    # NetBox v3.0 开始最低支持 Python3.7,从 NetBox v3.2 开始将最低支持 Python3.8。
    
    # 截止20220824 Ubuntu20.04 默认的 Python 版本为 3.8.10,有可能会仍缺少一些相关的依赖包。按需安装。
    
    user@ubuntu:~$ sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.安装 Netbox

    # 可以通过 wget 或者 git 来下载。
    user@ubuntu:~$ sudo mkdir -p /opt/netbox/ && cd /opt/netbox/
    
    user@ubuntu:~$ sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
    Cloning into '.'...
    remote: Enumerating objects: 1173, done.
    remote: Counting objects: 100% (1173/1173), done.
    remote: Compressing objects: 100% (1097/1097), done.
    remote: Total 1173 (delta 210), reused 427 (delta 49), pack-reused 0
    Receiving objects: 100% (1173/1173), 4.31 MiB | 1.90 MiB/s, done.
    Resolving deltas: 100% (210/210), done.
    user@ubuntu:~$
    
    # 创建系统用户 netbox.WSGI 和 HTTP 服务配置的运行需要它。
    user@ubuntu:~$ sudo adduser --system --group netbox
    
    # 将 /opt/netbox/netbox/media/ 目录设置成 netbox 用户权限,这个文件夹下是前端页面
    user@ubuntu:~$ sudo chown --recursive netbox /opt/netbox/netbox/media/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.修改 NetBox 配置文件

    # 复制一份默认的配置文件:
    user@ubuntu:~$ cd /opt/netbox/netbox/netbox/ && sudo cp configuration_example.py configuration.py
    
    # 生成一个密钥,用来维护 HTTP 用户会话状态,配置文件里面要用到:
    user@ubuntu:/opt/netbox/netbox/netbox$  python3 ../generate_secret_key.py 
    TWRBswpBFZfDW9Xj3QmOowxU3-uMMD)xx9A0cZsz(uKw500YOx
    
    # 最小化配置运行如下:
    user@ubuntu:/opt/netbox/netbox/netbox$ sudo vim  configuration.py
    # :set number显示行号, 修改:
    ALLOWED_HOSTS = ['*']  # 11行;允许所有客户端都可以访问前端页面
    
    #  15~22 行。数据库,修改用户名和密码。
    DATABASE = { 
        'NAME': 'netbox',
        'USER': 'netbox', # 修改用户名
        'PASSWORD': 'VIP@xdai.vip',  # 修改密码
        'HOST': 'localhost',
        'PORT': '',
        'CONN_MAX_AGE': 300,
    }
    
    # 60 行
    SECRET_KEY = 'lKCyYG-q5qW0&3zK=*U9%Ga@yOzZOwEIz9JhrlIIdd*CXE0b#z'
    
    # 203 行。 修改时区为 Asia/Shanghai
    TIME_ZONE = 'Asia/Shanghai'
    
    # 不同时期的配置文件不太相同,请根据最新的配置文件进行修改,以上仅供参考
    
    
    • 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

    5.安装其他可选的插件或组件

    NetBox 支持插件和可选软件包。

    组件可以写在 NetBox 根目录的 local_requirements.txt 文件中, 第一次初始化安装时 NetBox 会自动进行安装;后期也可以手动安装。

    插件:
        官方文档

    官方组件:

    user@ubuntu:/opt/netbox/netbox/netbox$ sudo sh -c "echo 'napalm' >> /opt/netbox/local_requirements.txt"
    user@ubuntu:/opt/netbox/netbox/netbox$ sudo sh -c "echo 'napalm-h3c-comware' >> /opt/netbox/local_requirements.txt"
    
    • 1
    • 2
    • django-storages 用于连接远程文件存储(默认是使用本地存储)

    6.运行升级脚本

    以上基础环境所依赖的软件已经部署完成,运行 upgrade.sh 初始化 Netbox,它会完成以下操作:

    • 创建 Python 的虚拟环境,后面许多配置都在虚拟环境中进行。
    • 安装 Netbox所需的 Python 包(根目录下的requirements.txt 和 local_requirements.txt)。
    • 初始化 Django 数据,进行数据库的迁移。
    • 本地生成离线文档
    • 生成静态资源文件

    默认的 PIP国外源 可能会很慢,参考 pip 国内加速

    # 升级
    user@ubuntu:~$ sudo /opt/netbox/upgrade.sh
    Upgrade complete! Don't forget to restart the NetBox services:
    
    # 重启NetBox,第一次安装可以跳过。
    user@ubuntu:~$ sudo systemctl restart netbox netbox-rq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    进入虚拟环境配置Netbox

    # 进入虚拟环境,退出直接 deactivate
    user@ubuntu:~$ source /opt/netbox/venv/bin/activate
    
    # 创建 django 管理员用户, 邮箱可以为空。
    # 若是前面已经恢复过数据库这里可以跳过。
    (venv)user@ubuntu:/opt/netbox/netbox$ python3 manage.py createsuperuser
    Username (leave blank to use 'user'): admin
    Email address:       
    Password: 
    Password (again): 
    Superuser created successfully.
    
    # 设置自动清理任务
    # 注意脚本的路径,如果 NetBox 安装在其他路径,需要使用正确的绝对路径。
    # housekeeping 管理命令用来处理一些定期清理任务,例如清除旧会话和过期的更改记录。
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6.Python试运行Netbox

    # 运行Netbox 
    (venv)user@ubuntu:/opt/netbox/netbox$ python3 manage.py runserver 0.0.0.0:8000 --insecure
    
    # 若是无法访问,则检查 防火墙 或者 iptables 设置中是否放行了 8000端口
    # 或者暂时关闭 防火墙,直到再次重启启动linux
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo systemctl stop firewalld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Netbox 试运行正常状态,验证完毕后 Ctrl + C 停止服务:
    在这里插入图片描述

    7.使用 Gunicorn 运行 Django 服务,并配置Nginx服务

    运行 Django 服务

    # 将Gunicorn配置复制到 /opt/netbox 中,这里使用默认配置。若自定义配置,则 Nginx配置也需要修改。
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
    
    # 将Netbox 默认的systemd服务文件,复制到系统目录下
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
    # 加载服务
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo systemctl daemon-reload
    # 启动并设置为开机自启动
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo systemctl start netbox netbox-rq && sudo systemctl enable netbox netbox-rq
    # 查看服务状态
    (venv)user@ubuntu:/opt/netbox/netbox$ systemctl status netbox.service
    
    (venv)user@ubuntu:/opt/netbox/netbox$ 
    # 此时服务应该运行完成,但访问时可能会出现 静态文件 无法加载的问题
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行 Nginx 服务

    # 安装 Nginx
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo apt install -y nginx
    # 复制配置文件到 nginx 目录并覆盖 nginx.conf 。
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/nginx.conf 
    
    # Netbox 的 nginx.conf 配置默认使用 https模式, 更改为http模式。
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo vim /etc/nginx/nginx.conf
    [sudo] password for user: 
    
    worker_processes auto;
    pid /run/nginx.pid;
    
    events {
      worker_connections 65535;
      multi_accept on;
    }
    
    http {
        include mime.types;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
    
        server {
          listen 80;
          server_name  localhost;
    
          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;
          }
        }
    }
    # 若发生跨域错误,则可以将下列注释取消,复制到 location 下
    		#add_header 'Access-Control-Allow-Origin' '*';
            #add_header 'Access-Control-Allow-Credentials' 'true';
            #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            #add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    
    # 重启 Nginx 服务
    (venv)user@ubuntu:/opt/netbox/netbox$ sudo systemctl restart nginx
    (venv)user@ubuntu:/opt/netbox/netbox$ 
    (venv)user@ubuntu:/opt/netbox/netbox$ 
    (venv)user@ubuntu:/opt/netbox/netbox$ 
    (venv)user@ubuntu:/opt/netbox/netbox$ 
    
    • 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

    9.测试,使用 80 端口来访问:

    在这里插入图片描述
    至此,NetBox 搭建完成!



    引用

    • 基于centos7 部署 NetBox3_世界–的博客-CSDN博客_netbox部署
      • https://blog.csdn.net/sedbz/article/details/122988725
    • NetBox 文档
      • https://docs.netbox.dev/en/stable/introduction/
    • 插件 - NetBox 文档
      • https://docs.netbox.dev/en/stable/plugins/
    • netbox 导出 csv 中文乱码、时区修改_某呆啊的博客-CSDN博客
      • https://blog.csdn.net/q965844841qq/article/details/122570724
    • 修改已经导出的文件编码
      • https://blog.csdn.net/q965844841qq/article/details/119065251
    • NetBox 时区修改
      • https://blog.csdn.net/q965844841qq/article/details/122570724
  • 相关阅读:
    人工智能知识
    【每日一题】数据流中的中位数
    【POJ No. 3067】 公路交叉数 Japan
    10 函数的连续性
    华为交换机:STP的详解和试验
    使用Typora编辑markdown上传CSDN时图片大小调整麻烦问题
    DAY43:隐藏通信隧道概述
    ElasticSearch语句中must,must_not,should组合关系,作者有验证脚本(ES为8版本,使用Kibana运行语句)
    IPWorks S/MIME Delphi Edition
    Java & 计算机编码
  • 原文地址:https://blog.csdn.net/sedbz/article/details/126509419