
前阵子要给手底下的一批交换机和防火墙补一套监控系统本来想用Zabbix结果发现自动发现网络设备这块还是有点折腾后来在Ubuntu24.04上完整部署了一遍Librenms从环境准备到设备上线全流程走下来整体体验比想象中顺。网上不少教程还停留在20.04或者22.04时代PHP版本、FPM socket路径、MariaDB认证方式全对不上很多人就卡在半路了。这篇就把Librenms在Ubuntu24.04下的完整安装与配置过程加上我实际操作中踩过和排查过的几个坑一次说清楚。这套指南适用于想用开源方案统一监控路由器、交换机、无线AP、服务器等设备对SNMP有一定了解、但不希望花大量精力手动构图和维护数据库的人。如果你之前用过Cacti或Nagios迁移到Librenms会明显感觉省心不少。1. 为什么是Librenms以及Ubuntu24.04的版本适配逻辑1.1 它和Zabbix、Cacti的定位差异先说我为什么最终选了Librenms而不是Zabbix或Cacti。Librenms的核心定位是自动发现型网络监控系统它主要走SNMP协议装好之后你只需要填设备的IP和SNMP团体字系统会自动识别设备类型、抓取接口列表、生成CPU/内存/流量图形。它不是一个以Agent为核心的系统——虽然也支持Linux/Windows的Agent扩展但日常用网络设备监控靠SNMP就够了。Cacti的缺点是每台设备、每个图形基本都要手动维护RRD文件管理起来也麻烦。Zabbix功能强但你要监控一台交换机得先配模板、配主机、配触发器自动发现规则也要自己写初始成本高。Librenms的思路是NMS网络管理系统自动搞定大部分事设备添加后图形、告警、Syslog、Oxidized配置备份这些模块都能联动起来对网络运维场景特别友好。我做过一个小范围对比在同一台24.04服务器上分别装过这三个系统Librenms的部署速度是最快的尤其当你需要快速接入大量同型号交换机时自动发现功能比手动加主机高效太多。1.2 Ubuntu24.04的软件源版本匹配Ubuntu24.04 LTS发布于2024年4月是Noble Numbat版本。它的软件源里默认就是PHP 8.3、MariaDB 10.11、Nginx 1.24这几个版本对Librenms来说都是正合适的组合。Librenms官方文档明确要求PHP 8.1到8.3数据库用MySQL 5.7以上或MariaDB 10.4以上Web服务器推荐Nginx或Apache。换句话说24.04软件源里能直接apt装到的版本完全满足Librenms的依赖要求不需要额外加PPA或者编译安装。这一点在22.04之前其实有点问题20.04软件源里的PHP是7.4装Librenms还得找第三方源22.04默认PHP是8.1刚刚够用24.04给到了8.3处于Librenms支持区间的上限性能和兼容性都更稳妥。所以如果你正准备新装监控系统直接用24.04作为载体是很划算的——省掉了版本折腾后续用apt upgrade也能跟着LTS走安全更新。2. 系统环境准备PHP8.3、MariaDB、SNMP套件一次装齐2.1 基础环境设置时区、主机名、系统更新安装Librenms之前我建议先把系统底子收拾干净。首先是时区Librenms对时间一致性很敏感轮询器、告警、图形的时间戳都依赖它。如果服务器时区是UTC浏览器里看到的时间比中国时间少8小时排查问题时会非常困惑。设置时区sudo timedatectl set-timezone Asia/Shanghai date然后设置一个固定的主机名方便之后在Web界面和告警通知里辨认。主机名不要用带下划线的格式Librenms的验证脚本可能会提示主机名不合法sudo hostnamectl set-hostname nms-serverDNS解析也要顺手确认/etc/resolv.conf里能正常解析外网域名即可后面git clone和composer下载都要走网络。接着更新系统源和软件包sudo apt update sudo apt upgrade -y sudo reboot更新完重启一下让内核和基础库都处于干净状态。这一步别省尤其是老机器或者刚装的虚拟机跳过重启偶尔会出现PHP扩展和系统库版本不匹配的怪问题。2.2 PHP8.3及扩展安装Librenms是PHP应用依赖大量PHP扩展。Ubuntu24.04下直接apt安装即可官方文档给出的依赖清单里包含php8.3-cli、fpm、mysql、gd、curl、xml、mbstring、snmp、zip、intl、bcmath等。我在实际安装时用的是下面这组sudo apt install -y nginx-full mariadb-server mariadb-client \ php8.3-cli php8.3-fpm php8.3-mysql php8.3-gd php8.3-curl \ php8.3-xml php8.3-mbstring php8.3-snmp php8.3-zip \ php8.3-intl php8.3-bcmath \ rrdtool snmp snmpd whois fping mtr-tiny nmap git acl \ python3 python3-pip imagemagick graphviz unzip这里说几个容易踩的点。第一不要去找php8.3-json这个包Ubuntu24.04的PHP8.3已经把JSON扩展内置了单独安装会报无法定位软件包。第二php8.3-snmp必须装否则Librenms轮询时没法调用SNMP函数后面你会看到一堆奇怪的报错。第三rrdtool和fping是画图与连通性检测的关键组件librenms的图形和poller模块会调它们漏装的话Web界面某些菜单会提示缺少命令。装完验证一下PHP版本和已加载的模块php -v php -m | grep -E snmp|gd|mbstring|mysqli|xml|zip|intl确保snmp、gd这些关键模块都出现在列表里再往下走。2.3 MariaDB安装与安全初始化数据库我直接用MariaDBUbuntu24.04源里默认为10.11兼容性和性能都够用。安装后先启动服务再做安全初始化sudo systemctl enable --now mariadb sudo mysql_secure_installation这里要注意一个Ubuntu24.04下的认证差异默认root用户走的是unix_socket认证也就是说在系统shell里用root身份执行sudo mysql可以无密码进入数据库但用TCP远程连root是连不上的。这不是故障是Debian系的新默认策略。安全初始化向导里会让你设置root密码、移除匿名用户、禁用root远程登录等按提示做就行。设置完root认证后创建Librenms专用的数据库账号。我不建议直接用root跑应用万一Web层被入侵数据库权限就全丢了。创建专用用户并限制它只能访问librenms库CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER librenmslocalhost IDENTIFIED BY 这里填一个强密码; GRANT ALL PRIVILEGES ON librenms.* TO librenmslocalhost; FLUSH PRIVILEGES;数据库字符集这里我单独强调一下Librenms在处理中文设备名、描述信息时utf8mb4比utf8更稳妥能存emoji和一些特殊字符。如果建库的时候忘了指定后面改起来很麻烦不如一开始就建对。3. 源码部署与数据库初始化3.1 克隆Librenms源码与目录规划Librenms官方推荐把源码clone到/opt/librenms目录而不是/var/www/html。这样做的好处是Web根目录和程序目录分离更清晰配合/opt/librenms/html作为Nginx的root安全性和可维护性都比直接丢到web目录里好。先创建专用系统用户并设定家目录为/opt/librenms这个用户后面既负责跑轮询器也负责更新代码sudo useradd -r -M -d /opt/librenms librenms接着克隆代码sudo git clone https://github.com/librenms/librenms.git /opt/librenms克隆完成后代码目录的属主是root需要递归改给librenms用户sudo chown -R librenms:librenms /opt/librenms然后看一眼目录结构/opt/librenms/html是Web入口/opt/librenms/app、/opt/librenms/routes是Laravel框架代码/opt/librenms/scripts里放了一堆辅助脚本。这个布局理解清楚了后面配置Nginx和定时任务时才不会迷路。3.2 Composer安装依赖内存限制与国内镜像Librenms的PHP依赖是通过Composer管理的git clone下来之后还没有vendor目录必须执行composer install。先安装Composercurl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer如果你是上海或者华东地区的服务器连接Composer官方镜像经常会非常慢甚至超时。我建议直接改用阿里云或腾讯云的Composer镜像composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/然后切换到librenms用户执行依赖安装sudo su - librenms cd /opt/librenms composer install --no-dev执行composer install的时候大概率会遇到一个经典问题PHP内存耗尽。报错类似PHP Fatal error: Allowed memory size of 134217728 bytes exhausted。这是因为默认memory_limit是128M而Librenms的依赖树比较大。解决方法是临时提高内存限制COMPOSER_MEMORY_LIMIT-1 composer install --no-dev安装过程会持续几分钟期间如果提示某个扩展缺失返回上一节把对应的php8.3-*包补上再重试。装完验证vendor目录是否生成ls /opt/librenms/vendor/ | head看到autoload.php等文件存在就说明依赖这边没问题了。3.3 配置config.php与生成APP_KEYLibrenms的配置模板是config.php.default先复制成正式配置cd /opt/librenms cp config.php.default config.php然后用vim或nano编辑config.php重点改以下几项?php $config[db_host] localhost; $config[db_port] 3306; $config[db_user] librenms; $config[db_pass] 刚才设置的数据库密码; $config[db_name] librenms; $config[base_url] http://你的服务器IP或域名;这里db_host用localhost即可Librenms会通过MySQL socket连数据库比TCP连接更安全也更快。base_url决定了之后Web界面里生成的各种链接地址如果填错初始化后点击菜单可能会出现URL异常。配置文件就绪后生成Laravel的APP_KEY。这一步很多教程会跳过但Librenms初始化检查会报错因为加密签名依赖它cd /opt/librenms php artisan key:generate执行成功后config.php底部会自动生成一段APP_KEYbase64:...。到这里后端代码和数据库账号都准备好了下一步配置Web服务。4. Web服务与调度任务Nginx、PHP-FPM、Cron一个都不能少4.1 Nginx站点配置的关键细节Librenms对Web服务器的要求不高Nginx跑起来最省资源。在Ubuntu24.04的Nginx里站点配置放在/etc/nginx/sites-available/然后软链到sites-enabled。我写一个可以直接用的配置段server { listen 80; server_name librenms.example.com; root /opt/librenms/html; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; } location ~ /\.(?!well-known).* { deny all; } }这里有三个容易出问题的地方。第一root必须指向/opt/librenms/html如果你写成/opt/librenms浏览器访问时会直接暴露Laravel的目录结构而且CSS、JS都加载不出来。第二PHP-FPM的socket路径是Ubuntu24.04下的/run/php/php8.3-fpm.sock和22.04之前版本不一样写错会导致502 Bad Gateway。第三try_files必须包含/index.php?$query_string否则不带路由的访问会变成404。保存后启用配置sudo ln -s /etc/nginx/sites-available/librenms.conf /etc/nginx/sites-enabled/librenms.conf sudo nginx -t sudo systemctl reload nginxnginx -t显示ok再reload千万别跳过语法检查直接reload。4.2 PHP-FPM与目录权限PHP-FPM在Ubuntu24.04下默认以www-data用户运行。Librenms的storage和bootstrap/cache目录需要被Web进程写入同时librenms用户也要能访问这些目录否则轮询器写入缓存时会出现权限不足。我的做法是保留目录属主为librenms但通过ACL给www-data加写权限sudo chown -R librenms:librenms /opt/librenms/storage /opt/librenms/bootstrap/cache sudo chmod -R ugrwX /opt/librenms/storage /opt/librenms/bootstrap/cache sudo setfacl -R -m u:www-data:rwX /opt/librenms/storage /opt/librenms/bootstrap/cache sudo setfacl -d -R -m u:www-data:rwX /opt/librenms/storage /opt/librenms/bootstrap/cache不熟悉ACL的话可以简单理解成给Web用户单独发了一张通行证让它能写这两个目录同时不破坏librenms用户对目录的所有权。如果漏掉这一步Web初始化时大概率会遇到目录不可写的红色警告。4.3 定时任务与轮询调度Librenms的轮询器、发现器、告警检查全部由Laravel的调度器负责而调度器本身依赖系统cron每分钟触发一次。用librenms用户添加cronsudo crontab -u librenms -e写入以下内容* * * * * /usr/bin/env php /opt/librenms/artisan schedule:run /dev/null 21注意/usr/bin/env php是为了让cron环境里能找到php命令。如果你用/usr/bin/php这种绝对路径也可以但要确认php实际安装路径。Ubuntu24.04下php路径通常是/usr/bin/php8.3直接写/usr/bin/php也行因为它是指向php8.3的软链。保存后验证定时任务是否生效sudo crontab -u librenms -l定时任务配好后Librenms会按自己的内部任务表每分钟检查一次自动调度poller和discovery不需要你再单独加轮询脚本的cron。5. 完成Web初始化向导与添加首个监控设备5.1 初始化向导各字段怎么填浏览器访问http://你的服务器IP会进入Librenms的初始化向导。第一步是数据库配置校验填数据库名、用户名、密码点击校验后系统会检查数据库连接、目录权限、PHP模块完整性。这里如果看到红色错误基本都能在下方提示里定位到具体原因比如某个PHP扩展缺失或目录不可写。校验通过后第二步是创建管理员账号填一个邮箱地址和强密码。这个账号是Web界面的超级管理员后续添加设备、配置告警都用它登录。第三步是设置Base URL。如果之前config.php里已经填对了这里通常会自动识别。第四步会提示选择时区和语言我之前已经设置过系统时区这里默认就能对上。初始化完成后进入主界面左侧菜单能看到Overview、Devices、Health、Alert等模块。刚装好的系统没有一个设备数据面板是空的这很正常。5.2 SNMP配置与设备添加验证在添加设备之前先确认目标设备支持SNMP且网络可达。我一般先用snmpwalk做一次快速验证snmpwalk -v2c -c public 192.168.1.1 system能返回类似SNMPv2-MIB::sysDescr.0 STRING: ...的信息说明SNMP是通的。SNMP团体字在真实环境中建议改成强团体字不要用public否则任何人都能读取设备信息。然后在Web界面点Devices - Add Device填写设备IP或主机名选择SNMP版本v2c填团体字其余选项默认即可。点击添加后Librenms会立即做一次快速探测并加入设备列表。添加完成后手动触发一次poller验证数据是否正常采集sudo -u librenms /opt/librenms/poller.php -h 全部设备也可以指定设备IDsudo -u librenms /opt/librenms/poller.php -h 1执行完去Web界面点击该设备正常能看到接口列表、CPU、内存等数据开始出现。如果poller输出中有ERROR那就要回到前面的检查链路里找原因了。6. 我实际踩过的坑与日常维护命令6.1 坑时区不一致导致图形和告警时间错位这是我最开始忽略的问题。系统时区设成了Asia/Shanghai但PHP-FPM的php.ini里date.timezone没有设置导致PHP默认用UTC时间最终Web界面里图形的时间轴和真实时间差了8个小时告警通知里的时间也对不上。排查了半天才发现不是时区配置没生效而是PHP进程的时区独立于系统。修复方式sudo vim /etc/php/8.3/fpm/php.ini找到;date.timezone 改成date.timezone Asia/Shanghai然后重启PHP-FPMsudo systemctl restart php8.3-fpm同时建议确认MariaDB的时区也一致执行SELECT NOW();看看返回时间是否正常。6.2 坑Composer安装卡死与内存耗尽我在另一台配置较低的虚拟机上也装过一次composer install执行到一半直接报了内存耗尽。网上很多解决办法是改php.ini里的memory_limit但更好的做法是直接用环境变量指定COMPOSER_MEMORY_LIMIT-1 sudo -u librenms composer install --no-dev另外国内服务器不配镜像的话Composer会一直卡在下载依赖上看着像死机其实是连不上Packagist。用阿里云镜像后整个安装过程从上十分钟缩短到三四分钟体验差别很大。6.3 日常维护与验证命令Librenms自带一个验证脚本任何配置改动之后先跑它sudo -u librenms /opt/librenms/validate.php它会检查代码版本、数据库结构、目录权限、PHP模块等有警告会给出修复建议。日常升级我也习惯看它的版本和一致性检查结果。日志主要看这几个文件tail -f /opt/librenms/logs/librenms.log tail -f /opt/librenms/logs/poller.log如果设备监控数据不更新优先看这两个日志而不是重启服务。poller日志会明确告诉你哪台设备轮询超时或SNMP请求失败。最后再分享一个小习惯每次执行完会修改配置或升级代码的操作后记得跑一次sudo -u librenms /opt/librenms/poller.php -h 1或查看设备页面确认数据流没有中断。监控系统的价值在于持续可靠装好只是开始后面做好维护和备份才是真正省心的地方。