Skip to content

Gunicorn

与大多数Django应用程序一样,NetBox在HTTP服务器后面作为WSGI应用程序运行。此文档介绍如何安装和配置gunicorn(它会自动与NetBox一起安装)来执行此任务,不过还有其他WSGI服务器可用,应该同样有效。uWSGI是一个常见的替代方案。

配置

NetBox附带了一个用于gunicorn的默认配置文件。要使用它,请将/opt/netbox/contrib/gunicorn.py复制到/opt/netbox/gunicorn.py。(我们复制此文件而不是直接指向它,以确保将来的升级不会覆盖对其的任何本地更改。)

sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

虽然提供的配置对于大多数初始安装应该足够了,但您可能希望编辑此文件以更改绑定的IP地址和/或端口号,或进行性能相关的调整。请参阅Gunicorn文档以获取可用的配置参数。

systemd设置

我们将使用systemd来控制gunicorn和NetBox的后台工作进程。首先,将contrib/netbox.servicecontrib/netbox-rq.service复制到/etc/systemd/system/目录并重新加载systemd守护程序。

检查用户和组的分配

NetBox打包的标准服务配置文件假定服务将使用netbox用户和组名称运行。如果这些在您的安装中不同,请确保相应地更新服务文件。

sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload

然后,启动netboxnetbox-rq服务并将它们设置为在启动时启动:

sudo systemctl start netbox netbox-rq
sudo systemctl enable netbox netbox-rq

您可以使用命令systemctl status netbox来验证WSGI服务是否正在运行:

systemctl status netbox.service

您应该会看到类似以下的输出:

● netbox.service - NetBox WSGI Service
     Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-08-30 04:02:36 UTC; 14h ago
       Docs: https://docs.netbox.dev/
   Main PID: 1140492 (gunicorn)
      Tasks: 19 (limit: 4683)
     Memory: 666.2M
     CGroup: /system.slice/netbox.service
             ├─1140492 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
             ├─1140513 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
             ├─1140514 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
...

注意

如果NetBox服务启动失败,请使用命令journalctl -eu netbox检查可能指示问题的日志消息。

一旦验证了WSGI工作者正在运行,就可以继续进行HTTP服务器设置。

注意

在gunicorn当前稳定版本(v21.2.0)中存在一个bug,其中工作进程的自动重启在高负载下可能会导致502错误。(更多细节见gunicorn bug #3038。)遇到此问题的用户可以选择降级到一个早期的、未受影响的gunicorn版本(pip install gunicorn==20.1.0)。然而,请注意,这个早期版本并不官方支持Python 3.11。