Netbox 4.7 配置参数详解
Netbox 4.7.3 configuration.py 全参数手册:必填五参数、安全认证、展示默认值、运维保留四大类默认值与调整时机,附 2C4G 中小机房生产配置模板,对照随源码官方文档并逐项实测验证。
Netbox 4.7 配置参数详解
目标:系统梳理 Netbox v4.7.3 的
configuration.py全部配置参数——必填五参数的逐项落法、安全/认证/展示/运维四大类常用参数的默认值与调整时机,并给出可直接套用的生产配置模板。参数默认值与行为说明均对照随源码分发的官方文档(docs/configuration/,v4.7.3)核实;所有验证命令在 Ubuntu 24.04.5 LTS + Netbox 4.7.3(Django 6.1.2)环境实测通过。
一、环境信息
- 操作系统:Ubuntu 24.04.5 LTS(x86_64)
- Netbox:v4.7.3(官方最新稳定版,2026-10-22 实查)
- 运行栈:Django 6.1.2 / gunicorn 26.1 / PostgreSQL 16.15 / Redis 7.0.15 / Python 3.12.3
- 安装方式:官方 Release Archive + venv(
/opt/netbox-4.7.3/,软链/opt/netbox),安装过程见本系列《Ubuntu 24.04 安装 Netbox 4.7 指南》 - 配置文件:
/opt/netbox/netbox/netbox/configuration.py(由configuration_example.py复制而来,v4.7.3 中该示例文件共 264 行) - 参数文档(随源码分发,本地可读):
/opt/netbox/docs/configuration/,共 13 个主题文件(required-parameters、system、security、default-values、miscellaneous、remote-authentication、data-validation、plugins、error-reporting、development、graphql-api 等)
二、前置条件
本文的参数修改与验证操作依赖已完成的安装与运行环境:
- 已按安装指南完成 Netbox 4.7.3 部署并可正常登录(
systemctl is-active netbox netbox-rq均为 active); - 操作者具备 root 或 sudo 权限(configuration.py 属主为 root,服务以 netbox 用户运行);
- 熟悉基本 Python 语法——configuration.py 本质是可执行的 Python 文件,参数即 Python 变量,支持 import、函数定义等完整语法。
验证当前环境(实测回显):
systemctl is-active netbox netbox-rq
/opt/netbox/venv/bin/python3 -c "import django; print(django.get_version())"
active
active
6.1.2
三、参数查看与修改方式
3.1 唯一入口:configuration.py
Netbox 的全部自定义参数集中在一个文件:/opt/netbox/netbox/netbox/configuration.py。它与 Django 内置 settings.py 的关系是"覆盖式合并"——configuration.py 里定义的参数覆盖 Netbox 内部默认值,未定义的走内置默认。修改流程固定三步:
# 1. 编辑配置(示例:改时区)
vi /opt/netbox/netbox/netbox/configuration.py
# 2. 语法与完整性校验(不会改数据,安全执行)
source /opt/netbox/venv/bin/activate && cd /opt/netbox/netbox
python3 manage.py check
# 3. 重启两个服务使配置生效(worker 进程只读一次配置)
systemctl restart netbox netbox-rq
manage.py check 实测回显(配置合法时):
System check identified no issues (0 silenced).
若参数值非法(如 SECRET_KEY 不足 50 字符),check 与服务启动都会直接报错提示,不会静默生效。
⚠️ 注意:改完必须
systemctl restart netbox netbox-rq——gunicorn 与 rqworker 都是常驻进程,仅在启动时读取一次配置,reload nginx 不等于让 Netbox 重新加载配置。
3.2 用 diffsettings 对比生效值
Django 的 diffsettings 列出与 Django 全局默认不同的生效配置(带 ### 标记的行即受 configuration.py/Netbox 内部 settings.py 影响的项),是核对"配置到底生效没有"的利器:
python3 manage.py diffsettings | head -8
实测回显(节选):
ALLOWED_HOSTS = ['*']
API_TOKEN_PEPPERS = {1: 'UwJKwgp%SpYB+&s8RXB4_#BE7Sa@fftR%WafsYAFc2w_GSWbmq'} ###
AUTHENTICATION_BACKENDS = ['netbox.authentication.RemoteUserBackend', 'netbox.authentication.ObjectPermissionBackend']
AUTH_USER_MODEL = 'users.User'
BASE_DIR = '/opt/netbox-4.7.3/netbox' ###
BASE_PATH = '' ###
BULK_UPDATE_CHUNK_SIZE = 5000 ###
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'USERNAME': '', 'PASSWORD': ''}}}
关键行(grep 过滤后):
python3 manage.py diffsettings | grep -E "^DATABASES|^LOGIN_REQUIRED"
实测回显:
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'netbox', 'USER': 'netbox', 'PASSWORD': 'q1w2e3r4', 'HOST': 'localhost', 'PORT': '', 'CONN_MAX_AGE': 300, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
LOGIN_REQUIRED = True ###
3.3 在 nbshell 里读取运行时值
进入 Netbox 交互式 shell 直接读取 Django settings,适合确认单个参数的运行时取值:
echo "from django.conf import settings
print('TIME_ZONE =', settings.TIME_ZONE)
exit" | python3 manage.py nbshell 2>&1 | grep -vE "^(>>>|###|Use exit|now exiting)"
实测回显:
TIME_ZONE = UTC
⚠️ 实测发现:v4.7.3 中并非所有配置文档列出的参数都能从
django.conf.settings读到——例如PAGINATE_COUNT(getattr 实测返回 MISSING)。原因是官方已将其标注为 Dynamic Configuration Parameter(动态配置参数):默认值仍可经 configuration.py 或管理界面调整,但运行时经动态配置体系(数据库)而非静态 settings 属性提供。判断某参数是否属动态配置,看官方文档该参数小节是否带 "Dynamic Configuration Parameter" 提示框。
四、参数总览
v4.7.3 官方配置文档按主题分为 10 类,共约 90 个参数。总览如下(各参数默认值均为 v4.7.3 官方文档标注值):
| 分类 | 代表参数 | 数量级 | 官方文档文件 |
|---|---|---|---|
| 必填参数 | ALLOWED_HOSTS、API_TOKEN_PEPPERS、DATABASES、REDIS、SECRET_KEY | 5 | required-parameters.md |
| 系统参数 | TIME_ZONE、BASE_PATH、EMAIL、LOGGING、MEDIA_ROOT、STORAGES | ~20 | system.md |
| 安全参数 | LOGIN_REQUIRED、LOGIN_TIMEOUT、EXEMPT_VIEW_PERMISSIONS、CSRF_、SECURE_ | ~22 | security.md |
| 远程认证 | REMOTE_AUTH_BACKEND、REMOTE_AUTH_HEADER、REMOTE_AUTH_AUTO_CREATE_USER | 15 | remote-authentication.md |
| 数据校验 | CUSTOM_VALIDATORS、FIELD_CHOICES、PROTECTION_RULES | 3 | data-validation.md |
| 默认值 | PAGINATE_COUNT、POWERFEED_DEFAULT_、RACK_ELEVATION_DEFAULT_ | 8 | default-values.md |
| 杂项/运维 | CHANGELOG_RETENTION、JOB_RETENTION、MAINTENANCE_MODE、RQ_*、WEBHOOK_DEFAULT_TIMEOUT | ~32 | miscellaneous.md |
| 插件 | PLUGINS、PLUGINS_CONFIG、PLUGINS_CATALOG_CONFIG | 3 | plugins.md |
| 错误上报 | SENTRY_ENABLED、SENTRY_CONFIG、SENTRY_TAGS | 3 | error-reporting.md |
| 开发调试 | DEBUG、DEVELOPER | 2 | development.md |
| GraphQL API | GRAPHQL_ENABLED、GRAPHQL_MAX_QUERY_DEPTH、GRAPHQL_MAX_ALIASES | 3 | graphql-api.md |
💡 关键差异解读:必填 5 参数决定"能不能跑",安全类决定"跑得稳不稳",运维类决定"跑得久不久"——新装先落必填 5 项(安装指南已覆盖),上生产前优先复核安全类的 LOGIN_REQUIRED/SECURE_SSL_REDIRECT/SESSION_COOKIE_SECURE 与运维类的 CHANGELOG_RETENTION/JOB_RETENTION。
五、核心参数分类详解
5.1 必填参数(缺一不可启动)
ALLOWED_HOSTS —— HTTP Host 头校验白名单(列表类型,单值也要写成列表)。
ALLOWED_HOSTS = ['netbox.example.com', '192.168.10.10']
- 官方语义:防 HTTP Host header 攻击;该值同时用于生成
CSRF_TRUSTED_ORIGINS; - 默认:无(必填);
['*']仅限临时调试; - ⚠️ 反代部署时 Netbox 默认
USE_X_FORWARDED_HOST = True,要填用户访问反代所用的 FQDN,不是后端主机名。
API_TOKEN_PEPPERS —— v2 API Token 哈希加盐(v4.5+ 引入)。
API_TOKEN_PEPPERS = {
1: 'UwJKwgp%SpYB+&s8RXB4_#BE7Sa@fftR%WafsYAFc2w_GSWbmq',
}
- 默认:
{}(Netbox 可运行,但 v2 API Token 功能不可用); - 每条 ≥50 字符随机串,ID 从 1 起;官方建议首条用 ID
1,后续轮换时追加新 ID; - ⚠️ 属高敏感值,官方建议初始化时从环境变量注入而非明文落盘;更换/删除 pepper 会使旧 Token 哈希失效。
DATABASES —— PostgreSQL 连接字典(v4.7 起新参数,替代已弃用的单数 DATABASE)。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'netbox',
'USER': 'netbox',
'PASSWORD': 'q1w2e3r4',
'HOST': 'localhost',
'PORT': '',
'CONN_MAX_AGE': 300,
}
}
| 子项 | 默认 | 说明 |
|---|---|---|
NAME/USER/PASSWORD | 无 | 数据库名与凭据,必填 |
HOST | 无 | 远程库填主机名/IP,本机填 localhost |
PORT | 空 | 留空 = 默认 5432 |
CONN_MAX_AGE | 300 | 持久连接寿命(秒) |
ENGINE | django.db.backends.postgresql | 必须是 PostgreSQL 系后端;Netbox 不支持 MySQL |
- 插件可要求额外库(
'external1': {...}),多库时配合DATABASE_ROUTERS路由。
REDIS —— 必须提供 tasks 与 caching 两节,两节 DATABASE 编号必须不同。
REDIS = {
'tasks': {'HOST': 'localhost', 'PORT': 6379, 'USERNAME': '', 'PASSWORD': '', 'DATABASE': 0, 'SSL': False},
'caching': {'HOST': 'localhost', 'PORT': 6379, 'USERNAME': '', 'PASSWORD': '', 'DATABASE': 1, 'SSL': False},
}
- ⚠️ 官方明确警告:tasks 与 caching 混用同一 DB 编号,清缓存时可能把后台任务一起冲掉;
- ⚠️ 官方将 Redis 定级为"可信组件":worker 会反序列化执行 tasks 库里的任务,任何能写该库的人等于能在服务器上执行任意代码——务必加密码并限制在内网;
- 支持三种高级形态:UNIX socket(
'URL': 'unix:///run/redis-netbox/redis.sock?db=0')、Sentinel 高可用(SENTINELS/SENTINEL_SERVICE/SENTINEL_TIMEOUT)、SSL 细化(CA_CERT_PATH、INSECURE_SKIP_TLS_VERIFY、KWARGS传客户端证书)。
SECRET_KEY —— 会话/Cookie 哈希盐,≥50 字符随机串。
- 默认:无(必填);用
python3 ../generate_secret_key.py生成; - 可随时更换,但会令全部用户会话失效;多节点部署所有节点必须一致;
- 注意它不用于用户密码哈希与敏感字段加密,泄露后应尽快轮换。
5.2 系统参数(system.md)
| 参数 | 默认值 | 说明 |
|---|---|---|
BASE_PATH | None | 子路径部署,装在 https://example.com/netbox/ 时设 'netbox/' |
TIME_ZONE | "UTC" | 展示时区;官方建议无特殊需求保持 UTC |
DEFAULT_LANGUAGE | en-us | 未指定语言时的缺省界面语言(映射 Django LANGUAGE_CODE) |
HOSTNAME | 系统主机名 | 界面顶部显示的实例名 |
DOCS_ROOT | $INSTALL_ROOT/docs/ | 内嵌离线文档路径;设 None 可关闭内嵌文档 |
MEDIA_ROOT | $INSTALL_ROOT/netbox/media/ | 图片附件存储目录 |
REPORTS_ROOT | $INSTALL_ROOT/netbox/reports/ | 自定义报表目录 |
SCRIPTS_ROOT | $INSTALL_ROOT/netbox/scripts/ | ⚠️ 自定义脚本功能 v4.7 起已弃用,v5.0 将随参数一并移除 |
SEARCH_BACKEND | 'netbox.search.backends.CachedValueSearchBackend' | 全局搜索后端,目前唯一内置实现,供插件替换 |
TRANSLATION_ENABLED | True | 界面多语言开关(映射 USE_I18N) |
ISOLATED_DEPLOYMENT | False | 完全离线环境设 True,关闭依赖外网的功能 |
HTTP_PROXIES | None | 出站请求(Webhook 等)代理字典 |
INTERNAL_IPS | ('127.0.0.1', '::1') | 调试工具栏可见的客户端 IP |
DATABASE_ROUTERS | [] | 多库时的查询路由器 |
BULK_UPDATE_CHUNK_SIZE | 5000 | 批量 UPDATE 分块行数;也决定自定义字段操作是否转后台任务 |
EMAIL(邮件服务器,Webhook 之外唯一外发通道):
EMAIL = {
'SERVER': 'smtp.example.com',
'PORT': 25,
'USERNAME': '',
'PASSWORD': '',
'USE_SSL': False,
'USE_TLS': False,
'TIMEOUT': 10,
'FROM_EMAIL': 'netbox@example.com',
}
PORT默认 25、TIMEOUT默认 10;USE_SSL与USE_TLS互斥;- ⚠️
SERVER缺失不会在启动时报错,而是发信时抛InvalidMailer——配置邮件后应实测发一封。
LOGGING(默认 INFO+ 打到控制台,由 journald 收进 journalctl -u netbox):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/var/log/netbox.log',
},
},
'loggers': {
'django': {'handlers': ['file'], 'level': 'INFO'},
},
}
可用 logger 域:netbox.auth.*(认证事件)、netbox.api.views.*、netbox.jobs.*、netbox.reports.*、netbox.scripts.*、netbox.event_rules 等。
STORAGES(上传文件后端,默认本地文件系统):
STORAGES = {
"default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
"staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"},
"scripts": {"BACKEND": "extras.storage.ScriptFileSystemStorage",
"OPTIONS": {"allow_overwrite": True}},
}
- 接 S3 时把
default的 BACKEND 换成storages.backends.s3.S3Storage并在OPTIONS里给bucket_name/access_key/secret_key/region_name/endpoint_url; - ⚠️ Netbox 不做环境变量自动探测:django-storages 的
AWS_*环境变量约定在这里不生效,必须import os后在 configuration.py 里显式os.environ.get()读入。
JINJA_ENVIRONMENT_PARAMS / JINJA_FILTERS(配置渲染模板的沙箱与扩展):
JINJA_ENVIRONMENT_PARAMS = ['WEBHOOK_TOKEN_*', 'DEFAULT_SECRET_ID']
def uppercase(x):
return str(x).upper()
JINJA_FILTERS = {'uppercase': uppercase}
JINJA_ENVIRONMENT_PARAMS默认[]:只有名单内的环境变量才能被 Jinja 模板的env过滤器引用(通配符按 fnmatch 语法,大小写敏感);- ⚠️ v4.7 改名提示:
JINJA_FILTERS前身为JINJA2_FILTERS,旧名兼容但将在 v5.0 移除。
5.3 安全与登录参数(security.md)
| 参数 | 默认值 | 说明 |
|---|---|---|
LOGIN_REQUIRED | True | 全站强制登录后才可浏览;设 False 允许匿名只读浏览公开对象 |
LOGIN_TIMEOUT | None | 会话超时秒数;None 用 Django 默认(2 周),设 3600 即 1 小时 |
LOGIN_PERSISTENCE | False | 勾"记住我"时是否长期保留会话 |
LOGIN_FORM_HIDDEN | False | 隐藏登录表单(纯 SSO/远程认证场景用) |
EXEMPT_VIEW_PERMISSIONS | [] | 免权限即可查看的对象类型白名单,如 ['dcim.site', 'ipam.prefix'] |
DEFAULT_PERMISSIONS | None | 全体登录用户自动获得的默认权限 |
CSRF_COOKIE_NAME / SESSION_COOKIE_NAME | csrftoken / sessionid | Cookie 名 |
CSRF_COOKIE_SECURE / SESSION_COOKIE_SECURE | False / False | 仅 HTTPS 传输 Cookie;走 nginx TLS 后建议都设 True |
CSRF_TRUSTED_ORIGINS | [] | 额外信任的 POST 来源(ALLOWED_HOSTS 已自动覆盖一份) |
SECURE_SSL_REDIRECT | False | Django 层强制 HTTP→HTTPS(本系列在 nginx 层做 301,二者留一即可) |
SECURE_HSTS_SECONDS | 0 | HSTS 有效期,0 关闭;上 HTTPS 后建议 31536000 |
SECURE_HSTS_INCLUDE_SUBDOMAINS / SECURE_HSTS_PRELOAD | False / False | HSTS 子域与预加载 |
AUTH_PASSWORD_VALIDATORS | Django 默认三条强度校验 | 本地口令复杂度策略 |
ALLOWED_URL_SCHEMES | ('file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc', 'xmpp') | 自定义链接等字段允许的 URL scheme 白名单 |
CORS_ORIGIN_ALLOW_ALL | False | CORS 全放行(危险,禁用于生产) |
CORS_ORIGIN_WHITELIST / CORS_ORIGIN_REGEX_WHITELIST | [] | 允许跨域的前端源清单 |
SESSION_FILE_PATH | None | 文件会话存储路径(默认存数据库) |
LOGOUT_REDIRECT_URL | 'home' | 登出后跳转 |
5.4 远程认证参数(remote-authentication.md)
反向代理(nginx + SSO/OIDC 等)托管的认证体系,核心开关三件:
| 参数 | 默认值 | 说明 |
|---|---|---|
REMOTE_AUTH_ENABLED | True | 远程认证总开关 |
REMOTE_AUTH_BACKEND | 'netbox.authentication.RemoteUserBackend' | 认证后端;LDAP 场景换成 'netbox.authentication.LDAPBackend' |
REMOTE_AUTH_HEADER | 'HTTP_REMOTE_USER' | 信任的用户名请求头;换自建头如 'HTTP_X_REMOTE_USER' |
REMOTE_AUTH_AUTO_CREATE_USER | False | 首次登录自动建档 |
REMOTE_AUTH_AUTO_CREATE_GROUPS | False | 自动同步组 |
REMOTE_AUTH_GROUP_HEADER / REMOTE_AUTH_GROUP_SEPARATOR | 'HTTP_REMOTE_USER_GROUP' / `' | '` |
REMOTE_AUTH_DEFAULT_GROUPS | [] | 远程登录用户默认加入的本地组 |
REMOTE_AUTH_DEFAULT_PERMISSIONS | None | 远程登录用户默认权限 |
REMOTE_AUTH_SUPERUSERS / REMOTE_AUTH_SUPERUSER_GROUPS | [] / [] | 视为超管的用户/组名单 |
REMOTE_AUTH_USER_EMAIL / REMOTE_AUTH_USER_FIRST_NAME / REMOTE_AUTH_USER_LAST_NAME | 'HTTP_REMOTE_USER_EMAIL' 等 | 自动建档时取值头 |
⚠️ 信任链要求:REMOTE_AUTH_HEADER 是"代理说什么就信什么",必须保证 8001 端口只有 nginx 能访问(默认如此),且代理层会剥离客户端伪造的同名头。
5.5 展示与默认值参数(default-values.md)
| 参数 | 默认值 | 说明 |
|---|---|---|
PAGINATE_COUNT | 50 | 列表页每页条数;⚠️ v4.7 起为动态配置参数(管理界面可调),静态 settings 属性已不存在(见 3.3 节实测) |
MAX_PAGE_SIZE | 1000 | 单页最大条数(0 = 不限);API 单次最多翻到该值 |
DEFAULT_USER_PREFERENCES | {} | 新用户缺省偏好(如分页数) |
DEFAULT_DASHBOARD | — | 新用户默认仪表盘布局(字典/列表结构,官方文档给完整示例) |
POWERFEED_DEFAULT_AMPERAGE | 15 | 电源支路默认电流(A) |
POWERFEED_DEFAULT_MAX_UTILIZATION | 80 | 电源支路默认最大利用率(%) |
POWERFEED_DEFAULT_VOLTAGE | 120 | 电源支路默认电压(V);国内机房常用改 220 |
RACK_ELEVATION_DEFAULT_UNIT_HEIGHT | 22 | 机柜立面图 1U 像素高 |
RACK_ELEVATION_DEFAULT_UNIT_WIDTH | 220 | 机柜立面图像素宽 |
界面横幅四件套(miscellaneous.md,默认均 None):BANNER_TOP、BANNER_BOTTOM、BANNER_LOGIN、BANNER_MAINTENANCE——支持 HTML,常用于公告与维护提示。
5.6 运维与数据保留参数(miscellaneous.md)
| 参数 | 默认值 | 说明 |
|---|---|---|
CHANGELOG_RETENTION | 90 | 变更日志保留天数;0 = 永久保留 |
CHANGELOG_RETAIN_CREATE_LAST_UPDATE | — | 是否为"创建/最后更新"也记变更条目 |
CHANGELOG_SKIP_EMPTY_CHANGES | True | 无实际变化的保存不记日志 |
JOB_RETENTION | 90 | 后台任务结果保留天数(0 = 永久) |
MAINTENANCE_MODE | False | 维护模式:开启后禁用大部分写操作与事件规则,改库升级时用 |
METRICS_ENABLED | False | 开启 django-prometheus 指标端点(/metrics) |
CENSUS_REPORTING_ENABLED | True | 匿名版本统计上报(NetBox Labs Census);离线环境设 False |
RELEASE_CHECK_URL | None(关闭) | 新版本检查 URL;默认关闭 |
RQ_DEFAULT_TIMEOUT | 300 | 后台任务默认超时(秒) |
RQ_RETRY_INTERVAL | 60 | 任务失败重试间隔(秒) |
RQ_RETRY_MAX | 0 | 任务重试次数上限(默认不重试) |
WEBHOOK_DEFAULT_TIMEOUT | 60 | Webhook 出站请求默认超时(秒) |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440(2.5 MB) | 请求体内存上限 |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440(2.5 MB) | 上传文件内存阈值,超出落临时文件 |
ENFORCE_GLOBAL_UNIQUE | True | 全局强制主 IP 唯一 |
PREFER_IPV4 | False | 设备主 IP 优先选 IPv4 |
DISK_BASE_UNIT / RAM_BASE_UNIT | 1000 / 1000 | 磁盘/内存容量换算基数(1000=十进制 GB,1024=二进制 GiB) |
STREAMING_EXPORTS | False | 导出走流式(大数据量导出可开) |
EVENTS_PIPELINE | ['extras.events.process_event_queue'] | 事件处理管道,供插件插入自定义处理阶段 |
QUEUE_MAPPINGS | {} | 任务名到 RQ 队列的映射 |
ADMINS | [] | 接收 ERROR/CRITICAL 邮件的名单(需先配 EMAIL) |
RQ | {} | RQ 高级参数(连接池等) |
MAPS_URL | — | 地图链接模板(站点坐标跳转用) |
COPILOT_ENABLED | — | NetBox Copilot 助手开关 |
5.7 插件与开发调试参数
| 参数 | 默认值 | 说明 |
|---|---|---|
PLUGINS | [] | 启用的插件列表,如 ['netbox_plugin_name'];先 pip install 到 venv 再加进来 |
PLUGINS_CONFIG | {} | 各插件的配置字典,按插件名为键 |
PLUGINS_CATALOG_CONFIG | — | 插件目录(Catalog)元数据源配置 |
DEBUG | False | Django 调试模式;生产必须 False——True 会向客户端泄露堆栈与配置 |
DEVELOPER | False | 启用开发期附加行为(如自动创建测试对象) |
GRAPHQL_ENABLED | True | /graphql/ 端点开关 |
GRAPHQL_MAX_QUERY_DEPTH | None(不限) | GraphQL 查询深度上限,防嵌套滥用建议设 10~20 |
GRAPHQL_MAX_ALIASES | 10 | 单查询别名数上限,防批量爬取 |
SENTRY_ENABLED | False | Sentry 错误上报开关(需 venv 里装 sentry-sdk) |
SENTRY_CONFIG / SENTRY_TAGS | — | Sentry DSN 等配置与附加标签 |
5.8 数据校验参数(data-validation.md)
| 参数 | 默认值 | 说明 |
|---|---|---|
CUSTOM_VALIDATORS | {} | 自定义校验器,按模型路径挂载,如 {'dcim.site': ['validators.site_validator.SiteValidator']} |
FIELD_CHOICES | {} | 强制限定内置字段的选项集(把无限选择收敛为白名单,如只允许部分 site status) |
PROTECTION_RULES | {} | 对象保护规则(Jinja2 条件表达式,命中则阻止删除) |
六、生产配置模板
适用场景:2 vCPU / 4GB 内存 / 50GB 磁盘、单机承载 ≤1 万设备 / ≤2 万前缀的中小机房(gunicorn 5 worker × 3 threads,实测该规模下 netbox 服务稳态内存约 1.0G,留 3GB 给 PostgreSQL/Redis/系统充足余量)。直接替换到 configuration.py 即可(凭据换成自己的):
ALLOWED_HOSTS = ['netbox.example.com', '192.168.10.10']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'netbox',
'USER': 'netbox',
'PASSWORD': 'q1w2e3r4',
'HOST': 'localhost',
'PORT': '',
'CONN_MAX_AGE': 300,
}
}
REDIS = {
'tasks': {'HOST': 'localhost', 'PORT': 6379, 'USERNAME': '', 'PASSWORD': 'J5brHrAXFLQSif0K', 'DATABASE': 0, 'SSL': False},
'caching': {'HOST': 'localhost', 'PORT': 6379, 'USERNAME': '', 'PASSWORD': 'J5brHrAXFLQSif0K', 'DATABASE': 1, 'SSL': False},
}
SECRET_KEY = '00JiVo2&PB4KdQ-e1iP(HPP(*-+yzoN%yiVaMTW*-jY6^z9Zas'
API_TOKEN_PEPPERS = {
1: 'UwJKwgp%SpYB+&s8RXB4_#BE7Sa@fftR%WafsYAFc2w_GSWbmq',
}
# —— 安全(走 nginx HTTPS 后)——
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = False # nginx 层已做 301,此处无需重复
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
LOGIN_TIMEOUT = 3600 # 会话 1 小时过期
# —— 展示 ——
TIME_ZONE = 'Asia/Shanghai'
PAGINATE_COUNT = 50
MAX_PAGE_SIZE = 1000
POWERFEED_DEFAULT_VOLTAGE = 220 # 国内机房电压
BANNER_TOP = '内部资产管理系统,数据变更请通过审批流'
# —— 运维与保留 ——
CHANGELOG_RETENTION = 180 # 变更日志留半年(满足审计要求)
JOB_RETENTION = 30
METRICS_ENABLED = True # 暴露 /metrics 给 Prometheus
CENSUS_REPORTING_ENABLED = False # 内网不外报
RQ_DEFAULT_TIMEOUT = 600 # 大报表脚本留足时间
# —— GraphQL 防滥用 ——
GRAPHQL_MAX_QUERY_DEPTH = 20
GRAPHQL_MAX_ALIASES = 10
逐段说明:安全段三项 HTTPS Cookie/HSTS 依赖 4.8 节的 nginx TLS 入口,组合后实现传输加密闭环;展示段把时区、电压等默认值调到国内机房习惯;运维段按"审计半年、任务一月"的常见合规口径设置保留期;GraphQL 两项在对外开放 API 时收敛查询复杂度。改完执行第三章三步走:manage.py check → systemctl restart netbox netbox-rq → 抽查页面与 /metrics。
💡 说明:Redis 模板里的密码
J5brHrAXFLQSif0K演示"tasks/caching 连接需认证"的写法——先在 redis.conf 里requirepass配置同值;Redis 是官方定级的可信组件,禁止无密码裸奔。
七、常见问题(FAQ)
Q1:改了 configuration.py 不生效
没重启 worker。gunicorn/rqworker 只在进程启动时读配置,必须 systemctl restart netbox netbox-rq。
Q2:重启后 netbox 起不来,journalctl -eu netbox 显示 SECRET_KEY 相关报错
SECRET_KEY 少于 50 字符或含未转义字符(如直接手写 ' 引号冲突)。用 python3 ../generate_secret_key.py 重新生成并整体替换字符串。
Q3:登录后频繁被踢出
LOGIN_TIMEOUT 默认 None 时会话约两周,通常不是它;多节点部署的 SECRET_KEY 不一致会导致会话随机失效——所有节点必须同值。
Q4:Webhook 发不出去
按顺序排查:EVENTS_PIPELINE 是否被改坏;目标 URL 是否命中 HTTP_PROXIES(内网目标要配 NO_PROXY 类语义或走 PROXY_ROUTERS);WEBHOOK_DEFAULT_TIMEOUT=60 是否短于对端响应。
Q5:API 翻页最多 1000 条就断了
MAX_PAGE_SIZE 默认 1000。大清单消费端应改用分页遍历,确有需要可临时调大该值(注意请求内存上限 DATA_UPLOAD_MAX_MEMORY_SIZE 与响应时间)。
Q6:升级后界面语言变英文
DEFAULT_LANGUAGE 默认 en-us;确认 TRANSLATION_ENABLED = True 后按用户偏好设置切换界面语言。
Q7:S3 上传附件报错"bucket 参数为空"
django-storages 靠环境变量自动探测的约定在 Netbox 下不生效(configuration.py 是显式 Python 环境),必须在 STORAGES['default']['OPTIONS'] 里显式给 bucket_name/access_key 等值,或 import os 后显式读环境变量。
Q8:想临时禁止所有人改数据
设 MAINTENANCE_MODE = True 并重启,写操作被冻结(升级数据库、批量导入窗口期常用);完成后记得改回 False。
八、参考链接
- 官方配置文档索引:https://netbox.readthedocs.io/en/stable/configuration/
- 必填参数:https://netbox.readthedocs.io/en/stable/configuration/required-parameters/
- 系统参数:https://netbox.readthedocs.io/en/stable/configuration/system/
- 安全参数:https://netbox.readthedocs.io/en/stable/configuration/security/
- 全部参数(默认值速查):https://netbox.readthedocs.io/en/stable/configuration/default-values/
本系列其他文档:《Ubuntu 24.04 安装 Netbox 4.7 指南》(部署实测)、《Netbox 介绍与选型指南》(认知与选型)、《Netbox 4.7 常用 CLI 命令与工具详解》(manage.py 命令全集)。