在Rocky Linux 9.2上从源码编译安装NetBox 3.5.6:一份避开Docker的详细配置手册
对于需要深度定制NetBox或对容器化部署有顾虑的技术团队而言,从源码构建不仅提供了完整的代码控制权,还能根据实际需求灵活调整系统架构。本文将手把手带你在Rocky Linux 9.2上搭建生产级NetBox环境,涵盖从依赖配置到性能调优的全流程实战经验。
1. 环境准备与系统优化
在开始前,建议使用4核CPU、8GB内存及100GB存储的硬件配置。我们选择Rocky Linux 9.2作为基础平台,其与RHEL 9的二进制兼容性保证了长期支持稳定性。
系统基础配置:
# 禁用SELinux和防火墙(生产环境需按需调整) sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config sudo setenforce 0 sudo systemctl disable --now firewalld # 安装开发工具链 sudo dnf install -y gcc libxml2-devel libxslt-devel libffi-devel \ libpq-devel openssl-devel redhat-rpm-config git tree vim bash-completion存储优化建议:
- 数据库分区采用XFS文件系统
- 为/opt/netbox单独挂载高性能SSD
- 设置合理的swappiness值(建议10-30)
提示:执行
sudo tuned-adm profile throughput-performance可启用性能优化方案
2. 核心依赖部署
2.1 PostgreSQL 15深度配置
采用官方仓库安装最新稳定版:
sudo dnf module install postgresql:15 -y sudo postgresql-setup --initdb关键配置文件调整:
# 修改认证方式 sudo sed -i 's/ident/scram-sha-256/g' /var/lib/pgsql/data/pg_hba.conf # 性能参数优化(8GB内存示例) echo " shared_buffers = 2GB effective_cache_size = 6GB maintenance_work_mem = 512MB work_mem = 16MB random_page_cost = 1.1 max_connections = 100 " | sudo tee -a /var/lib/pgsql/data/postgresql.conf数据库初始化:
CREATE DATABASE netboxdb TEMPLATE template0 ENCODING 'UTF8'; CREATE USER netbox WITH PASSWORD 'YourStrongPassword'; GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netbox; ALTER DATABASE netboxdb SET timezone TO 'Asia/Shanghai';2.2 Redis 6缓存系统
安装与安全加固:
sudo dnf install -y redis sudo sed -i 's/^# requirepass .*/requirepass YourRedisPassword/' /etc/redis/redis.conf echo "maxmemory 1gb" | sudo tee -a /etc/redis/redis.conf echo "maxmemory-policy allkeys-lru" | sudo tee -a /etc/redis/redis.conf验证连接:
redis-cli -a YourRedisPassword ping3. NetBox源码部署实战
3.1 代码获取与环境初始化
创建专用用户和目录:
sudo useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox sudo mkdir -p /opt/netbox sudo chown -R netbox:netbox /opt/netbox源码获取与虚拟环境配置:
sudo -u netbox git clone -b v3.5.6 --depth 1 https://github.com/netbox-community/netbox.git /opt/netbox cd /opt/netbox sudo -u netbox python3 -m venv venv依赖安装加速技巧:
sudo -u netbox tee /opt/netbox/pip.conf <<EOF [global] index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com EOF3.2 关键配置文件详解
configuration.py核心参数示例:
# 安全配置 SECRET_KEY = '生成的安全密钥' ALLOWED_HOSTS = ['netbox.yourdomain.com', '192.168.1.100'] # 数据库连接 DATABASE = { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'netboxdb', 'USER': 'netbox', 'PASSWORD': 'YourStrongPassword', 'HOST': 'localhost', 'PORT': '', 'CONN_MAX_AGE': 300, 'OPTIONS': {'sslmode': 'prefer'}, } # 国际化设置 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True生成密钥的安全方法:
sudo -u netbox python3 /opt/netbox/netbox/generate_secret_key.py4. 服务集成与优化
4.1 Gunicorn高级配置
定制化gunicorn.py:
bind = '127.0.0.1:8001' workers = (2 * cpu_count()) + 1 worker_class = 'gunicorn.workers.gthread.ThreadWorker' threads = 3 max_requests = 1000 max_requests_jitter = 50 timeout = 300系统服务配置示例:
# /etc/systemd/system/netbox.service [Unit] Description=NetBox WSGI Service After=network.target [Service] User=netbox Group=netbox WorkingDirectory=/opt/netbox/netbox ExecStart=/opt/netbox/venv/bin/gunicorn \ --pythonpath /opt/netbox/netbox \ --config /opt/netbox/gunicorn.py \ netbox.wsgi Restart=on-failure RestartSec=30s [Install] WantedBy=multi-user.target4.2 Nginx性能调优
推荐配置模板:
upstream netbox { server 127.0.0.1:8001; keepalive 32; } server { listen 80; server_name netbox.yourdomain.com; client_max_body_size 50m; keepalive_timeout 300; location /static/ { alias /opt/netbox/netbox/static/; expires 30d; add_header Cache-Control "public"; } location / { proxy_pass http://netbox; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 600; } }启用HTTP/2和Gzip压缩:
listen 443 ssl http2; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;5. 高级维护技巧
5.1 自动化备份方案
数据库备份脚本示例:
#!/bin/bash BACKUP_DIR="/var/backups/netbox" DATE=$(date +%Y%m%d) pg_dump -U netbox -Fc netboxdb > $BACKUP_DIR/netbox_db_$DATE.dump tar czf $BACKUP_DIR/netbox_media_$DATE.tar.gz /opt/netbox/netbox/media/ find $BACKUP_DIR -type f -mtime +30 -delete5.2 监控指标收集
Prometheus监控端点配置:
# configuration.py 新增 METRICS_ENABLED = True关键监控指标:
- 请求响应时间P99
- PostgreSQL连接池使用率
- Redis内存占用
- 后台任务队列积压
5.3 常见故障排查
启动问题检查清单:
- 检查
systemctl status netbox错误日志 - 验证数据库连接权限
- 确认Redis服务可达性
- 检查静态文件权限(chmod 755)
- 查看
/var/log/nginx/error.log
性能瓶颈定位:
# 数据库慢查询分析 sudo -u postgres pg_stat_activity # Gunicorn工作状态 sudo journalctl -u netbox --since "1 hour ago"6. 定制化开发指南
6.1 菜单本地化实践
修改/opt/netbox/netbox/navigation/menu.py示例:
from django.utils.translation import gettext as _ DEVICES_MENU = Menu( label=_('设备管理'), icon_class='mdi mdi-server', groups=( MenuGroup( label=_('物理设备'), items=( get_model_item('dcim', 'device', _('设备列表')), get_model_item('dcim', 'devicetype', _('设备型号')), ), ), ), )6.2 插件开发环境
创建插件模板:
source /opt/netbox/venv/bin/activate python3 ../manage.py startplugin your_plugin典型插件结构:
your_plugin/ ├── __init__.py ├── models.py ├── api/ ├── templates/ ├── views.py └── urls.py在项目实践中,我们发现通过源码安装虽然初期配置稍复杂,但后期维护和扩展明显更加灵活。特别是在需要修改核心功能或开发定制插件时,这种部署方式展现出独特优势。