Because i started with LibreNMS and then with Netbox, i saw that eNMS can be synced with Librenms. The installation documentation was not the best, really don’t know the exact reason behind. No VM machine for DEMO. I’m guessing that docker demo can be the easier to do it but if i have enough space, i would like to avoid it.
Because i recently did a Netbox installation, i discovered that 80% of eNMS installation is really the same and i’m going to explain how i did it. I don’t know if this is the right way, the perfect way or not but at least this works for me.
First think first, the installation has been done to a really new VM machine with Ubuntu 18.04, updated today.
Step1. Update the VM of Ubuntu 18.04 to the latest package updates.
sudo apt-get update
Step2. We are going install and prepare the database.
Based on the documentation, database can be MySQL or PostgreSQL. Because i just did the installation for Netbox, we are going to use PostgreSQL as database for this.
sudo apt-get install -y postgresql libpq-dev
sudo -u postgres psql
And to create database we are going to use the below commands (without postgres=#):
postgres=# CREATE DATABASE enms;
postgres=# CREATE USER enms WITH PASSWORD 'enms_password';
postgres=# GRANT ALL PRIVILEGES ON DATABASE enms TO enms;
postgres=# \q
Step3. We are going to install all package dependecies.
sudo apt-get install -y python3 python3-pip python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev redis-server zlib1g-dev
Step4. Preparing the application and download it from the source GIT.
cd /opt
sudo apt-get install -y git
sudo git clone https://github.com/afourmy/eNMS.git
Step5. Installation the python requirements from the application eNMS.
The requirements files are located in: “/opt/eNMS/build/requirements/” . To install requirements we are going to:
pip3 install -r /opt/eNMS/build/requirements/requirements.txt
Add python3 command to run as python simple command. The reason is that some scripts inside application are running with “python” command but they require to have python3 at least installed.
sudo ln -s /usr/bin/python3 /usr/bin/python
And install some other requirements for database but not only:
pip3 install --upgrade setuptools
sudo apt-get install libpcap-dev libpq-dev
sudo apt-get install python3.6-dev libmysqlclient-dev
pip3 install -r /opt/eNMS/build/requirements/requirements_db.txt
Step6. Based on the documentation, to run the application dev mode, we have to run this:
cd /opt/eNMS/
export FLASK_APP=app.py
flask run --host=0.0.0.0
And the application should be reachable on the port 5000.
root@enms:/opt/eNMS# flask run --host=0.0.0.0
* Serving Flask app "app.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
...
2020-07-30 12:52:52,224 INFO Loading service: /opt/eNMS/eNMS/services/data_validation/napalm_getters.py
2020-07-30 12:52:52,228 INFO Loading service: /opt/eNMS/eNMS/services/data_validation/scrapli.py
2020-07-30 12:52:52,233 INFO Loading service: /opt/eNMS/eNMS/services/data_validation/netmiko_validation.py
2020-07-30 12:52:52,649 INFO * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Step7. We have to deploy the application into the production mode. For this we have to run:
cd /opt/eNMS/
export DATABASE_URL="postgresql://enms:enms_password@localhost/enms"
export SECRET_KEY=a1b2c3d4e5
gunicorn --config gunicorn.py app:app
And the results are:
2020-07-30 10:45:01,522 INFO Topology successfully imported.
2020-07-30 10:45:01,523 ERROR Git pull failed (/opt/eNMS/network_data)
2020-07-30 10:45:01,550 INFO CREATION: server '345051660178'
[2020-07-30 10:45:01 +0000] [29361] [INFO] Starting gunicorn 20.0.4
[2020-07-30 10:45:01 +0000] [29361] [DEBUG] Arbiter booted
[2020-07-30 10:45:01 +0000] [29361] [INFO] Listening at: http://0.0.0.0:5000 (29361)
[2020-07-30 10:45:01 +0000] [29361] [INFO] Using worker: sync
[2020-07-30 10:45:01 +0000] [29437] [INFO] Booting worker with pid: 29437
[2020-07-30 10:45:01 +0000] [29361] [DEBUG] 1 workers
...
2020-07-30 10:42:28,666 INFO * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Having gunicorn running the application we can continue using the Netbox installation guide to finish our deployment.
Step8. Start nginx and Supervisor and configure them for our application.
sudo apt install -y nginx
sudo apt install -y supervisor
And for the nginx configuration we have:
sudo cp /opt/eNMS/build/nginx/enms.conf /etc/nginx/sites-available/
cd /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/enms.conf
For the Supervisor application we have:
sudo nano /etc/supervisor/conf.d/enms.conf
and inside of the file “enms.conf” we have:
[program:enms]
command = gunicorn --config gunicorn.py app:app
directory = /opt/eNMS/
Give permision to log files:
sudo chmod 777 /opt/eNMS/logs/enms.log
sudo chmod 777 /opt/eNMS/logs/security.log
Save the file and restart both services:
sudo service nginx restart
sudo service supervisor restart
and the application is now reachable. To test this you can do also:
sudo service supervisor status
And you should have as results:
paulierco@enms:/opt/eNMS$ sudo service supervisor status
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-07-30 13:17:02 UTC; 58s ago
Docs: http://supervisord.org
Process: 31347 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS)
Main PID: 31431 (supervisord)
Tasks: 2 (limit: 4659)
CGroup: /system.slice/supervisor.service
├─31431 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
└─31448 /usr/bin/python3 /usr/local/bin/gunicorn --config gunicorn.py app:app
Jul 30 13:17:02 enms systemd[1]: Started Supervisor process control system for UNIX.
Jul 30 13:17:02 enms supervisord[31431]: 2020-07-30 13:17:02,566 CRIT Supervisor running as root (no user in config file)
Jul 30 13:17:02 enms supervisord[31431]: 2020-07-30 13:17:02,567 INFO Included extra file "/etc/supervisor/conf.d/enms.conf" during parsing
Jul 30 13:17:02 enms supervisord[31431]: 2020-07-30 13:17:02,577 INFO RPC interface 'supervisor' initialized
Jul 30 13:17:02 enms supervisord[31431]: 2020-07-30 13:17:02,577 CRIT Server 'unix_http_server' running without any HTTP authentication checking
Jul 30 13:17:02 enms supervisord[31431]: 2020-07-30 13:17:02,577 INFO supervisord started with pid 31431
Jul 30 13:17:03 enms supervisord[31431]: 2020-07-30 13:17:03,581 INFO spawned: 'enms' with pid 31448
Jul 30 13:17:04 enms supervisord[31431]: 2020-07-30 13:17:04,671 INFO success: enms entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
paulierco@enms:/opt/eNMS$
Default username and passwords are: admin/admin. You can read documentation how you can do some changes.
3 comments On Installing and Troubleshooting eNMS
Hi,,
this is great tutorial, did you have any documentation how to integrate LibreNMS and eNMS ?
Great content! You’re doing an awesome job!
you forgot to mention that the env variable for specifying the use of postgres in supervisor conf