Installing LibreNMS with NGinx
published onLibreNMS can be used to monitor your network and discover what devices and services you have made available. It has a number of features including Android and iPhone apps if required.
To install it on your system follow the below instructions.
Install NGinx and dependencies
Run the foillowing two commands to install NGinx and all of the dependencies that LibreNMS needs to operate:
sudo apt updatesudo apt install acl curl fping git graphviz imagemagick mtr-tiny nginx-full nmap rrdtool snmp snmpd whois unzip python3-pymysql python3-dotenv python3-redis python3-setuptools python3-systemd python3-pip
Confgure NGinx
Remove the existing nginx.conf file and create a new one by executing sudo rm /etc/nginx/nginx.conf and sudo nano /etc/nginx/nginx.conf and add the below content:
user www-data;
worker_processes auto;
worker_rlimit_core 120540;
worker_rlimit_nofile 120540;
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
reset_timedout_connection on;
send_timeout 2;
keepalive_timeout 30;
keepalive_requests 100000;
client_header_timeout 30;
client_body_timeout 10;
client_body_buffer_size 16K;
client_max_body_size 100m;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
include mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_buffer_size 4k;
ssl_session_tickets off;
ssl_session_timeout 1h;
ssl_session_cache shared:SSL:50m;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
charset utf-8;
charset_types
text/css
text/plain
text/vnd.wap.wml
text/javascript
text/markdown
text/calendar
text/x-component
text/vcard
text/cache-manifest
text/vtt
application/json
application/manifest+json;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log warn;
gzip on;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_min_length 10240;
gzip_http_version 1.1;
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/vnd.ms-fontobject
application/wasm
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/eot
font/opentype
font/otf
font/ttf
image/bmp
image/x-icon
image/svg+xml
text/cache-manifest
text/calendar
text/css
text/javascript
text/markdown
text/plain
text/xml
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
gzip_disable "MSIE [1-6]\.";
# aio on;
directio 4m;
directio_alignment 512;
include ./sites/*;
}
Once you have done this execute the following commands:
sudo mkdir /etc/nginx/sitessudo echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a /etc/nginx/fastcgi.confsudo echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a /etc/nginx/fastcgi_paramscp /etc/nginx/sites-available/default /etc/nginx/sites/default.confsudo systemctl restart nginx
Now install PHP
The below instructions will install PHP 8.2 but you can easily choose whichever version you like by modifying the first command below:
phpver=8.2sudo add-apt-repository ppa:ondrej/php -ysudo apt updatesudo apt install php$phpver-{common,cli,bz2,zip,curl,intl,mysql,snmp,memcached,imagick,gd,imap,ldap,soap,tidy,xml,gmp,pspell,mbstring,opcache,fpm,ssh2,imap,redis,apcu,mcrypt} -ysudo apt install ghostscript imagemagick -y
Next, configure PHP
Run the following block of instructions to make some changes to your PHP configuration files:
sudo cp /etc/php/$phpver/fpm/pool.d/www.conf /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e '/^\[www]/s/^.*$/[librenms]/' /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e '/^\(;\|\)user = www-data/s/^.*$/user = librenms/' /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e '/^\(;\|\)group = www-data/s/^.*$/group = librenms/' /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e '/^\(;\|\)listen.mode = 0660/s/^.*$/listen.mode = 0660/' /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e "/^\(;\|\)listen =/s/^.*$/listen = \/run\/php-fpm-librenms.sock/" /etc/php/$phpver/fpm/pool.d/librenms.confsudo sed -i -e '/^\(;\|\)output_buffering = 4096/s/^.*$/output_buffering = Off/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)zlib.output_compression = Off/s/^.*$/zlib.output_compression = On/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)zlib.output_compression_level = -1/s/^.*$/zlib.output_compression_level = 5/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)expose_php =/s/^.*$/expose_php = Off/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)max_execution_time =/s/^.*$/max_execution_time = 60/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)max_input_time =/s/^.*$/max_input_time = 60/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)max_input_vars =/s/^.*$/max_input_vars = 1000/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)memory_limit =/s/^.*$/memory_limit = 512M/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)post_max_size =/s/^.*$/post_max_size = 8M/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)upload_max_filesize =/s/^.*$/upload_max_filesize = 4M/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)allow_url_fopen =/s/^.*$/allow_url_fopen = Off/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)date.timezone =/s/^.*$/date.timezone = Europe\/London/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)date.timezone =/s/^.*$/date.timezone = Europe\/London/' /etc/php/$phpver/cli/php.inisudo sed -i -e '/^\(;\|\)opcache.enable=/s/^.*$/opcache.enable=1/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)opcache.memory_consumption=/s/^.*$/opcache.memory_consumption=128/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)opcache.max_accelerated_files=/s/^.*$/opcache.max_accelerated_files=10000/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)opcache.revalidate_freq=/s/^.*$/opcache.revalidate_freq=2/' /etc/php/$phpver/fpm/php.inisudo sed -i -e '/^\(;\|\)opcache.save_comments=/s/^.*$/opcache.save_comments=1/' /etc/php/$phpver/fpm/php.inisudo systemctl restart php$phpver-fpm
Now install MariaDB and setup the database
MariaDB can be installed by running the following commands:
sudo apt install mariadb-server mariadb-client -ysudo mysql_secure_installationsudo sed -i -e '/^\(;\|\)bind-address = 127.0.0.1/s/^.*$/bind-address = 127.0.0.1\nlocal_infile = 0\ninnodb_file_per_table=1\nlower_case_table_names=0/' /etc/mysql/mariadb.conf.d/50-server.cnfsudo systemctl enable mariadbsudo systemctl restart mariadb
The database can by set up by executing sudo mysql -u root and entering the following commands on the mySQL command line:
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';exit
Make sure to replace password above with a secure password!
Add the LibreNMS user
sudo useradd librenms -d /opt/librenms -M -r -s "$(which bash)"sudo usermod -a -G librenms www-data
Download and install LibreNMS
The following commands will download and install LibreNMS for you:
cd /optsudo git clone https://github.com/librenms/librenms.gitsudo chown -R librenms:librenms /opt/librenmssudo chmod 771 /opt/librenmssudo 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/sudo su - librenmscd /opt/librenms./scripts/composer_wrapper.php install --no-devexit
Now create an NGinx server block
The one shown below is a simple block to get LibreNMS working. Feel free to adapt it to your own needs. You will obviously replace [domain] with your own domain name. Create the file by running sudo nano /etc/nginx/sites/librenms.conf and adding the following:
server {
listen 80;
server_name [domain];
root /opt/librenms/html;
index index.php;
sudo
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 /etc/nginx/fastcgi.conf;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Now restart NGinx and PHP:
sudo systemctl restart nginxsudo systemctl restart php$phpver-fpm
Download Certbot and get a TLS certificate for your site
Certbot can be installed with:
sudo apt-get install snapdsudo snap install core; sudo snap refresh coresudo snap install --classic certbotsudo ln -s /snap/bin/certbot /usr/bin/certbot
and set up with:
sudo certbot --nginx
Enable command completion if you want it
This can be done by running the following two commands:
sudo ln -s /opt/librenms/lnms /usr/bin/lnmssudo cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
Configure snmpd
SNMP is designed to monitor network devices. To configure it to work with LibreNMS run the following commands:
sudo cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.confsudo nano /etc/snmp/snmpd.conf
change RANDOMSTRINGGOESHERE to your own stringsudo curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distrosudo chmod +x /usr/bin/distrosudo systemctl enable snmpdsudo systemctl restart snmpd
Add a CRON job and enable the scheduler
This allows LIbreNMS to regularly run tasks.
sudo cp /opt/librenms/dist/librenms.cron /etc/cron.d/librenmssudo cp /opt/librenms/dist/librenms-scheduler.service /opt/librenms/dist/librenms-scheduler.timer /etc/systemd/system/sudo systemctl enable librenms-scheduler.timersudo systemctl start librenms-scheduler.timer
Configure logrotate
sudo cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
Finish installing
Visit the site in your browser to finish setting up LibreNMS. Make sure to use the same details as used above when setting up your database.
When LibreNMS has finished installing don't choose to validate until you have first added localhost.
Adding localhost to your new LibreNMS system
Log in to your new LibreNMS system if you aren't already logged in. Select Devices then Add device. Now enter the hostname as localhost, the SNMP port as 161 and Community as the same string you entered in the snmp.conf file configured above.
Conclusion
You have now finished installing LibreNMS. You should now read the online documentation at https://docs.librenms.org/ to find out how to set up, discover and monitor all of your network devices.
