Ubuntu 20.04安装NetBox实战

默认分类 · 2023-12-10 · 194 人浏览

前言

之前接了个单子做一个机房项目,遂大概了解了一下市面上的机房、设备管理程序,思来想去最终选择了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
# 查看状态

至此,安装完成!

汉化请参考:这里