前阵子要给手底下的一批交换机和防火墙补一套监控系统,本来想用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安装与安全初始化
数据库我直接用MariaDB,Ubuntu24.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 'librenms'@'localhost' IDENTIFIED BY '这里填一个强密码'; GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost'; 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。先安装Composer:
curl -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_KEY
Librenms的配置模板是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_KEY=base64:...。到这里,后端代码和数据库账号都准备好了,下一步配置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 ug+rwX /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用户添加cron:
sudo crontab -u librenms -e写入以下内容:
* * * * * /usr/bin/env php /opt/librenms/artisan schedule:run >> /dev/null 2>&1注意/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 全部设备也可以指定设备ID:
sudo -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-FPM:
sudo 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或查看设备页面,确认数据流没有中断。监控系统的价值在于持续可靠,装好只是开始,后面做好维护和备份才是真正省心的地方。