本教程适用于以下操作系统版本
- Debian 12 (Bookworm)
- Debian 11 (Bullseye)
本页内容
- 先决条件
- 安装依赖项
- 配置 PostgreSQL 服务器
- 配置 Redis 服务器
- 安装 NetBox IRM
- 以 Systemd 服务方式运行 NetBox
- 将 Apache 配置为反向代理
- 结语
NetBox 是一个面向网络自动化与基础设施工程的基础设施资源建模(IRM)平台。最初由 DigitalOcean 团队创建,如今已成为一个基于 Apache 2 许可证发布的开源项目。NetBox 基于 Python Django Web 框架开发,默认使用 PostgreSQL 作为数据库,其安装方式与其他 Python Django Web 应用非常相似。
在本指南中,我们将逐步演示如何在 Debian 12 服务器上安装 NetBox IRM 软件。我们将以 PostgreSQL 作为数据库服务器、以 Apache2 Web 服务器作为反向代理来完成 NetBox 的安装。你还将通过 SSL/TLS 证书来保护你的 NetBox 安装。
先决条件
在继续之前,请确保你已满足以下条件:
- 一台 Debian 12 服务器。
- 具有管理员权限的非 root 用户。
- 一个指向服务器 IP 地址的公共或本地域名。
安装依赖项
NetBox 是一个基于 Python Django Web 框架的 Web 应用,可配合 PostgreSQL 数据库服务器与 Redis 服务器(用于缓存管理)进行安装。
在接下来的步骤中,你将安装 NetBox 所需的依赖项,同时还会安装 Apache2 Web 服务器,它将作为 NetBox 安装的反向代理。
首先,执行以下 apt 命令更新你的 Debian 软件源。
sudo apt update

然后,安装 NetBox IRM 所需的软件包依赖。
sudo apt install apache2 postgresql postgresql-common libpq-dev redis-server git python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev
输入 y 以继续安装依赖项,包括 Apache2 Web 服务器、PostgreSQL 数据库服务器、Redis、Git、Python3 软件包以及一些额外的系统库。

依赖项安装完成后,通过执行以下命令逐一验证各依赖项。
验证 apache2 服务,确保其已启用并正在运行。
sudo systemctl is-enabled apache2
sudo systemctl status apache2
如果 apache2 正在运行且已启用,你应该会看到类似以下的输出:

验证 PostgreSQL 服务,确保其正在运行且已启用。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
PostgreSQL 服务应处于如下的运行并启用状态:

现在验证 Redis 服务,确保其正在运行且已启用。
sudo systemctl is-enabled redis
sudo systemctl status redis
Redis 服务应处于如下的运行并启用状态:

最后,使用以下命令验证 Python 版本。最新版本的 NetBox IRM 支持 Python 3.9、3.10 和 3.11。
python3 --version
你应该会看到你的 Debian 机器上已安装 Python 3.11。

配置 PostgreSQL 服务器
安装完依赖项后,你将创建 NetBox 要使用的新 PostgreSQL 数据库和用户。为此,必须通过 psql 命令行登录到 PostgreSQL 服务器。
执行以下命令登录到 PostgreSQL 服务器。
sudo -u postgres psql
执行以下查询,创建一个密码为 p4ssw0rd 的新用户 netbox。然后,创建一个以 netbox 为属主的新数据库 netboxdb。
CREATE USER netbox LOGIN CREATEDB PASSWORD 'p4ssw0rd';
CREATE DATABASE netboxdb OWNER netbox;

之后,通过执行以下命令验证 PostgreSQL 上的用户与数据库列表。
\l
\du
你应该会看到 PostgreSQL 服务器上已创建数据库 netboxdb 和用户 netbox。

输入 quit 退出 PostgreSQL 服务器。
接下来,使用新用户 netbox 登录到数据库 netboxdb。这将确保用户 netbox 能够连接到数据库 netboxdb。
sudo -u postgres psql --username netbox --password --host localhost netboxdb
连接成功后,使用以下查询验证你的连接。
\conninfo
在以下输出中,你应该会看到已通过用户 netbox 连接到数据库 netboxdb。

再次输入 quit 退出 PostgreSQL 服务器。
配置 Redis 服务器
创建好 PostgreSQL 数据库和用户后,下一步是配置将用作 NetBox 缓存管理的 Redis 服务器。为此,你需要修改 Redis 配置文件 /etc/redis/redis.conf,并通过 redis-cli 验证修改。
使用以下 nano 编辑器命令打开默认的 Redis 配置文件 /etc/redis/redis.conf。
sudo nano /etc/redis/redis.conf
取消注释 requirepass 选项,并填入用于保护 Redis 服务器的密码。
requirepass p4ssw0rdNetBox
完成后,保存并退出文件。
现在执行以下 systemctl 命令重启 redis 服务,使你所做的修改生效。
sudo systemctl restart redis
为确保一切正常,你可以通过 redis-cli 验证 Redis。使用以下 redis-cli 命令访问你的 Redis 服务器。
redis-cli
使用以下 AUTH 查询对 Redis 服务器进行身份验证,并务必修改密码。
AUTH p4ssw0rdNetBox
身份验证成功后,你应该会收到 OK 输出。
现在执行以下 PING 查询,以确保连接成功。
PING
如果成功,你应该会从 Redis 服务器收到 PONG 输出。

安装 NetBox IRM
在下一部分中,你将下载并把 NetBox IRM 安装到你的系统中。你将通过 Git 下载 NetBox 源代码,然后通过修改 NetBox 配置、添加 PostgreSQL 数据库服务器和 Redis 来进行配置,并还会为 NetBox 创建一个管理员用户。
首先,执行以下命令创建一个用于运行 NetBox 安装的新 systemd 用户 netbox。
sudo useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox
通过 git 下载 NetBox IRM 源代码,并将 /opt/netbox 目录的属主更改为用户 netbox。
cd /opt; sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git
sudo chown -R netbox:netbox /opt/netbox

接下来,将工作目录切换到 /opt/netbox,并通过脚本 generate_secret_key.py 生成 NetBox 密钥。请务必复制生成的密钥,它将用于你的 NetBox 安装。
cd /opt/netbox/netbox/netbox
sudo -u netbox python3 ../generate_secret_key.py

将默认配置文件 configuration_example.py 复制为 configuration.py,然后使用以下 nano 编辑器命令打开新文件 configuration.py。
sudo -u netbox cp configuration_example.py configuration.py
sudo -u netbox nano configuration.py
在 ALLOWED_HOSTS 部分,添加你的域名或服务器 IP 地址。
ALLOWED_HOSTS = ['netbox.howtoforge.local', '192.168.10.15']
在 DATABASE 部分填入你的 PostgreSQL 数据库信息,包括数据库名称、用户、密码、主机和端口。
# database configuration
DATABASE = {
'NAME': 'netboxdb', # Database name
'USER': 'netbox', # PostgreSQL username
'PASSWORD': 'p4ssw0rd', # PostgreSQL password
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}
在 REDIS 部分,将你的 Redis 服务器信息填入 tasks 和 caching 两个选项中。
# Redis cache configuration
REDIS = {
'tasks': {
'HOST': 'localhost', # Redis server
'PORT': 6379, # Redis port
'PASSWORD': 'p4ssw0rdNetBox', # Redis password (optional)
'DATABASE': 0, # Database ID
'SSL': False, # Use SSL (optional)
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'PASSWORD': 'p4ssw0rdNetBox',
'DATABASE': 1, # Unique ID for second database
'SSL': False,
}
}
最后,将你的密钥填入 SECRET_KEY 部分。
# Secret key SECRET_KEY = 'ZjYbgz$)j!NnqJcZLR!NB2BCz4(Yyk=o^Xr(1sTIrM)ZyiE%nk'
完成后,保存并退出文件。
接下来,执行 /opt/netbox/upgrade.sh 脚本以启动你的 NetBox 安装。该脚本将创建一个新的 Python 虚拟环境,安装一些 Python 软件包和库,对你的 PostgreSQL 服务器执行数据库迁移,并生成 NetBox 的静态文件。
sudo -u netbox /opt/netbox/upgrade.sh
以下是该过程中你会看到的类似输出。

数据库迁移过程。

生成静态文件过程。

以下是安装完成时的输出。

NetBox 配置完成后,你将创建一个 NetBox 管理员用户。为此,请登录到使用以下命令创建的 Python 虚拟环境。
source /opt/netbox/venv/bin/activate
切换到 /opt/netbox/netbox 目录,并运行 manage.py 脚本以创建 NetBox 管理员用户。
cd /opt/netbox/netbox
python3 manage.py createsuperuser
根据提示,输入你的管理员邮箱地址、用户名和密码。

接下来,再次执行 manage.py 以验证你的 NetBox 安装。通过这种方式,你将在本地 IP 地址的 8000 端口运行 NetBox。
python3 manage.py runserver 0.0.0.0:8000 --insecure

打开你的 Web 浏览器,访问你的服务器 IP 地址加 8000 端口,例如 http://192.168.10.15:8000/。如果安装成功,你应该会看到 NetBox IRM 首页,点击页面右上角的 Login(登录)按钮。

输入你创建的管理员用户名和密码,然后点击 Sign In(登录)。

如果一切顺利,你应该会看到类似如下的 NetBox 仪表盘:

回到你的终端,按 Ctrl+c 终止该进程。
以 Systemd 服务方式运行 NetBox
至此,你已在 Debian 机器上安装了 NetBox IRM。为了方便管理 NetBox,你将把 NetBox 作为 systemd 服务运行,这样你就可以通过 systemctl 工具来控制 NetBox。
将文件 /opt/netbox/contrib/gunicorn.py 复制到 /opt/netbox/gunicorn.py,然后使用以下 nano 编辑器命令打开 gunicorn.py 文件。
sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
sudo -u netbox nano /opt/netbox/gunicorn.py
将 bind 选项修改为以下内容。这将通过 gunicorn 在本地主机的 8001 端口运行你的 NetBox 安装。
bind = '127.0.0.1:8001'
完成后保存并关闭文件。
接下来,将 NetBox 的 systemd 服务文件复制到 /etc/systemd/system/ 目录。这会将服务文件 netbox、netbox-rq 和 netbox-housekeeping 复制到 /etc/systemd/system/ 目录。然后重新加载 systemd 管理器以使新更改生效。
sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload
现在你可以使用以下 systemctl 命令启动并启用 netbox 和 netbox-rq 两个服务。执行命令后,你的 NetBox 安装将以 systemd 服务方式在后台运行。
sudo systemctl start netbox netbox-rq netbox-housekeeping
sudo systemctl enable netbox netbox-rq netbox-housekeeping
最后,使用以下命令验证 netbox 和 netbox-rq 两个服务。
sudo systemctl status netbox
sudo systemctl status netbox-rq
以下输出表明 netbox 服务正在运行且已启用。

以下输出确认 netbox-rq 服务正在运行且已启用。

将 Apache 配置为反向代理
在接下来的步骤中,你将把 Apache2 配置为反向代理。在此之前,请确保你有一个指向服务器 IP 地址的域名,也可以使用本地域名。
如果你使用的是本地域名,可以运行以下 openssl 命令来生成 SSL 证书。如果你使用的是公共域名,可以使用 Certbot 从 Letsencrypt 生成 SSL 证书。
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 \
-nodes -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt -subj "/CN=netbox.howtoforge.local" \
-addext "subjectAltName=DNS:netbox.howtoforge.local,IP:192.168.10.15"
现在将 NetBox 的 Apache 虚拟主机配置示例复制到 /etc/apache2/sites-available/netbox.conf。然后,使用以下 nano 编辑器命令修改文件 /etc/apache2/sites-available/netbox.conf。
sudo cp /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf
sudo nano /etc/apache2/sites-available/netbox.conf
将域名替换为你自己的域名,并将 SSL/TLS 证书路径替换为正确的文件路径。
<VirtualHost *:80> # CHANGE THIS TO YOUR SERVER'S NAME ServerName netbox.howtoforge.local ... </VirtualHost> <VirtualHost *:443> ProxyPreserveHost On # CHANGE THIS TO YOUR SERVER'S NAME ServerName netbox.howtoforge.local SSLEngine on SSLCertificateFile /etc/ssl/certs/netbox.crt SSLCertificateKeyFile /etc/ssl/private/netbox.key ... </VirtualHost>
完成后保存并退出文件。
现在运行以下命令启用 NetBox 所需的 Apache2 模块。
sudo a2enmod ssl proxy proxy_http headers rewrite
之后,执行以下命令激活虚拟主机文件 netbox.conf,并验证你的 Apache2 配置以确保语法正确。
sudo a2ensite netbox.conf
sudo apachectl configtest
如果你的 Apache2 语法正确,你应该会看到 Syntax OK 输出。

现在运行以下命令重启 Apache2 服务,使你所做的修改生效。
sudo systemctl restart apache2
你的 NetBox 安装现在应该可以通过域名访问了。
打开你的 Web 浏览器,访问你的 NetBox 安装的域名,例如 https://netbox.howtoforge.local/。如果一切顺利,你应该会看到类似如下的 NetBox 首页:

登录后,你应该会看到在 Apache2 反向代理下通过域名运行的 NetBox IRM 仪表盘。

结语
综上所述,你已在 Debian 12 服务器上安装了 NetBox IRM,并使用 PostgreSQL 数据库服务器和作为反向代理的 Apache2 Web 服务器。你还通过 SSL/TLS 证书保护了你的 NetBox 安装。