
jarischaefer/docker-librenmsLibreNMS 的 Docker 镜像
⚠️ 本文档引用 master 分支,不一定与您运行的版本对应。
建议从您首选版本的源代码归档中提取 README。版本列表见 发布页面。
docker-librenms 是基于 Ubuntu 的 LibreNMS 可定制 Docker 镜像。
容器运行 nginx 1.18+(支持 HTTP/2)、PHP 8.3 FPM(带 OPCache)和 rrdcached,以实现最佳性能。
⚠️ ARM 支持为实验性,详见 此处。
您必须首先生成唯一的加密密钥。
生成密钥
bashdocker run --rm jarischaefer/docker-librenms generate_key
输出示例
base64:Q0+ZV56/5Uwz79vsvS4ZfwQFOty3e9DJEouEy+IXvz8=
⚠️ 确保密钥保密,因为拥有密钥的任何人都可以解密敏感数据。
目前有两种方法可将加密密钥传递给 LibreNMS。无论使用哪种方法,都必须包含完整密钥(包括 base64:)。
可通过 docker run 命令中的 APP_KEY 环境变量传递密钥。
示例
以下命令不完整,仅演示环境变量传递:
bashdocker run -e APP_KEY=base64:Q0+ZV56/5Uwz79vsvS4ZfwQFOty3e9DJEouEy+IXvz8= jarischaefer/docker-librenms
或者,您可以使用 APP_KEY_FILE 环境变量,并将密钥文件挂载到容器内。必须先在主机上创建文件,然后再启动容器(否则 Docker 会创建并挂载目录而非文件)。
示例
以下命令不完整,仅演示环境变量和文件挂载:
bashdocker run -e APP_KEY_FILE=/mount/secret_key -v /path/on/host/secret_key:/mount/secret_key
如果您尚未在 Docker 或其他地方设置 MySQL 服务器,可以创建一个 Docker 容器,详见 此处。
您应阅读 LibreNMS 安装文档 获取数据库设置的最新说明。
截至 2020 年 7 月,需要以下设置(适用于 MariaDB 和 MySQL):
innodb_file_per_table=1 lower_case_table_names=0
此时应已运行 MySQL 服务器。运行命令前,请确保数据库、用户和权限已存在。
接下来,按照 运行容器 中的说明操作。容器启动后,可使用以下命令填充数据库并创建管理员用户。
创建表
bashdocker exec librenms setup_database
创建初始管理员用户
bashdocker exec librenms create_admin
创建的用户属性如下:
创建自定义用户
bashdocker exec librenms create_user user password role email
示例:
bashdocker exec librenms create_user admin secret admin *** docker exec librenms create_user joe secret normal *** docker exec librenms create_user read secret global-read ***
以下示例未涵盖所有可用配置选项,完整列表请参见文档相应部分。
以下示例中,链接的容器名为 my-database-container,其在容器内的别名为 database。如果您要修改,请确保 my-database-container 与 MySQL 容器名称匹配,DB_HOST 与容器内别名匹配。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=x.x.x.x \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
挂载包含 ssl.key、ssl.crt(可选 ssl.ocsp.crt)的目录以启用 HTTPS。还需修改 BASE_URL 并添加 SESSION_SECURE_COOKIE=true。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -p 443:443 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=https://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ -v /data/ssl:/etc/nginx/ssl:ro \ --name librenms \ jarischaefer/docker-librenms
更新现有安装需同时更新镜像和数据库。
docker pull jarischaefer/docker-librenms:{release}自动数据库更新是单容器设置的最便捷方案。
运行 docker exec librenms setup_database。
若要在启动时自动更新数据库,可传递 DAILY_ON_STARTUP=true。请注意,同时重启多个容器可能导致并发问题并损坏数据库。
LibreNMS 实现(截至 2018 年 10 月)通过 memcache 分布式锁避免此问题。因此,若所有容器共享同一 memcache 实例,并发重启是安全的。
⚠️ 配置更改需停止、删除并重启容器才能生效。
以下配置项可通过 -e 参数直接传递:
| 键 | 默认值 | 描述 |
|---|---|---|
| APP_KEY | 加密密钥 | |
| APP_KEY_FILE | 通过文件/密钥挂载的加密密钥 | |
| BASE_URL | LibreNMS 基础 URL(如 [***] | |
| DB_HOST | MySQL IP 或主机名 | |
| DB_PORT | 3306 | MySQL 端口 |
| DB_NAME | MySQL 数据库名 | |
| DB_USER | MySQL 用户 | |
| DB_PASS | MySQL 密码 | |
| DB_PASS_FILE | 通过密钥挂载的 MySQL 密码 | |
| TZ | UTC | 时区(如 Europe/Zurich) |
| PUID | 用户 ID | |
| PGID | 组 ID | |
| PHP_FPM_WORKERS_MIN | 1 | PHP-FPM 最小工作进程数 |
| PHP_FPM_WORKERS_MAX | 4 | PHP-FPM 最大工作进程数 |
| 键 | 默认值 | 描述 |
|---|---|---|
| DISABLE_IPV6 | false | 禁用 nginx IPv6 套接字 |
| MEMCACHED_ENABLE | false | 启用 memcached |
| MEMCACHED_HOST | memcached IP 或主机名 | |
| MEMCACHED_PORT | *** | memcached 端口 |
| NGINX_ENABLE | true | 启用 nginx |
| PHPFPM_ENABLE | true | 启用 PHP-FPM |
| RRDCACHED_ENABLE | true | 启用 rrdcached |
| RRDCACHED_CONNECT | unix:/var/run/rrdcached/rrdcached.sock | LibreNMS 连接的 rrdcached TCP 或 unix 套接字 |
| RRDCACHED_LISTEN | unix:/var/run/rrdcached/rrdcached.sock | rrdcached 监听的 TCP 或 unix 套接字 |
| SKIP_CHOWN | false | 禁用启动时(缓慢的)文件 chown 操作(可能对网络存储有帮助) |
| SNMPTRAPD_ENABLE | false | 启用 SNMP Trap Handler |
| SNMPTRAPD_MIBS | IF-MIB | 通过 -m 传递给 snmptrapd |
| SNMPTRAPD_MIBDIRS | /opt/librenms/mibs | 通过 -M 传递给 snmptrapd |
| LIBRENMS_SERVICE_ENABLE | false | 启用 librenms-service.py |
| LIBRENMS_SERVICE_OPTS | "" | librenms-service.py 选项(如 -v) |
⚠️ 部分值需用引号包裹(如 cron 计划)。
| 键 | 默认值 | 描述 |
|---|---|---|
| ALERTS_ENABLE | true | 启用 LibreNMS 告警 |
| BILLING_CALCULATE_ENABLE | true | 启用 LibreNMS 账单计算 |
| CHECK_SERVICES_ENABLE | true | 启用 LibreNMS 服务检查 |
| DAILY_ENABLE | true | 启用 LibreNMS 每日脚本 |
| DAILY_ON_STARTUP | false | 启动时运行 LibreNMS 每日脚本 |
| DISCOVERY_ENABLE | true | 启用 LibreNMS 发现功能 |
| DISCOVERY_THREADS | 1 | 发现线程数 |
| ENABLE_SYSLOG | false | 启用 LibreNMS syslog(详见) |
| POLL_BILLING_ENABLE | true | 启用 LibreNMS 账单轮询 |
| POLLERS_ENABLE | true | 启用 LibreNMS 轮询器 |
| POLLERS | 8 | 轮询器数量 |
| POLLERS_CRON | "*/5 * * * *" | 轮询器 cron 计划 |
| SNMP_SCAN_ENABLE | false | 启用 snmp-scan cron 任务 |
| SNMP_SCAN_CRON | "0 0 * * *" | snmp-scan cron 计划 |
| WEATHERMAP_ENABLE | false | 启用 weathermap cron 任务(详见) |
| WEATHERMAP_CRON | "*/5 * * * *" | weathermap cron 计划 |
可通过挂载 *.php 文件到 /opt/librenms/conf.d 应用自定义配置。
以下示例将主机 /data/config.interfaces.php 挂载到容器 /opt/librenms/conf.d/config.interfaces.php:
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -p 443:443 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=https://localhost \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ -v /data/ssl:/etc/nginx/ssl:ro \ -v /data/config.interfaces.php:/opt/librenms/conf.d/config.interfaces.php \ --name librenms \ jarischaefer/docker-librenms
config.interfaces.php
php<?php $config['bad_if_regexp'][] = '/^docker[-\w].*$/'; $config['bad_if_regexp'][] = '/^lxcbr[0-9]+$/'; $config['bad_if_regexp'][] = '/^veth.*$/'; $config['bad_if_regexp'][] = '/^virbr.*$/'; $config['bad_if_regexp'][] = '/^lo$/'; $config['bad_if_regexp'][] = '/^macvtap.*$/'; $config['bad_if_regexp'][] = '/gre.*$/'; $config['bad_if_regexp'][] = '/tun[0-9]+$/';
分布式 LibreNMS 安装中,可能需要禁用部分 默认 cron 任务,或本地 rrdcached、nginx 和 php-fpm 服务。也可增加 discovery-wrapper.py 线程数。
bashdocker run \ -d \ -h librenms \ -p 80:80 \ -e APP_KEY=您生成的密钥 \ -e DB_HOST=database \ -e DB_NAME=librenms \ -e DB_USER=librenms \ -e DB_PASS=secret \ -e BASE_URL=http://localhost \ -e POLLERS=16 \ -e TZ=UTC \ -e DISCOVERY_THREADS=2 \ -e DAILY_ENABLE=false \ -e ALERTS_ENABLE=false \ -e CHECK_SERVICES_ENABLE=false \ -e RRDCACHED_ENABLE=false \ -e NGINX_ENABLE=false \ -e PHPFPM_ENABLE=false \ --link my-database-container:database \ -v /data/logs:/opt/librenms/logs \ -v /data/rrd:/opt/librenms/rrd \ --name librenms \ jarischaefer/docker-librenms
在容器内执行命令前,需先从 /etc/librenms_environment 加载环境变量。
以下示例演示如何运行验证脚本:
bashsu - librenms source /etc/librenms_environment cd /opt/librenms php validate.php
上述命令仅为示例,需根据环境自定义。
另请注意:
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务