如何在 Rocky Linux 9 上安装 NetBox
在此页
- 先决条件
- 安装和配置 PostgreSQL
- 安装和配置 Redis
- 安装 Netbox IRM
- 配置 NetBox IRM
- 将 httpd 设置为反向代理
- 使用 SSL Letsencrypt 保护 NetBox IRM
- 登录到 NetBox
- 结论
NetBox 是一种基础设施资源建模 (IRM) 软件,专为网络自动化和基础设施工程而设计。最初,它由 DigitalOcean 团队创建,现在成为一个在 Apache 2 许可下发布的开源项目。 NetBox 是在 Python Django Web 框架中创建的,默认数据库是 PostgreSQL,NetBox 的安装与其他 Python Django Web 应用程序非常相似。
NetBox 帮助您管理您的基础设施,其中包括:
- DCIM(数据中心基础设施管理)
- IPAM(IP 地址管理)
- 数据电路
- 连接(网络、控制台和电源)
- 设备架
- 虚拟化
- 秘密
在本教程中,您将在 Rocky Linux 9 服务器上安装 NetBox IRM(基础设施资源管理)。您将使用 PostgreSQL 作为数据库系统和 Apache/httpd 作为 Rocky Linux 系统上的反向代理设置 NetBox。您还将通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书保护 NetBox。
先决条件
在开始之前,请确保您满足以下要求:
- Rocky Linux 9 服务器 - 此示例使用主机名为 netbox-rocky 的 Rocky Linux 服务器。
- 具有 sudo/root 管理员权限的非 root 用户。
- 以宽容模式运行的 SELinux。
- 指向服务器 IP 地址的域名或子域 - 此示例使用子域 netbox.hwdomain.io 来运行 NetBox。
有了这些先决条件,您就可以安装 NetBox 了。
安装和配置 PostgreSQL
NetBox IRM 默认支持 PostgreSQL 数据库服务器。在撰写本文时,它至少需要 PostgreSQL v10 及更高版本。默认情况下,Rocky Linux 存储库提供适合 NetBox 部署的 PostgreSQL 服务器 v13。
在此步骤中,您将安装 PostgreSQL 数据库服务器,设置密码身份验证,然后创建 NetBox 将使用的新数据库和用户。
首先,运行以下命令在 Rocky Linux 服务器上安装 PostgreSQL 服务器。
sudo dnf install postgresql-server
出现提示时,输入 y 确认并按 ENTER 继续。

安装 PostgreSQL 服务器后,运行以下命令初始化 PostgreSQL 数据库和配置。
sudo postgresql-setup --initdb
您应该会收到诸如 Initializing database in .... 之类的输出。

初始化 PostgreSQL 服务器后,您接下来将为 PostgreSQL 用户设置密码加密和身份验证。
使用以下 nano 编辑器命令打开 PostgreSQL 配置文件 /var/lib/pgsql/data/postgresql.conf。
sudo nano /var/lib/pgsql/data/postgresql.conf
取消注释参数 password_encryption 并将值更改为 scram-sha-256。这将为 PostgreSQL 用户设置默认密码加密为 scram-sha-256。
password_encryption = scram-sha-256
保存文件并退出编辑器。
接下来,使用以下命令打开另一个 PostgreSQL 配置文件 /var/lib/pgsql/data/pg_hba.conf。您可以在该文件中为 PostgreSQL 定义身份验证方法。
sudo nano /var/lib/pgsql/data/pg_hba.conf
将主机 127.0.0.1/32 和 ::1/128 的默认身份验证方法更改为 scram-sha-256。这样,您将为 PostgreSQL 用户设置 scram-sha-256 的默认身份验证方法。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
完成后保存文件并退出编辑器。

现在运行下面的 systemctl 命令实用程序来启动和启用 PostgreSQL 服务。
sudo systemctl start postgresql
sudo systemctl enable postgresql
然后使用以下命令验证 PostgreSQL 服务。
sudo systemctl status postgresql
您应该收到这样的输出 - PostgreSQL 服务正在运行并已启用,这意味着 PostgreSQL 将在启动时自动启动。

现在您已经为 PostgreSQL 服务器配置了密码身份验证,它现在已经启动并运行了。接下来,您将为默认的 postgres 用户设置一个新密码,并创建一个新的数据库和 NetBox 将使用的用户。
通过以下命令登录到 PostgreSQL shell。
sudo -u postgres psql
运行以下查询为默认 PostgreSQL 用户 postgres 设置新密码。请务必更改以下查询中的密码。
ALTER USER postgres WITH PASSWORD 'PostgreSQLPass';

接下来,运行以下查询以创建新的 PostgreSQL 数据库和用户。此外,请务必更改以下查询中的默认密码。
在此示例中,您将使用将用于 NetBox 安装的用户 netbox 创建一个新数据库 netboxdb。
CREATE DATABASE netboxdb;
CREATE USER netbox WITH ENCRYPTED PASSWORD 'NetBoxRocks';
GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netbox;
现在按 Ctrl+d 或键入 quit 退出。

最后,运行以下命令通过新用户netbox 登录到PostgreSQL shell 到新数据库netboxdb。当提示输入密码时,输入您的密码。
sudo -u postgres psql --username netbox --password --host localhost netboxdb
登录到 PostgreSQL shell 后,运行以下查询来验证您当前的连接。
\conninfo
你会收到这样的输出——你已经通过 netbox 用户连接到 PostgreSQL 服务器到数据库 netboxdb。

安装 PostgreSQL、数据库和创建用户后,您接下来将安装 Redis,它将用作 NetBox Web 应用程序上的缓存管理。
安装和配置 Redis
Redis 是一个免费的开源键值数据库,NetBox 将使用它来进行缓存管理和队列管理。在撰写本文时,NetBox 至少需要 Redis 服务器 v4,而默认的 Rocky Linux 存储库提供 Redis v6,适合您的 NetBox 部署。
通过以下 dnf 命令将 Redis 安装到你的 Rocky Linux 服务器。
sudo dnf install redis
出现提示时输入 y,然后按 ENTER 继续。

安装 Redis 后,使用以下 nano 编辑器命令打开 Redis 配置文件 /etc/redis/redis.conf。
sudo nano /etc/redis/redis.conf
取消注释参数 requirepass 并输入 Redis 服务器的新密码。
requirepass RedisPasswordNetBox
完成后保存文件并退出编辑器。
接下来,运行以下 systemctl 命令启动 Redis 服务器并启用它。
sudo systemctl start redis
sudo systemctl enable redis

然后通过以下 systemctl 命令实用程序验证 Redis 服务器。
sudo systemctl status redis
在输出中,您应该看到 Redis 服务器已启用并将在启动时自动运行。而Redis服务器的状态是running。

要验证您的 Redis 安装,您将通过下面的 redis-cli 命令访问 Redis。
redis-cli
如果您运行 ping 查询,您应该会收到诸如(错误)需要 NOAUTH 身份验证之类的输出。您需要经过身份验证才能运行 ping 命令。
ping
执行以下 Redis 查询以向 Redis 服务器进行身份验证。请务必更改密码。如果通过身份验证,您应该会收到输出 OK。
AUTH RedisPasswordNetBox
再次运行 ping 查询,你应该得到一个输出 PONG\,这意味着查询成功执行并且你已经通过 Redis 服务器的身份验证。
ping

至此,您已经在 Rocky Linux 上安装了 PostgreSQL 数据库服务器和 Redis 键值数据库。您现在可以开始安装 NetBox。
安装 Netbox IRM
NetBox 是一个使用 Python Django Framework 编写的 Web 应用程序。当前版本的 NetBox 至少需要 Python 3.8、3.9、3.10 或 3.11。并且 Rocky Linux 9 上默认的 Python 是 Python 3.9,适合 NetBox 部署。
首先,运行以下 dnf 命令为 NetBox 安装包依赖项。出现提示时输入 y,然后按 ENTER 继续。
sudo dnf install gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config git

接下来,运行以下命令以使用默认主目录 /opt/netbox 创建一个新的系统用户 netbox。
sudo useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox
创建一个新目录 /opt/netbox 并将您的工作目录移动到其中。然后,通过 git 命令下载 NetBox 源代码。 /opt/netbox 目录将用作 NetBox 的主要安装目录。
mkdir -p /opt/netbox; cd /opt/netbox
sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
将 NetBox 安装目录的所有权 /opt/netbox 更改为用户和组 netbox。然后,将您的工作目录移动到/opt/netbox/netbox/netbox。
sudo chown -R netbox:netbox /opt/netbox
cd /opt/netbox/netbox/netbox
接下来,运行以下命令将默认的 NetBox 配置复制到 configuration.py。然后,通过 Python 脚本 ../generate_secret_key.py 生成 SECRET_KEY。
sudo -u netbox cp configuration_example.py configuration.py
sudo -u netbox python3 ../generate_secret_key.py
现在复制生成的 SECRET_KEY。这将用于设置 NetBox 安装。

使用以下 nano 编辑器命令打开 NetBox 配置文件 configuration.py。
sudo -u netbox nano configuration.py
请务必将您的域名添加到 ALLOWED_HOSTS 参数,输入 PostgreSQL 数据库和 NetBox 用户的详细信息,输入您配置的 Redis 密码,并将生成的 SECRET_KEY 粘贴到 SECRET_KEY 参数。
# domain and IP address
ALLOWED_HOSTS = ['netbox.hwdomain.io', '192.168.5.59']
# database configuration
DATABASE = {
'NAME': 'netboxdb', # Database name
'USER': 'netbox', # PostgreSQL username
'PASSWORD': 'NetBoxRocks', # PostgreSQL password
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}
# Redis cache configuration
REDIS = {
'tasks': {
'HOST': 'localhost', # Redis server
'PORT': 6379, # Redis port
'PASSWORD': 'RedisPasswordNetBox', # Redis password (optional)
'DATABASE': 0, # Database ID
'SSL': False, # Use SSL (optional)
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'PASSWORD': 'RedisPasswordNetBox',
'DATABASE': 1, # Unique ID for the second database
'SSL': False,
}
}
# Secret key
SECRET_KEY = '-K0AV#USk(!-6hAEF-8NMgweJh6ex&+j0Kb$N7bi=*jsF9TOg*'
完成后保存并退出文件。
现在运行以下脚本 /opt/netbox/upgrade.sh 开始 NetBox IRM 安装。
sudo -u netbox /opt/netbox/upgrade.sh
这将为 NetBox Web 应用程序安装创建 Python 虚拟环境,通过 PyPI 存储库安装所需的 Python 依赖项,为 NetBox 运行数据库迁移,最后为 NetBox Web 应用程序生成静态文件。
以下是执行 upgrade.sh 脚本时的输出。

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

此时,您已经在系统中安装了 NetBox IRM。但是,您仍然需要设置 NetBox 安装。
配置 NetBox IRM
在此步骤中,您将通过为 NetBox 创建管理员用户、设置 cron 以及为 NetBox 设置 systemd 服务来设置 NetBox IRM 安装。
首先,运行以下命令为您的 NetBox 安装激活 Python 虚拟环境。
source /opt/netbox/venv/bin/activate
激活后,您的提示将变为 (venv) [email ..
接下来,将工作目录移动到 /opt/netbox/netbox 并运行 Django 脚本 manage.py 以创建一个新的 NetBox 管理员用户。
cd /opt/netbox/netbox
python3 manage.py createsuperuser
输入 NetBox 的新管理员用户、电子邮件和密码。您应该收到一个输出 Superuser created successfully.,这意味着 NetBox 管理员用户已创建。

接下来,运行以下命令来设置将每天运行的 cron。脚本 netbox-housekeeping.sh 用于清理您的 NetBox 环境,这将删除过期任务、旧会话或任何过期记录。
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
为 NetBox 配置 cron 后,您将设置 NetBox 以与 Gunicorn 一起运行。
运行以下命令将 Guncorn 配置复制到 /opt/netbox/gunicorn.py。然后,使用以下 nano 编辑器命令打开 Gunicorn 配置文件 /opt/netbox/gunicorn.py。
sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
sudo -u netbox nano /opt/netbox/gunicorn.py
使用以下行更改绑定参数。这将使用端口 8001 在本地运行 NetBox Web 应用程序。
bind = '127.0.0.1:8001'
完成后保存并退出文件。

接下来,运行以下命令将 NetBox 的默认 systemd 服务复制到 /etc/systemd/system 目录。这将复制用于管理 NetBox 的服务文件 netbox 和 netbox-rq。
sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
现在运行以下 systemctl 命令实用程序以重新加载 systemd 管理器并将新更改应用到您的系统。
sudo systemctl daemon-reload
最后,运行以下 systemctl 命令启动并启用 netbox-rq 服务。这也将自动启动主 netbox 服务。
sudo systemctl start netbox netbox-rq
sudo systemctl enable netbox netbox-rq

现在通过以下 systemcl 命令验证 netbox-rq 和 netbox 服务。
sudo systemctl status netbox
sudo systemctl status netbox-rq
netbox-rq 服务状态的输出。

netbox 服务的输出。

此时,NetBox IRM 作为 systemd 服务运行,并作为带有 Gunicorn 的 WSGI 应用程序运行。在下一步中,您将安装并设置 httpd 作为 NetBox 的反向代理。
将 httpd 设置为反向代理
随着 NetBox 作为 WSGI 应用程序与 Gunicorn 一起运行,您现在将安装和配置 httpd Web 服务器作为 NetBox 的反向代理。您将安装 httpd 包,创建一个新的 httpd 虚拟主机文件,然后启动并启用 httpd 服务。最后,您还将设置 firewalld 以打开 HTTP 和 HTTPS 端口。
运行以下 dnf 命令来安装 httpd Web 服务器。在提示确认时输入 y,然后按 ENTER 继续。
sudo dnf install httpd

接下来,使用以下 nano 编辑器命令创建一个新的 httpd 虚拟主机文件 /etc/httpd/conf.d/netbox.conf。
sudo nano /etc/httpd/conf.d/netbox.conf
将以下行添加到文件中,并确保将域名 netbox.hwdomain.io 更改为您的域。使用此虚拟主机,您将设置一个 httpd 作为 NetBox 应用程序的反向代理,该应用程序作为 WSGI 应用程序在端口 8001 上运行。
<VirtualHost *:80>
ProxyPreserveHost On
# CHANGE THIS TO YOUR SERVER'S NAME
ServerName netbox.hwdomain.io
Alias /static /opt/netbox/netbox/static
<Directory /opt/netbox/netbox/static>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
<Location /static>
ProxyPass !
</Location>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>
完成后保存文件并退出编辑器。
接下来,运行以下 apachectl 命令来验证 httpd 配置。如果您有正确的 httpd 配置,您应该会收到诸如 Syntax OK 之类的输出。
sudo apachectl configtest

现在运行下面的 systemctl 命令实用程序来启动和启用 httpd Web 服务器。
sudo systemctl start httpd
sudo systemctl enable httpd
然后验证 httpd web 服务器以确保该服务正在运行。您应该收到 httpd web 服务器正在运行并已启用的输出,这意味着 httpd web 服务器将在启动时自动启动。
sudo systemctl status httpd

考虑到这一点,NetBox 应用程序正在运行并且可以访问。但在此之前,您必须在 firewalld 中打开 HTTP 和 HTTPS 端口。
运行以下 firewall-cmd 命令打开 HTTP 和 HTTPS 服务。然后,重新加载 firewalld 以应用更改。
sudo firewall-cmd --add-servic={http,https} --permanent
sudo firewall-cmd --reload
通过以下命令验证 firewalld 状态。
sudo firewall-cmd --list-all
像这样的输出显示 HTTP 和 HTTPS 服务已添加到 firewalld。

有了这个,您现在已经运行并可访问的 NetBox Web 应用程序 - 您可以访问 NetBox 安装,但使用不安全的 HTTP 协议。在下一步中,您将通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书保护您的 NetBox 部署。
使用 SSL Letsencrypt 保护 NetBox IRM
在此步骤中,您将使用可通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书保护 NetBox 安装。在开始之前,请确保域名指向服务器 IP 地址。此外,请确保您有一个用于注册 Letsencrypt 的电子邮件地址。
通过下面的 dnf 命令安装 Certbot 工具和 httpd/Apache 插件。
sudo dnf install certbot python3-certbot-apache
出现提示时输入 y,然后按 ENTER 继续。

安装 Certbot 后,运行以下命令为您的域名生成 SSL/TLS 证书。另外,请务必在以下命令中更改域名和电子邮件地址。
sudo certbot --apache2 --agree-tos --redirect --hsts --staple-ocsp --email -d netbox.hwdomain.io
此命令将为您的域名生成新的 SSL/TLS 证书。此外,这将自动在您的 httpd 虚拟主机配置上设置 HTTPS,并为您的 NetBox 虚拟主机文件设置从 HTTP 到 HTTPS 的自动重定向。 Certbot SSL/TLS 证书生成到目录 /etc/elstencrypt/live/netbox.hwdomain.io/。
登录到 NetBox
打开您的网络浏览器并访问您的 NetBox 安装的域名(即:https://netbox.hwdomain.io/)。
您将看到您的 NetBox 安装的默认主页 - 这就像您的 NetBox 安装的预览。

单击右上角菜单中的“登录”按钮,您将被重定向到 NetBox 登录屏幕。
使用您的管理员用户和密码登录,然后单击登录。

当您拥有正确且正确的 NetBox 用户名和密码后,您现在应该登录到 NetBox 管理仪表板。

这样,您就完成了 NetBox IRM 与 PostgreSQL、Redis、Gunciron 和 httpd Web 服务器的安装。
结论
在本教程中,您已经在 Rocky Linux 9 服务器上安装了基础设施资源建模 (IRM) 软件 NetBox。您已经为 NetBox 配置了 PostgreSQL 数据库服务器,Redis 作为缓存管理,httpd Web 服务器作为 Rocky Linux 服务器上的反向代理。
通过本教程,您还学习了如何在 PostgreSQL 上设置身份验证、在 Redis 上启用身份验证、将 httpd 设置为反向代理,以及通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书保护 NetBox。
NeBox 完全安装后,您现在可以将 NetBox 集成到您的数据中心,添加与 REST API 的集成,或通过 LDAP、Azure AD 和 Okta 添加第三方身份验证作为 SSO(单点登录)后端。