前言
之前接了个单子做一个机房项目,遂大概了解了一下市面上的机房、设备管理程序,思来想去最终选择了NetMap这玩意儿,好用,且功能不算冗杂和沉重,而由于自定义化的安装较为复杂,在此记录以备后查。
安装环境介绍
使用Ubuntu 22.04 Server(Minimal) 进行安装
使用Python 3.9
使用PostgreSQL 14.10
使用Redis 5
不使用Docker以方便后续的代码修改。
安装和配置 PostgreSQL 数据库
安装
为了可扩展性和数据的可迁移性,在这里使用apt安装postgreSQL后重新定义数据存储目录,首先通过apt安装
sudo apt update
sudo apt install postgresql -y
在继续之前,检查自动安装的版本,NetBox需要PostgreSQL 12 或更新:
psql -V
# psql (PostgreSQL) 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1)
可选步骤:迁移数据库存储目录
首先关闭数据库服务
sudo systemctl stop postgresql
在当前版本,数据库配置文件存放在/etc/postgresql/14/main/postgresql.conf
sudo apt install nano -y
sudo nano /etc/postgresql/14/main/postgresql.conf
修改以下键值:
data_directory = '/mnt/data/database/postgresql/main' #更改到你要存储的目标位置
根据第三方文档的说法,pgsql默认情况下的性能不算特别好,netbox页面展开会卡顿,需要根据自己的设备的配置和情况对配置文件做出最优修改,修改方式参考这里
之后将更改配置文件前的数据库迁移回来
重要: 不迁移回来会导致pgsql无法启动,但service仍旧正常重启,原因目前未深究
sudo cp -r /var/lib/postgresql/14/ /mnt/data/database/postgresql/
重新启动pgsql
sudo systemctl restart postgresql
sudo pg_isready
#/var/run/postgresql:5432 - accepting connections
创建数据库
创建netbox所需要的数据库,并设置密码和权限
sudo -u postgres psql
在输入这个命令之后,键入以下命令行执行数据库创建和权限管理,注意每行有一个;
符号结尾。
CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD '你要设置的密码';
ALTER DATABASE netbox OWNER TO netbox;
#下面两行命令是 PostgreSQL 15 或更新的版本需要输入的
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
在输入完成后,按 \q
并回车退出数据库命令终端,并使用以下命令测试账户可用性
psql --username netbox --password --host localhost netbox
#Password:
#psql (14.10 (Ubuntu 14.10-0ubuntu0.22.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
Redis安装
Redis是一个高性能的K-V数据库,通常用于高速缓存,在Ubuntu上的安装也非常简单
sudo apt install -y redis-server
测试查看Redis版本
redis-server -v
#Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=a3fdef44459b3ad6
正常情况下,你可以通过/etc/redis/redis.conf
或者/etc/redis.conf
去修改Redis的更多配置,不过通常情况下以及在本实例测试中不修改就可以,所以此处省略,深入配置可以参考:这里
NetBox安装
终于来到高难度的部分,Netbox编写语言是Python,所以要求 Python 3.8, 3.9, 3.10 或 3.11,首先安装Python
安装Python
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
在继续之前,检查下Python所安装的版本是否正确
python3 -V
#Python 3.10.12
下载NetBox
下载有两种方式可选,一种是官方发布的Release包,一种是直接下载官方仓库,两种区别不大,这里直接下载官方仓库
sudo mkdir -p /opt/netbox/
cd /opt/netbox/
如果你的系统上没有安装Git
,那么首先先安装下
sudo apt install -y git
克隆官方仓库到/opt/netbox/
sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
创建NetBox系统账户
由于NetBox有一部分功能依赖操作系统,所以需要创建几个系统账户
sudo adduser --system --group netbox
sudo chown --recursive netbox /opt/netbox/netbox/media/
sudo chown --recursive netbox /opt/netbox/netbox/reports/
sudo chown --recursive netbox /opt/netbox/netbox/scripts/
更改NetBox配置文件
cd /opt/netbox/netbox/netbox/
sudo cp configuration_example.py configuration.py
sudo nano /opt/netbox/netbox/netbox/configuration.py
NetBox配置文件详细解释参考这里,但对于全新安装,需要调整的配置只有以下几项
ALLOWED_HOSTS
DATABASE
REDIS
SECRET_KEY
可选步骤:本地化和时区
在更改配置文件时,可以更改以下键值以实现些许本地化,具体来讲就是少部分配置和菜单可以以中文显示(B用没有)
ENABLE_LOCALIZATION = True
# 开启本地化,让一些选项中文。
TIME_ZONE = 'Asia/Shanghai'
# 配置时区
PAGINATE_COUNT = 60
# 配置查看的时候默认分页数量
ALLOWED_HOSTS
该项目控制可以访问该NetBox主机的列表,必须至少指定一个,但注意这并不会限制访问NetBox主机的位置,它只是简单检查http标头。
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
如果你不确定该设置成什么,那么也可以简单设置一个通配符号*
以允许任何来源标头
ALLOWED_HOSTS = ['*']
DATABASE
该项目定义Pgsql的基本信息,NetBox需要这些信息才能够连接到数据库并保存信息,如果你的pgsql实例运行在另一个主机,记得相应改动对应的值
DATABASE = {
'NAME': 'netbox', # 数据库名称,在本文默认 netbox
'USER': 'netbox', # 数据库用户名,在本文默认 netbox
'PASSWORD': 'J5brHrAXFLQSif0K', # 你设置的数据库密码
'HOST': 'localhost', # 数据库主机地址
'PORT': '', # 数据库主机端口(可选,留空使用默认端口)
'CONN_MAX_AGE': 300, # 最大连接存活时间(秒)
}
REDIS
Redis在本项目中用来做高速缓存,它本身并不需要多少配置,下面的值应该足以满足大多数安装的需要,如果你有高级配置需求,请参阅:NetBoxRedis配置说明
REDIS = {
'tasks': {
'HOST': 'localhost', # Redis 服务器
'PORT': 6379, # Redis 端口
'PASSWORD': '', # Redis 密码(可选)
'DATABASE': 0, # 数据库ID,Redis一共16个编号可选
'SSL': False, # 启用SSL (可选)
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1, # 唯一编号,不能与上一个编号重复
'SSL': False,
}
}
SECRET_KEY
这是一个伪随机字符串,用于帮助加密密码和cookie。此处定义的密钥不应在配置文件之外共享。SECRET_KEY可以随时更改,而不影响存储的数据,但请注意,这样做将使所有已经登录的用户退出登录状态,SECRET_KEY 长度必须至少 50 个字符,并且应包含字母、数字和符号的组合,如果你不知道写什么合适,也可以用netbox的官方脚本生成一个
cd /opt/netbox/netbox/netbox/
sudo -u netbox python3 ../generate_secret_key.py
开始NetBox安装
配置 NetBox 后,我们就可以开始实际安装了。运行打包的升级脚本 ( upgrade.sh) 来执行以下操作:
- 创建Python虚拟环境
- 安装所有必需的 Python 包
- 运行数据库架构迁移
- 在本地构建资料(供离线使用)
- 聚合磁盘上的静态资源文件
sudo -u netbox pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#配置安装时使用清华源进行安装以提升速度(可选)
sudo -u netbox /opt/netbox/upgrade.sh
#执行安装(耗时约3-6分钟,取决于网络速度)
#出现以下字符标志着安装完成
#Completed.
#Removing expired user sessions (python3 netbox/manage.py clearsessions)...
#Clearing the cache (python3 netbox/manage.py clearcache)...
#Cache has been cleared.
#Upgrade complete! Don't forget to restart the NetBox services:
# > sudo systemctl restart netbox netbox-rq
创建管理员账号
# 进入虚拟环境
source /opt/netbox/venv/bin/activate
#访问脚本文件
cd /opt/netbox/netbox
python3 manage.py createsuperuser
# 创建管理员 olderfox,输入邮箱和两遍密码,密码不显示
#Username (leave blank to use 'root'): olderfox
#Email address: me@olderfox.com
#Password:
#Password (again):
#Superuser created successfully.
创建定时任务,有关定时任务的更多信息,请参考这里
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
启动Gunicorn HTTP服务器
sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
# 复制创建配置文件
sudo -u netbox vim /opt/netbox/gunicorn.py
# 可修改配置文件,更改监听端口,默认8001
sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
# 复制到系统服务
sudo systemctl daemon-reload
# 重新加载系统服务
sudo systemctl enable --now netbox netbox-rq
# 配置启动并开机启动
sudo systemctl status netbox
sudo systemctl status netbox-rq
# 查看状态
配置Nginx 作为反向代理
这里不再赘述,我用宝塔的,不过还是扔一份配置文件在这里
# 创建配置文件,注意修改netbox.olderfox.com 为自己的域名。反向代理到8001端口
server {
listen 80;
# CHANGE THIS TO YOUR SERVER'S NAME
server_name netbox.olderfox.com;
client_max_body_size 25m;
fastcgi_connect_timeout 1200s;
fastcgi_send_timeout 1200s;
fastcgi_read_timeout 1200s;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
systemctl enable --now nginx
# 配置启动并开机启动
systemctl status nginx
# 查看状态
至此,安装完成!
汉化请参考:这里
我做了全面汉化,答主可以看看。https://songxwn.com/netbox4-CN/