netbox 在 Ubuntu20 系统上的安装记录
NetBox 安装
系统环境:Ubuntu20.04 LTS
安装 PGSQL
- 安装
| 1 | sudo apt install -y postgresql | 
- 查看版本信息:
| 1 | xdai@xdai-vm:~$ psql -V | 
- 启动数据库并设置为开机自启
| 1 | sudo systemctl start postgresql | 
- 创建数据库
| 1 | # 进入数据库 | 
- 验证数据库状态
| 1 | xdai@xdai-vm:~$ psql --username netbox --password --host localhost netbox | 
可以看到数据库已经可以连接,信息为:host "localhost" (address "127.0.0.1") at port "5432"
安装 Redis
- 安装
| 1 | sudo apt install -y redis-server | 
- 查看版本信息
| 1 | xdai@xdai-vm:~$ redis-server -v | 
- 验证服务状态
使用 redis-cli ping 来验证,返回 PONG 表示正常。
| 1 | xdai@xdai-vm:~$ redis-cli ping | 
安装 Netbox
安装 Python
NetBox v3.0 开始最低支持 Python3.7,从 NetBox v3.2 开始将最低支持 Python3.8。
最新的 Ubuntu20.04 默认的 Python 版本为 3.8.10,但是仍缺少一些相关的依赖包。
| 1 | 安装 Python 相关依赖包 | 
下载 NetBox
可以通过 wget 或者 git 来下载。
| 1 | sudo mkdir -p /opt/netbox/ | 
为 NetBox 创建系统用户
创建系统用户的目的是为了将 WSGI 和 HTTP 服务配置为在这个帐户下运行。
| 1 | # 创建系统用户 | 
修改 NetBox 配置文件
复制一份默认的配置文件:
| 1 | cd /opt/netbox/netbox/netbox/ | 
先生成一个密钥,用来维护 HTTP 用户会话状态,配置文件里面要用到:
| 1 | xdai@xdai-vm:/opt/netbox/netbox/netbox$ python3 ../generate_secret_key.py | 
第一次使用的话,最小话的配置文件需要下面几个参数就可以运行:
| 1 | xdai@xdai-vm:/opt/netbox/netbox/netbox$ sudo vim configuration.py | 
- 第 11 行:允许谁可以访问前端页面
| 1 | ALLOWED_HOSTS = ['*'] | 
- 第 15~22 行:数据库,修改用户名和密码为之前设置的信息
| 1 | DATABASE = { | 
- redis 使用默认配置即可 
- 第 60 行:SECRET_KEY 
| 1 | SECRET_KEY = 'lKCyYG-q5qW0&3zK=*U9%Ga@yOzZOwEIz9JhrlIIdd*CXE0b#z' | 
- (可选配置)第 203 行:修改时区,默认是 UTC,需要改为中国标准时间
| 1 | TIME_ZONE = 'Asia/Shanghai' | 
修改完配置文件之后,保存退出。
安装其他可选的组件
NetBox 还支持一些可选的软件包。如果需要,第一次安装的时候这些包必须在 NetBox 根目录的 local_requirements.txt 中写上,这样 NetBox 会自动进行安装;或者也可以后期按需手动安装。
官方提供了两个组件:
- napalm 用于从网络设备获取实时数据
- django-storages 用于连接远程文件存储(默认是使用本地存储)
这里我只需要 napalm 来对接华三的网络设备,所以需要安装两个包:
| 1 | sudo sh -c "echo 'napalm' >> /opt/netbox/local_requirements.txt" | 
运行升级脚本
运行自带的 upgrade.sh 来完成以下操作:
- 创建 Python 虚拟环境 
- 安装所有必需的 Python 包(根目录下 requirements.txt 和 local_requirements.txt 包含的软件) 
- 运行 Django 的数据库迁移 
- 在本地生成离线文档 
- 在磁盘上聚合静态资源文件 
默认 pip 安装会很慢,参考pip 下载加速来设置。
| 1 | sudo /opt/netbox/upgrade.sh | 
安装完成之后会有如下提示:
| 1 | Upgrade complete! Don't forget to restart the NetBox services: | 
如果是升级 NetBox,需要重启一下服务,因为本次是新安装,所以不用关注,继续往下进行。
创建 django 管理员用户
NetBox 没有默认用户,所以需要创建一个超级用户(管理帐户)才能登录 NetBox。
进入到升级脚本创建的 Python 虚拟环境,之后命令行前面都会有个 (venv) 的提示符,表示当前在虚拟环境中:
| 1 | source /opt/netbox/venv/bin/activate | 
创建用户,邮箱可以留空不填。
| 1 | (venv) xdai@xdai-vm:/opt/netbox/netbox/netbox$ cd /opt/netbox/netbox | 
设置自动清理任务
NetBox 包含了 housekeeping 管理命令用来处理一些定期清理任务,例如清除旧会话和过期的更改记录。
尽管可以手动运行此命令来进行清理操作,不过还是建议使用系统的 cron 守护程序或类似其他的定时任务来运行清理任务。
使用以下命令来为脚本创建一个 cron 任务,注意脚本的路径,如果 NetBox 安装在其他路径,需要使用正确的绝对路径。
| 1 | sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping | 
测试运行
到这里 NetBox 已经安装的差不多了,可以使用 django 的命令来测试运行一下,没有问题后再使用 WSGI 来启动服务。
| 1 | python3 manage.py runserver 0.0.0.0:8000 --insecure | 
然后使用浏览器访问这个服务器的 8000 端口测试一下!
如果服务已经正常启动,但是无法访问的话,请自行检查系统的防火墙或者 iptables 设置,放行 8000 端口。
可以正常登录~

一般开发的时候使用这种方式来测试服务的运行情况,实际部署时,需要结合 WSGI 来运行服务,必要时还需要配置 nginx 来使用。
先 crtl + C 停止服务,进行下一步操作。
使用 Gunicorn 运行 Django 服务
NetBox 作为 HTTP 服务器后面的 WSGI 应用程序运行。 NetBox 默认使用的是 gunicorn,但是它不能处理静态文件,还要结合 nginx 才能正常使用,而 uwsgi 支持静态文件的映射。这里先使用官方提供的 gunicorn 来启动服务。
复制一份默认的配置文件:
| 1 | sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py | 
使用默认的配置文件即可,如果修改配置的话,后面 nginx 的配置需要同步修改。
启动 NetBox 服务
NetBox 默认为我们写好了 systemd 的服务文件,复制到系统目录下
| 1 | sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/ | 
这里还要注意:如果 NetBox 安装在其他路径,需要在 service 文件中将几个服务修改为你安装的绝对路径,或者也可以使用软连接,将你的安装路径链接到/opt/netbox/ 目录下,参考以下命令。
| 1 | ln -s Your/NetBox/Root/Path /opt/netbox | 
复制完 service 文件之后,启动服务并设置为开机自启动。
| 1 | sudo systemctl start netbox netbox-rq | 
查看服务状态
| 1 | systemctl status netbox.service | 
使用 nginx 来处理静态文件
上一步已经启动了 web 服务,但是访问时会出现 Static Media Failure 的错误信息,就是因为 gunicorn 不能处理静态文件的映射,需要借助其他方式来实现(uwsgi 支持)。
安装 nginx
| 1 | sudo apt install -y nginx | 
编写配置文件
| 1 | sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox | 
不想使用 https 的话,可以修改 NetBox 提供的默认 nginx 配置文件:
| 1 | # sudo vim /etc/nginx/sites-available/netbox | 
重启 nginx 服务:
| 1 | sudo systemctl restart nginx | 
使用 80 端口来访问:

至此,NetBox 搭建完成!
使用 uwsgi 来启动 NetBox 服务
NetBox 默认使用 gunicorn 作为 WSGI 来提供服务,但是它不能处理静态文件,还要结合 nginx 才能正常使用,而 uwsgi 支持静态文件的映射。这里给出使用方法。
安装 uwsgi
进入到升级脚本创建的 Python 虚拟环境,之后命令行前面都会有个 (venv) 的提示符,表示当前在虚拟环境中:
| 1 | source /opt/netbox/venv/bin/activate | 
编辑配置文件
仅供参考,勿用于生产。
| 1 | # sudo vim /opt/netbox/uwsgi.ini | 
启动服务
| 1 | sudo /opt/netbox/venv/bin/uwsgi --ini /opt/netbox/uwsgi.ini | 
然后就可以通过 8080 端口来访问服务,而且不会报无法找到静态文件的错误。
但是生产环境中还是建议使用专门的 webserver 例如 nginx、apache 来和 WSGI 进行对接。
使用了Gunicorn或者uWSGI,为什么还需要Nginx?
编辑 service 文件
如果想要使用 systemd 来启动 uwsgi 服务,需要编辑一个 service 文件,可以参考官方文档。