This guide provides a complete Ansible playbook to install NetXMS from official repositories with proper configuration for network monitoring, data collection, and web console.
Current NetXMS version: 5.1
Create a file named netxms.yml:
---
- name: Install and Configure NetXMS
hosts: netxms
become: true
vars:
netxms_version: "5.1"
netxms_server_port: 4700
netxms_web_port: 8080
netxms_config_dir: "/var/lib/netxms"
netxms_admin_password: "netxms_admin_123" # Change this!
db_type: "sqlite" # Options: sqlite, postgresql
postgres_password: "postgres_secure_password"
tasks:
- name: Add NetXMS repository (Debian/Ubuntu)
apt_repository:
repo: "deb http://download.netxms.org/deb stable main"
state: present
filename: netxms
when: ansible_os_family == "Debian"
- name: Add NetXMS GPG key (Debian/Ubuntu)
apt_key:
url: http://download.netxms.org/gpg.key
state: present
when: ansible_os_family == "Debian"
- name: Install NetXMS server (Debian/Ubuntu)
apt:
name:
- netxms-server
- netxms-console
- netxms-web
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install prerequisites (RHEL/CentOS)
yum:
name:
- wget
- gcc
- make
- postgresql-server
- postgresql-contrib
state: present
when: ansible_os_family == "RedHat"
- name: Download and install NetXMS (RHEL/CentOS)
shell: |
wget -O /tmp/netxms.rpm http://download.netxms.org/rpm/netxms-server-{{ netxms_version }}.x86_64.rpm &&
yum install -y /tmp/netxms.rpm
args:
creates: /usr/sbin/netxmsd
when: ansible_os_family == "RedHat"
- name: Install PostgreSQL (if selected)
package:
name:
- postgresql
- postgresql-contrib
state: present
when: db_type == "postgresql"
- name: Initialize PostgreSQL database
command: postgresql-setup --initdb
when:
- db_type == "postgresql"
- ansible_os_family == "RedHat"
args:
creates: /var/lib/pgsql/data/PG_VERSION
- name: Enable and start PostgreSQL
systemd:
name: postgresql
enabled: true
state: started
when: db_type == "postgresql"
- name: Create NetXMS database (PostgreSQL)
become_user: postgres
postgresql_db:
name: netxms
state: present
when: db_type == "postgresql"
- name: Create NetXMS database user (PostgreSQL)
become_user: postgres
postgresql_user:
name: netxms
password: "{{ postgres_password }}"
db: netxms
priv: ALL
state: present
when: db_type == "postgresql"
- name: Configure NetXMS server
copy:
dest: "{{ netxms_config_dir }}/netxmsd.conf"
owner: netxms
group: netxms
mode: '0644'
content: |
# NetXMS Server Configuration
# Database configuration
{% if db_type == "postgresql" %}
DBDriver=pgsql
DBName=netxms
DBLogin=netxms
DBPassword={{ postgres_password }}
DBServer=localhost
{% else %}
DBDriver=sqlite3
DBName={{ netxms_config_dir }}/netxms.db
{% endif %}
# Server settings
ServerListenAddress=0.0.0.0
ServerPort={{ netxms_server_port }}
# Logging
LogLevel=6
LogFile={{ netxms_config_dir }}/netxmsd.log
# Performance
MaxDBConnections=10
CacheSize=128M
- name: Configure NetXMS web interface
copy:
dest: /etc/netxms/web.conf
owner: root
group: root
mode: '0644'
content: |
# NetXMS Web Configuration
ServerAddress=localhost
ServerPort={{ netxms_server_port }}
WebPort={{ netxms_web_port }}
AdminPassword={{ netxms_admin_password }}
- name: Set proper permissions
file:
path: "{{ netxms_config_dir }}"
owner: netxms
group: netxms
mode: '0755'
recurse: true
- name: Enable and start NetXMS server
systemd:
name: netxmsd
enabled: true
state: started
- name: Enable and start NetXMS web
systemd:
name: netxms-web
enabled: true
state: started
- name: Wait for NetXMS to start
wait_for:
port: "{{ netxms_server_port }}"
delay: 5
timeout: 120
- name: Configure firewall (UFW)
ufw:
rule: allow
port: "{{ item }}"
proto: tcp
comment: "NetXMS service"
loop:
- "{{ netxms_server_port }}"
- "{{ netxms_web_port }}"
when: ansible_os_family == "Debian"
failed_when: false
- name: Configure firewall (firewalld)
firewalld:
port: "{{ item }}/tcp"
permanent: true
immediate: true
state: enabled
loop:
- "{{ netxms_server_port }}"
- "{{ netxms_web_port }}"
when: ansible_os_family == "RedHat"
failed_when: false
- name: Verify NetXMS is running
command: nxadm status
register: netxms_check
changed_when: false
failed_when: false
- name: Display NetXMS status
debug:
msg: |
NetXMS {{ netxms_version }} installed successfully!
Server Port: {{ netxms_server_port }}
Web Interface: http://{{ ansible_default_ipv4.address | default(ansible_host) }}:{{ netxms_web_port }}
Admin Password: {{ netxms_admin_password }}
IMPORTANT: Change the default password after first login!
Configuration directory: {{ netxms_config_dir }}
Database: {{ db_type }}
---
netxms:
hosts:
netxms-server:
ansible_host: 192.168.1.120
ansible_user: ansible
ansible_become: true
# Test connectivity
ansible all -i inventory.yml -m ping
# Run the NetXMS playbook
ansible-playbook -i inventory.yml netxms.yml
# Run with PostgreSQL database
ansible-playbook -i inventory.yml netxms.yml \
-e "db_type=postgresql"
# Check NetXMS service status
ssh netxms-server "sudo systemctl status netxmsd"
# Check NetXMS web status
ssh netxms-server "sudo systemctl status netxms-web"
# Test server connection
ssh netxms-server "nxadm status"
# Access web UI
# http://netxms-server:8080
- name: Add network nodes to NetXMS
hosts: netxms
become: true
vars:
netxms_config_dir: "/var/lib/netxms"
nodes_to_monitor:
- name: router-1
address: 192.168.1.1
type: router
- name: switch-1
address: 192.168.1.2
type: switch
- name: server-1
address: 192.168.1.50
type: server
tasks:
- name: Create node configuration
copy:
dest: "{{ netxms_config_dir }}/nodes.conf"
owner: netxms
group: netxms
mode: '0644'
content: |
# NetXMS Node Configuration
{% for node in nodes_to_monitor %}
<node "{{ node.name }}">
address {{ node.address }}
type {{ node.type }}
polling_interval 60
snmp_community public
snmp_version 2c
</node>
{% endfor %}
- name: Restart NetXMS server
systemd:
name: netxmsd
state: restarted
- name: Configure SNMP monitoring in NetXMS
hosts: netxms
become: true
vars:
netxms_config_dir: "/var/lib/netxms"
snmp_community: "private"
snmp_version: "2c"
tasks:
- name: Update NetXMS config for SNMP
lineinfile:
path: "{{ netxms_config_dir }}/netxmsd.conf"
regexp: "^#?SNMP"
line: "{{ item }}"
loop:
- "DefaultSNMPCommunity={{ snmp_community }}"
- "DefaultSNMPVersion={{ snmp_version }}"
insertafter: EOF
- name: Restart NetXMS server
systemd:
name: netxmsd
state: restarted
- name: Configure NetXMS alerts
hosts: netxms
become: true
vars:
netxms_config_dir: "/var/lib/netxms"
alert_email: "admin@example.com"
tasks:
- name: Create alert configuration
copy:
dest: "{{ netxms_config_dir }}/alerts.conf"
owner: netxms
group: netxms
mode: '0644'
content: |
# NetXMS Alert Configuration
<alert "Node Down">
condition node_status != NODE_STATUS_UP
severity critical
notification email
email_to {{ alert_email }}
</alert>
<alert "High CPU">
condition cpu_usage > 80
severity major
notification email
email_to {{ alert_email }}
</alert>
<alert "High Memory">
condition memory_usage > 90
severity major
notification email
email_to {{ alert_email }}
</alert>
- name: Restart NetXMS server
systemd:
name: netxmsd
state: restarted
# Check server logs
sudo tail -f /var/lib/netxms/netxmsd.log
# Check web logs
sudo tail -f /var/log/netxms/web.log
# Verify configuration
sudo nxadm configtest
# Check SQLite database
sudo ls -la /var/lib/netxms/netxms.db
# Check PostgreSQL connection
sudo -u postgres psql -d netxms -c "\dt"
# Test database connection
sudo nxadm dbtest
# Check web service status
sudo systemctl status netxms-web
# Test web interface
curl http://localhost:8080
# Check firewall
sudo ufw status | grep 8080
Beyond this playbook, we offer:
Contact our automation team: office@linux-server-admin.com