本页内容
- 先决条件
- 安装依赖
- 创建系统用户
- 配置 PHP-FPM
- 配置 MariaDB 服务器
- 为 LibreNMS 创建 MariaDB 数据库和用户
- 下载并安装 LibreNMS
- 配置 SELinux
- 配置 Firewalld
- 配置 SNMP 服务
- LibreNMS 其他设置
- 配置 Nginx
- 通过 Web 浏览器安装 LibreNMS
- 结论
LibreNMS 是一个支持通过多种协议(包括 SNMP、ARP、OSPF 和 BGP)自动发现的监控工具。要监控操作系统,可以使用 SNMP 协议,该协议在大多数操作系统上都可用,包括 Linux、Windows 和 BSD。
SNMP 协议有三个版本:v1 和 v2 仅使用团体名(community)密码进行保护,而 v3 协议支持用于认证和加密的密码。对于生产环境,建议使用 SNMP v3 协议,它比 v2 和 v1 更安全。
在本指南中,我将向您展示如何在 AlmaLinux 9 服务器上安装 LibreNMS 监控工具。我将使用 PHP-FPM、Nginx Web 服务器和 MariaDB 数据库来运行 LibreNMS。
先决条件
要完成本指南,您必须具备以下条件:
- 一台 AlmaLinux 9 服务器——本演示使用主机名为 almalinux9 的服务器。
- 一个具有 sudo/root 权限的非 root 用户。
安装依赖
首先,您将把 EPEL 和 Remi 仓库添加到系统中。然后,安装 LibreNMS 的软件包依赖。
运行以下 dnf 命令,将 EPEL 仓库和 PHP Remi 仓库添加到您的系统。
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
部分依赖在 EPEL 仓库中可用,因此您必须将 EPEL 添加到系统中。

PHP Remi 仓库将用于安装 PHP-FPM 软件包。

现在,运行以下命令重置 PHP 的默认仓库模块。然后,启用 LibreNMS 所需的 PHP 8.1 版本的 PHP Remi 仓库。
sudo dnf module reset php
sudo dnf module enable php:remi-8.1

接下来,运行以下 dnf 命令安装 LibreNMS 的软件包依赖。这包括 PHP-FPM、Nginx Web 服务器、MariaDB 服务器、一些 Python3 软件包,以及 rrdtool、unzip、ImageMagick、git、fping 等系统工具。
sudo dnf install -y bash-completion cronie fping git ImageMagick mariadb-server mtr net-snmp net-snmp-utils nginx nmap php-fpm php-cli php-common php-curl php-gd php-gmp php-json php-mbstring php-process php-snmp php-xml php-zip php-mysqlnd python3 python3-PyMySQL python3-redis python3-memcached python3-pip python3-systemd rrdtool unzip
安装完成后,进入下一步。

创建系统用户
在本节中,您将创建一个名为 librenms 的新系统用户,用于运行 LibreNMS。
运行以下命令创建新用户 librenms。
sudo useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
详细选项:
- -d /opt/librenms:将新用户的主目录指定为 /opt/librenms。
- -M:不为新用户创建主目录。
- -r:将新用户定义为系统用户。
- -s "$(which bash)":将新用户的 shell 指定为 bash。
配置 PHP-FPM
在接下来的部分中,您将为 LibreNMS 配置 PHP-FPM。您将在系统上设置正确的时区,然后添加一个 LibreNMS 将使用的专用 PHP-FPM 池。首先,运行以下命令配置服务器上的时区。
sudo timedatectl set-timezone Europe/Stockholm
sudo ln -s /usr/share/zoneinfo/Europe/Stockholm /etc/localtime

然后,使用以下 nano 编辑器打开文件 /etc/php.ini。
sudo nano /etc/php.ini
取消注释 date.timezone 参数,并将值更改为适当的时区,如下所示:
date.timezone=Europe/Stockholm
完成后保存并退出文件。
现在,运行以下命令,将默认的 PHP-FPM 池配置复制到 /etc/php-fpm.d/librenms.conf,并使用 nano 编辑器打开它。
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/librenms.conf
sudo nano /etc/php-fpm.d/librenms.conf
将 PHP-FPM 池名称从 www 更改为 librenms。
[librenms]
将默认的用户和用户组更改为 librenms。
user = librenms group = librenms
将新 PHP-FPM 池的默认 sock 文件更改为 /run/php-fpm/librenms.sock。
listen = /run/php-fpm/librenms.sock
完成后保存文件并退出编辑器。
现在,运行以下命令启动并启用 PHP-FPM 服务。
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
然后使用以下命令验证 PHP-FPM 服务,以确保服务正在运行。
sudo systemctl status php-fpm
如果正在运行,您的终端将显示以下输出:

此外,您还可以使用以下命令验证 LibreNMS 的 PHP-FPM sock 文件。
ss -pl | grep php-fpm
如果配置成功,您应该能看到 PHP-FPM sock 文件 /run/php-fpm/librenms.sock 可用。

配置 MariaDB 服务器
配置完 PHP-FPM 后,您将配置 MariaDB 服务器。您将为 MariaDB 服务器添加额外的配置,并通过 mariadb-secure-installation 工具加固 MariaDB。
使用以下 nano 编辑器打开默认的 MariaDB 服务器配置文件 /etc/my.cnf.d/mariadb-server.cnf。
sudo nano /etc/my.cnf.d/mariadb-server.cnf
在 ' [mysqld] ' 小节下插入以下配置。
innodb_file_per_table=1 lower_case_table_names=0
完成后保存文件并退出编辑器。
现在运行以下命令启动并启用 MariaDB 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
接下来,运行以下命令加固您的 MariaDB 服务器安装。
sudo mariadb-secure-installation
您将被问及以下一些配置:
- 将 MariaDB root 用户的认证方式更改为 unix_socket。输入 n 表示否(No)。
- 设置 MariaDB root 密码。输入 y 确认,然后输入新的 MariaDB root 密码并重复。
- 禁止 MariaDB root 用户的远程登录。输入 y 确认。
- 从 MariaDB 中删除默认的 test 数据库。输入 y 确认。
- 从 MariaDB 中删除匿名用户。输入 y 确认。
- 最后,再次输入 y 以重新加载表权限以应用更改。
为 LibreNMS 创建 MariaDB 数据库和用户
配置好 MariaDB 服务器后,接下来您将为 LibreNMS 创建一个新的数据库和用户。
使用以下命令登录 MariaDB 服务器。
sudo mariadb -u root -p
运行以下查询,为 LibreNMS 创建新的数据库和用户。在本演示中,您将创建一个名为 librenms 的新数据库和用户,密码为 librenmspassword。此外,您必须确保 LibreNMS 数据库的默认字符集为 utf8mb4。
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'librenmspassword';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;

现在,运行以下查询验证新用户 librenms 的权限,然后输入 exit 退出 MariaDB。
SHOW GRANTS FOR 'librenms'@'localhost';
exit
下面显示的输出表明用户 librenms 可以访问数据库 librenms。

下载并安装 LibreNMS
在本节中,您将下载 LibreNMS 源代码,设置正确的所有权和权限,然后通过源代码附带的 composer_wrapper 脚本安装 PHP 依赖。
运行以下 git 命令,将 LibreNMS 源代码下载到 /opt/librenms 目录。
git clone https://github.com/librenms/librenms.git /opt/librenms
现在将 /opt/librenms 目录的所有权更改为用户 librenms,并将权限更改为 771。
sudo chown -R librenms:librenms /opt/librenms
sudo chmod 771 /opt/librenms

之后,运行以下命令设置访问控制列表(ACL),并确保一些 LibreNMS 目录具有读、写和执行权限。
sudo setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
sudo setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
接下来,使用以下命令以用户 librenms 身份登录。您应该位于 /opt/librenms 目录。
su - librenms
pwd
运行以下命令安装 LibreNMS 的 PHP 依赖。安装完成后,输入 exit 退出用户 librenms。
./scripts/composer_wrapper.php install --no-dev
exit

配置 SELinux
如果您在 AlmaLinux 9 服务器上启用了强制模式(enforcing)的 SELinux,则必须为 LibreNMS 配置它。在本节中,您将安装 policycoreutils-python-utils 软件包,并为 LibreNMS 设置 SELinux。
运行以下命令安装 policycoreutils-python-utils 软件包。
sudo dnf install -y policycoreutils-python-utils
接下来,运行以下命令为 LibreNMS 源代码设置标签,允许 Web 服务器发送电子邮件,并执行需要内存地址的程序。
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/html(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/(rrd|storage)(/.*)?'
semanage fcontext -a -t httpd_log_t "/opt/librenms/logs(/.*)?"
semanage fcontext -a -t bin_t '/opt/librenms/librenms-service.py'
restorecon -RFvv /opt/librenms
setsebool -P httpd_can_sendmail=1
setsebool -P httpd_execmem 1
chcon -t httpd_sys_rw_content_t /opt/librenms/.env
现在使用以下 nano 编辑器命令创建一个新文件 http_fping.tt。
sudo nano http_fping.tt
将以下配置插入文件。这将允许通过 SELinux 使用 fping 命令。
module http_fping 1.0;
require {
type httpd_t;
class capability net_raw;
class rawip_socket { getopt create setopt write read };
}
#============= httpd_t ==============
allow httpd_t self:capability net_raw;
allow httpd_t self:rawip_socket { getopt create setopt write read };
完成后保存文件并退出编辑器。
最后,运行以下命令编译 http_fping.tt 文件并将其添加到 SELinux。
checkmodule -M -m -o http_fping.mod http_fping.tt
semodule_package -o http_fping.pp -m http_fping.mod
semodule -i http_fping.pp
配置 Firewalld
设置好 SELinux 后,您将配置 firewalld 以开放 HTTP 和 HTTPS 协议。
运行以下 firewall-cmd 命令开放 HTTP 和 HTTPS 端口,然后重新加载 firewalld 以应用更改。
sudo firewall-cmd --add-service={http,https} --permanent
sudo firewall-cmd --reload
现在使用以下命令验证 firewalld 规则列表。如果成功,您应该在规则列表中看到 HTTP 和 HTTPS 协议。
sudo firewall-cmd --list-all

配置 SNMP 服务
SNMP(简单网络管理协议)是网络设备(如调制解调器、交换机和路由器)最广泛使用的协议。在本节中,您将在 LibreNMS 安装上配置 snmpd 服务,用于监控网络设备。
将默认的 SNMP 配置复制到 /etc/snmp/snmpd.conf,并使用下面的 nano 编辑器命令打开它。
sudo cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
sudo nano /etc/snmp/snmpd.conf
将默认的 SNMP 密码 RANDOMSTRINGGOESHERE 更改为新密码。
# Change RANDOMSTRINGGOESHERE to your preferred SNMP community string com2sec readonly default RANDOMSTRINGGOESHERE
完成后保存文件并关闭编辑器。
接下来,下载用于检测 Linux 和 UNIX 操作系统的 LibreNMS 代理工具的二进制文件,并使其可执行。
sudo curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
sudo chmod +x /usr/bin/distro

现在使用以下命令启动并启用 snmpd 服务。
sudo systemctl start snmpd
sudo systemctl enable snmpd
最后,使用以下 systemctl 命令验证 snmpd 服务。
sudo systemctl status snmpd
如果 snmpd 服务正在运行,您应该会看到类似 ' active (running) ' 的输出。

LibreNMS 其他设置
以下部分是 LibreNMS 的一些额外配置。您将设置以下配置:
- 设置 LibreNMS 二进制命令 'lnms' 及其 bash_completion。
- 为 LibreNMS 轮询设置 cron。
- 通过 systemd timer 设置 LibreNMS 调度器。
- 为 LibreNMS 日志设置 logrotate。
首先,为 LibreNMS 命令行 lnms 创建指向 /usr/bin/lnms 的符号链接。然后,将 lnms 命令的 bash 补全脚本复制到 /etc/bash_completion.d/ 目录。
sudo ln -s /opt/librenms/lnms /usr/bin/lnms
sudo cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
现在,以用户 librenms 身份登录并运行 lnms 命令,然后按 TAB 键获取 lnms 命令的可用参数列表。
su - librenms
lnms TAB
您的终端将显示类似的输出。

接下来,运行以下命令将 LibreNMS 的 cron 配置复制到 /etc/cron.d/librenms。
cp /opt/librenms/dist/librenms.cron /etc/cron.d/librenms
然后,使用以下命令复制 LibreNMS 的 logrotate 配置。
sudo cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
之后,将 LibreNMS 调度器服务和定时器复制到 /etc/systemd/system/ 目录,并重新加载 systemd 管理器以应用更改。
sudo cp /opt/librenms/dist/librenms-scheduler.service /opt/librenms/dist/librenms-scheduler.timer /etc/systemd/system/
sudo systemctl daemon-reload
最后,启动并启用 LibreNMS 调度器服务。
sudo systemctl enable librenms-scheduler.timer
sudo systemctl start librenms-scheduler.timer

配置 Nginx
完成所有配置后,现在您将为 LibreNMS 设置 Nginx 服务器块。
使用以下 nano 编辑器命令创建新的 Nginx 服务器块配置文件 /etc/nginx/conf.d/librenms.conf。
sudo nano /etc/nginx/conf.d/librenms.conf
插入以下配置,并确保更改 server_name 选项中的域名。
server {
listen 80;
server_name librenms.howtoforge.local;
root /opt/librenms/html;
index index.php;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/librenms.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi.conf;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
完成后保存文件并退出编辑器。
现在运行以下命令验证 Nginx 配置。如果成功,您应该看到类似 ' test is successful - syntax is ok ' 的输出。
sudo nginx -t
接下来,使用以下命令启动并启用 Nginx 服务。
sudo systemctl start nginx
sudo systemctl enable nginx

然后,输入以下命令验证 Nginx 服务状态,确保服务正在运行。
sudo systemctl status nginx
如果成功,您应该得到以下输出:

通过 Web 浏览器安装 LibreNMS
创建好 Nginx 服务器块配置后,您就可以从 Web 浏览器开始 LibreNMS 的安装了。
启动您的 Web 浏览器并访问 LibreNMS 安装的域名,例如:http://librenms.howtoforge.local 。
在第一个页面上,LibreNMS 将检查并验证您当前的环境。请确保您通过了先决条件检查,然后点击数据库图标以继续。

现在输入您已创建的数据库详细信息,然后点击 Check Credentials(检查凭据)。

然后,点击 Build Database(构建数据库)以迁移 LibreNMS 数据库。

接下来,点击钥匙图标以设置 LibreNMS 的管理员用户和密码。输入管理员用户、密码和电子邮件的详细信息,然后点击 Add User(添加用户)。

现在点击 Finish Install(完成安装)以完成 LibreNMS 的安装。

LibreNMS 安装完成后,您将被重定向到 LibreNMS 登录页面。输入您的管理员用户和密码,然后点击 Login(登录)。

如果成功,您将看到如下的 LibreNMS 仪表盘。您可以根据需要创建和排列 LibreNMS 仪表盘。

最后,您可以使用 validate.php 脚本来确保您拥有正确的 LibreNMS 配置。运行以下命令以用户 librenms 身份登录并执行 validate.php 脚本。
su - librenms
./validate.php
如果您拥有正确的 LibreNMS 配置,所有项目都应显示为 OK 状态,如下所示:

结论
恭喜,您已成功在 AlmaLinux 9 上安装了 LibreNMS 监控工具。您已经安装并配置了 LibreNMS,搭配 MariaDB 数据库服务器和 Nginx Web 服务器。并且还为 LibreNMS 配置了 SELinux 和 firewalld。
此外,请参阅 LibreNMS 文档以添加要监控的新主机或设备。