GUI installation: Difference between revisions

From VoIPmonitor.org
(Add troubleshooting for 'license token is empty' and 'hwid invalid or corrupted' errors during installation)
(Merge content from GUI_Installation (uppercase) - consolidated into single comprehensive page)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
*Download the latest GUI tar.gz package from http://www.voipmonitor.org/download-gui?version=latest
= GUI Installation =
*Untar to /var/www/ (On debian like systems) or /var/www/html (On redhat like systems) and rename created folder to voipmonitor
*Open web browser and point it to voipmonitor http://yourserver/voipmonitor (you can choose whatever directory you want) and follow installation steps


Note: you need to install the sniffer too - complete installation [[Content#Installaion]]
This guide covers installing the VoIPmonitor Web GUI. The GUI is a PHP web application for viewing CDR data and managing sensors.


= System Requirements =
{{Note|The GUI is separate from the sniffer/sensor. You need to install both - see [[Sniffer_installation|Sniffer Installation]].}}


The VoIPmonitor GUI has specific hardware and software requirements.
== Quick Start ==


=== Hardware Architecture Requirements ===
# Download the latest GUI package from http://www.voipmonitor.org/download-gui?version=latest
# Extract to <code>/var/www/html/</code> (RHEL/CentOS) or <code>/var/www/</code> (Debian/Ubuntu)
# Rename the extracted folder to <code>voipmonitor</code>
# Open <code>http://your-server/voipmonitor</code> in a browser and follow the installation wizard


'''IMPORTANT:''' The VoIPmonitor GUI requires an '''x86 (32-bit or 64-bit) architecture system'''. The GUI is '''not supported''' on aarch64 (ARM64) platforms.
== Prerequisites ==


If you need to run VoIPmonitor on ARM64/aarch64 hardware:
{| class="wikitable"
* The '''sensor/sniffer component''' can be '''compiled from source''' for ARM64 architectures - see [[Sniffer_installation#Compiling_from_Source|Compiling from Source]]
|-
* You must run the '''GUI on a separate x86 system''' that connects to the ARM64 sensor's database
! Component !! Requirement
* This client-server architecture allows the ARM64 sensor to capture traffic while the x86 GUI provides the web interface
|-
| '''Architecture''' || x86 (32/64-bit) only. '''ARM64 not supported''' for GUI.
|-
| '''Web Server''' || Apache2 or Nginx with PHP support
|-
| '''PHP''' || 7.4, 8.1, 8.2, or 8.3 with ionCube Loader
|-
| '''Database''' || MySQL 5.7+ or MariaDB 10.3+
|-
| '''Extensions''' || php-mysql, php-gd, php-curl, php-mbstring, php-zip, php-cli
|}


For more information about supported architectures, see the [[FAQ#What_hardware_architectures_does_the_GUI_support.3F|FAQ entry on architecture support]].
{{Tip|For ARM64 systems: Compile the [[Sniffer_installation#Compiling_from_Source|sensor from source]] on ARM64, then run GUI on a separate x86 server connecting to the same database.}}


= Hosting Environments =
=== Hosting Environments ===


The VoIPmonitor GUI is fully supported in various hosting environments, including:
{| class="wikitable"
|-
! Environment !! License Status
|-
| Docker, Kubernetes, LXC, Podman || Fully supported, no special licensing
|-
| VMware, VirtualBox, KVM, Hyper-V || Works normally
|-
| AWS EC2, Azure VMs, GCP || Works normally
|}


=== Containerized Deployment (Docker, Kubernetes) ===
{{Note|1=For cloud instances: '''Stop/Start''' preserves Hardware ID (license OK). '''Terminate/Launch''' changes Hardware ID (requires license reconfiguration or domain-based licensing).}}


Running the VoIPmonitor web UI inside a container (Docker, Kubernetes, or other containerization technologies) is '''fully supported''' and will '''not cause any licensing issues'''.
== Installation Steps ==


The GUI license validation works normally in containerized environments without requiring special licensing configurations. You can run the GUI in a container without needing to contact support for domain-based licensing or multiple server licensing.
=== Step 1: Prepare the Environment ===


This applies to:
Install required packages:
* Docker containers
* Kubernetes pods
* Other containerization technologies (LXC, Podman, etc.)
* Cloud-based container services (AWS ECS, Azure Container Instances, Google Cloud Run, etc.)


=== Virtual Machines and Cloud Instances ===
<syntaxhighlight lang="bash">
# Debian/Ubuntu
apt update
apt install apache2 php php-mysql php-gd php-curl php-mbstring mariadb-server unzip wget


The VoIPmonitor GUI also runs normally in virtualized environments:
# RHEL/Rocky/AlmaLinux
dnf install httpd php php-mysqlnd php-gd php-curl php-mbstring mariadb-server unzip wget
</syntaxhighlight>


* '''VMware ESXi, VirtualBox, KVM, Hyper-V, QEMU/KVM''': The GUI license works without issues
=== Step 2: Download and Extract ===
* '''AWS EC2, Google Cloud Platform, Azure VMs''': License validation works normally


'''Important distinction for AWS/Cloud:'''
<syntaxhighlight lang="bash">
* '''Stop/Start an instance''': The Hardware ID typically remains the same, so your license continues to work
# Download latest GUI (replace phpver with your PHP version: 74, 81, 82, 83)
* '''Terminate and launch a new instance''': The Hardware ID changes, requiring a new license or reconfiguration
cd /tmp
wget "https://www.voipmonitor.org/download-gui?version=latest&major=5&allowed&phpver=81" -O gui.tar.gz


If you frequently destroy and recreate cloud instances and want to avoid license reconfiguration, you may request domain-based licensing from VoIPmonitor support as an alternative to hardware ID binding.
# Extract to web root
tar xzf gui.tar.gz
mv voipmonitor-gui-* /var/www/html/voipmonitor


= License key =
# Set permissions
chown -R www-data:www-data /var/www/html/voipmonitor  # Debian/Ubuntu
# OR
chown -R apache:apache /var/www/html/voipmonitor      # RHEL/Rocky
</syntaxhighlight>


== Obtaining a Trial License (30 Days) ==
{{Warning|1=Download the GUI package matching your PHP version. Check with <code>php --version</code>.}}


For a new installation, you can obtain a 30-day trial license for testing purposes through one of the following methods:
=== Step 3: Complete Web Setup ===


=== Method 1: Contact Support ===
# Open browser: <code>http://yourserver/voipmonitor</code>
# Follow the installation wizard to configure database connection
# Enter license token (see [[#License Activation|License Activation]] below)


Send a request to the VoIPmonitor support team to obtain a trial license. This method is useful if you encounter issues with automated license generation.
=== Step 4: Configure Cron Job ===


=== Method 2: Members' Area (Automated) ===
The GUI requires a cron job for alerts, reports, and maintenance:


Log in to the VoIPmonitor members' area and find the license token in the "my services" section.
<syntaxhighlight lang="bash">
echo "* * * * * root php /var/www/html/voipmonitor/php/run.php cron" >> /etc/crontab
</syntaxhighlight>


==== Troubleshooting Shopping Cart Issues ====
=== Step 5: Configure Sniffer ===


If you are unable to complete the trial order process (the checkout does not proceed):
Ensure the sniffer uses the '''same database''' as the GUI. Edit <code>/etc/voipmonitor.conf</code>:


# Review the items in your shopping cart
<syntaxhighlight lang="ini">
# Ensure there is only one trial product in the cart
mysqlhost = localhost
# Remove any duplicate or conflicting items (multiple trial products can block checkout)
mysqldb = voipmonitor
# Proceed with the checkout process once only one trial product remains
mysqlusername = voipmonitor
 
mysqlpassword = your_password
This is a common issue - accidentally adding the trial product multiple times to the shopping cart will prevent the automated order from completing.
</syntaxhighlight>


==== Troubleshooting Email Verification Issues ====
Then restart: <code>systemctl restart voipmonitor</code>


If you are using the Members' Area method and cannot receive the verification email:
== System Requirements ==


# Check your inbox and spam/junk folder for the verification email
=== Hardware Architecture ===
# If the email contains a typo or is not found, contact support to manually resend the verification email to the correct email address
# Verification links are typically valid for 24 hours - if expired, request a new verification email


If you continue to experience issues receiving the verification email, you can use Method 1 (Contact Support) as an alternative.
{| class="wikitable"
|-
! Component !! Supported Architectures
|-
| '''Web GUI''' || x86 (32-bit and 64-bit) only
|-
| '''Sniffer''' || x86, ARMv7, ARMv8/ARM64
|}


==== Troubleshooting "Only One Trial Is Allowed" Error ====
{{Warning|The GUI does '''NOT''' support ARM64/aarch64 architecture. If you need to run on ARM64, deploy the sniffer on ARM and connect it to a GUI running on a separate x86 server.}}


When using the Members' Area, you may encounter an error stating that only one trial license is allowed. This occurs when:
For ARM64 deployments, use a split architecture:


* You previously used a trial license (even on a different or deleted server)
<kroki lang="mermaid">
* The trial status in the back-end system was not properly reset after the trial expired
%%{init: {'flowchart': {'nodeSpacing': 15, 'rankSpacing': 40}}}%%
flowchart LR
    subgraph ARM64["ARM64 Server"]
        S[Sensor] --> DB[(MySQL)]
    end
    subgraph X86["x86 Server"]
        GUI[Web GUI]
    end
    GUI --> DB
</kroki>


To resolve this issue:
== License Activation ==


# Contact VoIPmonitor support and explain that the automated portal is showing "only one trial is allowed" for your account
=== Obtaining a Trial License ===
# Specify that you need a trial license for a new installation or testing environment
# Support will manually correct the trial license status in the back-end system
# Once the status is corrected, return to the Members' Area and generate the trial license through the normal automated process


Alternatively, you can bypass this issue entirely by using Method 1 (Contact Support) to request a manual trial license issuance.
Request a 30-day trial license:
* '''Option 1:''' Contact VoIPmonitor support
* '''Option 2:''' Generate via Members' Area at voipmonitor.org


To download the license key, visit: http://www.voipmonitor.org/download-gui?version=license
=== Activating the License ===


The license file is located in the web root folder as <code>key.php</code>
<kroki lang="mermaid">
%%{init: {'flowchart': {'nodeSpacing': 15, 'rankSpacing': 40}}}%%
flowchart TB
    A{Internet Access?}
    A -->|Yes| B["Online: Paste token in 'License token' field"]
    A -->|No| C["Offline: Paste full key in 'License key' field"]
    B --> D["Click 'get/update license key'"]
</kroki>


== Troubleshooting "License token is empty" or "hwid invalid or corrupted" During Installation ==
'''Online Activation''' (server has internet):
 
If you encounter the error messages "license token is empty" and "hwid invalid or corrupted" during the initial VoIPmonitor GUI installation, this is typically caused by missing read permissions on the root block device. The GUI requires read access to <code>/dev/root</code> to detect the Hardware ID (HWID) for license activation.
 
=== Solution: Grant Read Permissions on /dev/root ===
 
To resolve this issue:
 
# SSH into the server where the GUI is installed
# Run the following command to grant read permissions on the root block device:
<pre>
chmod +r /dev/root
</pre>
# Retry accessing the GUI in your web browser and complete the license activation
 
After granting read permissions, the GUI will be able to properly detect the Hardware ID and you can proceed with entering your license token or license key.
 
== Activating a License in the GUI ==
 
VoIPmonitor GUI provides two separate activation methods depending on your scenario. Using the wrong method will result in a "Bad Key Content" error.
 
=== Online Activation (Recommended) ===
 
Use this method when your server has internet access and you have a license token from the Members' Area or support:
 
# Log in to the GUI
# Navigate to '''Settings > License'''
# Paste your '''license token''' (short text string, NOT the full key) into the '''"License token"''' field
# Click the '''"get/update license key"''' button
# The GUI will automatically fetch and apply the full license from the license server
 
'''Important:''' The "License token" field is for short tokens only. Do not paste the full multi-line license key into this field.
 
=== Offline Activation ===
 
Use this method when your server cannot connect to the license server (network restrictions, firewall, air-gapped environment):
 
# Contact VoIPmonitor support to obtain the full, formatted license key
# Log in to the GUI
# Navigate to '''Settings > License'''
# Navigate to '''Settings > License'''
# Paste the '''entire multi-line license key''' into the '''"License key"''' text field
# Paste the short token into '''"License token"''' field
# Ensure you copy all lines (Expires, id, hwid, maxcalls, upgradeexpire, etc.)
# Click '''"get/update license key"'''
# Save the changes
 
'''Important:''' The "License key" field is for the complete multi-line key. Do not paste a short token into this field.
 
=== Troubleshooting "Bad Key Content" Error ===
 
If you receive a "Bad Key Content" error, you are likely using the wrong field:
 
* '''Pasting a full license key into the "License token" field''' → This will fail. Use the "License key" field instead.
* '''Pasting a short token into the "License key" field''' → This will fail. Use the "License token" field instead and click "get/update license key".
* '''Incomplete license key''' → For offline activation, ensure you copied ALL lines of the multi-line key.
 
=== Troubleshooting "Something is wrong on this configuration page" Error ===
 
If you receive the error message "Something is wrong on this configuration page. Check the content" when attempting to update your license, but you notice that the expiration date appears to change momentarily, you can use a trial license as a temporary workaround.
 
This error can occur due to various issues such as license server communication problems, license key validation issues, or file permission problems preventing the GUI from properly writing the updated license file.
 
**Trial License Workaround:**


# Contact VoIPmonitor support to request a trial license token
'''Offline Activation''' (air-gapped server):
# Navigate to '''Settings > License''' in the GUI
# Get full multi-line key from support
# Paste the trial license token into the '''"License token"''' field
# Paste entire key into '''"License key"''' field
# Click the '''"get/update license key"''' button
# Save changes
# this will apply a temporary 30-day trial license


This workaround allows you to continue using the GUI with full functionality while the underlying license update issue is investigated and resolved by support. The trial license serves as a temporary solution until the main license issue can be fixed.
{{Warning|1=Using the wrong field causes "Bad Key Content" error. Token = short string, Key = multi-line text.}}


Note: After the main license issue is resolved, you can revert to your permanent license by clicking '''"get/update license key"''' with your original license token.
=== License File Location ===


=== Troubleshooting Premature License Expiration Errors ===
The license is stored in <code>key.php</code> in the GUI root directory (e.g., <code>/var/www/html/voipmonitor/key.php</code>).


If your license appears to expire prematurely on a customer server, displaying an error even though the license is valid on the central VoIPmonitor server, this is typically caused by network connectivity issues preventing the GUI from reaching the license validation server.
==== Manual License Update ====


**Symptom:**
If automatic activation fails:
* License shows as expired or invalid on the customer server
* Same license works correctly on the central server
* License expiration date in voipmonitor.org portal shows the license is still valid
 
**Primary Cause: Network Blocking**
The GUI requires outbound HTTPS access to the license check server to validate and update the license. If the customer server is behind a restrictive firewall or has network routing issues, this validation fails, causing the GUI to report the license as expired.
 
**Diagnostic Steps:**
 
From the affected customer server, test network connectivity to the license check server:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Test DNS resolution
# Download key from portal: Services > My services
ping -c 3 download.voipmonitor.org
# Copy content to key.php on server
 
# Verify:
# Test HTTPS connectivity
php /var/www/voipmonitor/php/apilicensecheck.php?task=licenseCheck
curl -I https://download.voipmonitor.org
</syntaxhighlight>
</syntaxhighlight>


If these commands fail or time out, the firewall or network configuration is blocking access to the license validation server.
=== Channel-Based Licensing ===


**Resolution:**
* License is based on '''maximum concurrent calls''' (channels)
* Check current usage: '''Tools > System Status > Concurrent calls'''
* Grace period: If limit exceeded, GUI locks after 14 days
* See [[License]] for detailed information


1. **Configure Firewall:** Allow outbound HTTPS (TCP port 443) connections to <code>download.voipmonitor.org</code>
== Post-Installation ==


  <syntaxhighlight lang="bash">
=== Add Sensors (Multi-Sensor Setup) ===
  # For firewalld
  firewall-cmd --permanent --add-service=https
  firewall-cmd --reload


  # For iptables
For distributed deployments with multiple sensors:
  iptables -A OUTPUT -p tcp --dport 443 -d download.voipmonitor.org -j ACCEPT
# In GUI: '''Settings > Sensors > Add'''
  service iptables save
# Enter Sensor ID (must match <code>id_sensor</code> in sniffer config)
  </syntaxhighlight>
# Enter Manager IP and Port (default: 5029)


2. **Check Proxy Settings:** If your network uses a proxy server, ensure the GUI or PHP configuration includes the proper proxy settings:
See [[Settings#Sensors]] for detailed configuration.


  <syntaxhighlight lang="bash">
== Distribution-Specific Guides ==
  # Check or set proxy environment variables
  export http_proxy=http://proxy.example.com:8080
  export https_proxy=http://proxy.example.com:8080
  </syntaxhighlight>


3. **Verify Network Routing:** Ensure there is no routing gateway or NAT configuration preventing HTTPS connections to external domains. Check with your network administrator if needed.
For detailed step-by-step installation on specific distributions, see:
* [[Debian_12]] - Debian 12 (Bookworm) installation
* [[Rocky_9]] - Rocky Linux 9 / AlmaLinux 9 installation
* [[Ubuntu_24.04_LTS]] - Ubuntu 24.04 LTS installation


**Temporary Workaround:**
== GUI Configuration Options ==


As an immediate workaround to restore service before fixing the network configuration:
Edit <code>config/system_configuration.php</code> to disable features:


1. Navigate to '''Settings > License''' in the GUI
<syntaxhighlight lang="php">
2. Click the '''"get/update license key"''' button
define('DISABLE_LIVE_SNIFFER', true);  // Remove Live Sniffer menu
3. This forces an immediate license check if the server is reachable at that moment
define('DISABLE_REGISTER', true);      // Disable SIP Register view
define('DISABLE_CDR_SHARE', true);      // Disable CDR sharing feature
</syntaxhighlight>


This manual update can temporarily restore functionality if the server has intermittent connectivity issues. However, permanent resolution requires fixing the firewall or network configuration to allow consistent access to <code>download.voipmonitor.org</code> over HTTPS.
For additional configuration constants, see [[GUI_Configuration_PHP]].


=== Manually Updating License from Customer Portal ===
== Troubleshooting ==


Use this method when you need to update the license file directly from the VoIPmonitor customer portal (for example, when the GUI license interface is not working properly, or when you need to manually replace the <code>key.php</code> file).
=== "hwid invalid or corrupted" Error ===


# Log in to the VoIPmonitor customer portal
The GUI cannot read the Hardware ID.
# Navigate to '''Services > My services'''
# Find your license in the list and click the '''license''' button
# Copy the entire license key content displayed
# Locate the <code>key.php</code> file on your GUI server (typically in <code>/var/www/voipmonitor</code> or <code>/var/www/html/voipmonitor</code>)
# Replace the entire content of <code>key.php</code> with the new license key from the portal
# Verify the license is updated by running: <code>php /var/www/voipmonitor/php/apilicensecheck.php?task=licenseCheck</code>


'''Important:'''
'''Solution:'''
* Ensure you have the correct file permissions set (web server user, e.g., <code>www-data</code> or <code>apache</code>, must be able to read the file)
<syntaxhighlight lang="bash">
* When pasting the key content, replace ALL previous content (do not append or partially update)
chmod +r /dev/root
* Common causes for file update issues include: file ownership problems, insufficient write permissions, or the web server caching old file content
</syntaxhighlight>


See also: [[WEB_API#Check_License|Check License API]] for verifying license status.
=== "Missing sniffer tables" or "Table 'voipmonitor.cdr' doesn't exist" ===


== Extending a Trial License ==
The GUI and sniffer are using different databases.


If your testing period requires more than 30 days, you can request a trial license extension:
'''Solution:'''
# Check GUI database settings in <code>/var/www/html/voipmonitor/config/configuration.php</code>
# Update sniffer config <code>/etc/voipmonitor.conf</code> to use the same database
# Restart sniffer: <code>systemctl restart voipmonitor</code>


# Contact VoIPmonitor support to request an extension of your trial license
{{Warning|Do NOT run schema.sql to "fix" this - the tables already exist in the sniffer's database.}}
# After the license is extended by support, apply the update in the GUI by clicking the '''"get/update license key"''' button
# You do not need to change your server ID when extending the license


== Full Licenses ==
=== HTTP 500 Errors ===


For production use, you can purchase a full license through the VoIPmonitor customer portal. Your license is based on the '''maximum number of concurrent calls''' during your peak hours.
# Try a different browser or incognito mode
# Check PHP and web server error logs:
<syntaxhighlight lang="bash">
tail -f /var/log/apache2/error.log
# or
tail -f /var/log/nginx/error.log
</syntaxhighlight>
# Verify IonCube Loader version matches PHP version
# Test PHP with info file:
<syntaxhighlight lang="bash">
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
# Then access http://your-server/info.php
</syntaxhighlight>


You can view your current license status and concurrent call usage in the GUI under '''Tools -> System Status -> Concurrent calls'''.
=== ionCube Loader Errors ===


See the [[FAQ]] for more information about licensing, including:
The ionCube Loader version doesn't match PHP version.
* How to calculate the number of channels you need
* What happens if you temporarily exceed your license limit
* License warning and blocking behavior
* Upgrading your license via the customer portal


== Retrieving a License Token from an Existing Installation ==
'''Solution:'''
# Check PHP version: <code>php --version</code>
# Download correct IonCube loader from [https://www.ioncube.com/loaders.php ioncube.com]
# Place in PHP extensions directory
# Add to php.ini: <code>zend_extension = /path/to/ioncube_loader.so</code>
# Restart web server


If you need to find the license token for an existing VoIPmonitor installation (for example, to set up a new development or test system), you can retrieve it using one of the following methods:
See [[Re-install_the_GUI]] for details.


=== Method 1: Retrieve from the GUI ===
=== Database Connection Issues ===


This is the recommended method for retrieving your license token:
# Verify MySQL/MariaDB is running: <code>systemctl status mysql</code>
# Test connection: <code>mysql -u voipmonitor -p voipmonitor</code>
# Check credentials in GUI configuration


# Log in to your existing VoIPmonitor GUI
=== "Crontab log is empty" ===
# Navigate to '''Settings > License'''
# Locate the '''"License token"''' field
# Copy the short text string displayed there


=== Method 2: Retrieve from key.php File (Alternative) ===
The cron job is not configured or not running.


If you cannot access the GUI or need to recover the license programmatically, the <code>key.php</code> file in your GUI installation directory contains the license information.
'''Solution:'''
<syntaxhighlight lang="bash">
# Add cron job
echo "* * * * * root php /var/www/html/voipmonitor/php/run.php cron" >> /etc/crontab


# Navigate to your GUI installation directory (typically <code>/var/www/html/voipmonitor</code> or <code>/var/www/voipmonitor</code>)
# Test manually
# Open the <code>key.php</code> file in a text editor
php /var/www/html/voipmonitor/php/run.php cron
# The file contains the license information including the license ID
</syntaxhighlight>


You can use the license ID found in <code>key.php</code> to retrieve your full license from the GUI or by contacting VoIPmonitor support.
=== License Shows Expired When Valid ===


=== Using the Token on a New Development/Test System ===
The server cannot reach the license validation server.


The license token is cryptographically bound to the Hardware ID (HWID) of the server it was generated for.
'''Diagnostic:'''
 
<syntaxhighlight lang="bash">
* '''If the new test system has the SAME Hardware ID''' (e.g., a cloned VM or restored backup): You can paste this token directly into the '''"License token"''' field on the new system and click '''"get/update license key"'''.
curl -I https://download.voipmonitor.org
* '''If the new test system has a DIFFERENT Hardware ID''' (e.g., a new VM or physical server): The token from the old installation '''will not work''' automatically.
</syntaxhighlight>
    * '''Solution:''' Contact VoIPmonitor support to have your license token reconfigured to allow multiple servers (specifically for the test/dev environment). Once support adds the new HWID to your license, you can use the same token or a new one provided by them.
 
See also: [[Tls#Can_I_use_my_license_on_multiple_servers|Can I use my license on multiple servers?]]
 
= config/system_configuration.php =
 
This file allows disabling some features
 
=== Disable Live Sniffer Menu ===
 
To completely remove the Live Sniffer functionality from the GUI (including the menu item), edit the <code>config/system_configuration.php</code> file:


<syntaxhighlight lang="php">
'''Solution:''' Allow outbound HTTPS (port 443) to <code>download.voipmonitor.org</code> in your firewall.
define('DISABLE_LIVE_SNIFFER', true);
</syntaxhighlight>


When enabled, this constant removes the entire Live Sniffer menu item from the GUI. This is different from hiding play buttons (see FAQ for <code>DISABLE_LIVEPLAY</code>).
== See Also ==


'''Important Security Note:''' Even with <code>DISABLE_LIVE_SNIFFER</code> enabled, users with administrator privileges can override global capture settings to enable recording or listening for specific calls. For strict compliance scenarios, ensure users are not granted administrator privileges.
* [[Sniffer_installation]] - Install the packet capture sensor
* [[Re-install_the_GUI]] - Reinstall or upgrade the GUI
* [[License]] - Detailed licensing information
* [[GUI_troubleshooting]] - Additional troubleshooting
* [[GUI_Configuration_PHP]] - Advanced configuration options
* [[Nginx]] - Configure Nginx as reverse proxy


=== Other Feature Disabling Options ===
[[Category:Installation]]


define('DISABLE_ISSUE_TRACKER', true);
define('DISABLE_REGISTER', true);
define('DISABLE_CDR_SHARE', true);
define('WIKI_URL', 'http://voipmonitor.org');
define('WIKI_URL', false);
define('APP_WEB', 'http://voipmonitor.org');


== AI Summary for RAG ==
== AI Summary for RAG ==
'''Summary:''' This guide covers the VoIPmonitor GUI installation process, including downloading the package, extracting files, and running the installation wizard. It provides detailed information about obtaining trial licenses (30-day) for new testing installations, including two methods: contacting support or finding license tokens in the "my services" section of the members' area. For the Members' Area method, it includes troubleshooting steps for common issues. First, if you are unable to complete the trial order process (checkout does not proceed), this is typically caused by having multiple trial products in the shopping cart - you must review the cart, ensure only one trial product exists, remove any duplicate or conflicting items, then proceed with checkout. Second, it covers email verification issues: checking spam/junk folders, contacting support to manually resend verification emails, and understanding that verification links are valid for 24 hours. Third, it includes troubleshooting for the "only one trial is allowed" error, which occurs when a previous trial was used; the solution is to contact support to manually correct the trial status in the back-end system, then return to the Members' Area to generate the trial. Alternatively, users can bypass issues by directly contacting support for manual trial issuance. The guide explains how to extend trial licenses beyond 30 days by contacting support and using the "get/update license" button in the GUI without needing to change the server ID.
TROUBLESHOOTING "LICENSE TOKEN IS EMPTY" OR "HWID INVALID OR CORRUPTED" DURING INSTALLATION: If you encounter these error messages during initial GUI installation, this is typically caused by missing read permissions on the root block device (/dev/root). The GUI requires read access to /dev/root to detect the Hardware ID (HWID) for license activation. To resolve this issue: SSH into the server where the GUI is installed, run "chmod +r /dev/root" to grant read permissions on the root block device, then retry accessing the GUI in your web browser to complete the license activation. After granting read permissions, the GUI will be able to properly detect the Hardware ID and you can proceed with entering your license token or license key.
CONTAINERIZED DEPLOYMENT SUPPORT: Running the VoIPmonitor web UI inside a container (Docker, Kubernetes, LXC, Podman, or cloud container services like AWS ECS, Azure Container Instances, Google Cloud Run) is fully supported and will NOT cause any licensing issues. The GUI license validation works normally in containerized environments without requiring special licensing configurations. Users do NOT need to contact support for domain-based licensing or multiple server licensing when running the GUI in a container.
VIRTUAL MACHINE AND CLOUD SUPPORT: The VoIPmonitor GUI also works normally in VMs (VMware ESXi, VirtualBox, KVM, Hyper-V) and cloud instances (AWS EC2, GCP, Azure VMs). For cloud instances, there is an important distinction: stopping and starting an instance typically preserves the Hardware ID so the license continues to work, but terminating and launching a new instance changes the Hardware ID and requires license reconfiguration. For users who frequently destroy and recreate cloud instances, domain-based licensing can be requested from support as an alternative to hardware ID binding.
CRITICAL: License activation in the GUI uses TWO SEPARATE FIELDS. For ONLINE activation (server has internet access), paste the SHORT "license token" into the "License token" field and click "get/update license key" button to automatically fetch the license. For OFFLINE activation (air-gapped or restricted networks), paste the COMPLETE multi-line LICENSE KEY (Expires, id, hwid, maxcalls, upgradeexpire, etc.) into the "License key" field and save. Common "Bad Key Content" errors are caused by using the WRONG field: pasting a full key into "License token" or a short token into "License key" will fail. Also ensure the offline key includes ALL lines, not just the first line.
TRIAL LICENSE WORKAROUND FOR LICENSE UPDATE ERRORS: If you receive the error "Something is wrong on this configuration page. Check the content" when updating your license (but notice the expiration date changes momentarily), you can use a trial license as a temporary workaround. Contact support for a trial license token, paste it into the "License token" field under Settings > License, then click "get/update license key" to apply a temporary 30-day trial license. This allows full GUI functionality while the underlying license issue is resolved. After the issue is fixed, revert to your permanent license by clicking "get/update license key" with your original token. This workaround addresses issues like license server communication problems, key validation issues, or file permission problems that prevent proper license file updates.


To retrieve a license token from an existing installation (e.g., for setting up a new development or test system), use either Method 1: Navigate to Settings > License in the GUI and copy the token, or Method 2: Open the key.php file in the GUI installation directory (typically /var/www/html/voipmonitor) which contains the license ID that can be used to retrieve the full license. When using the retrieved token on a new development/test system, note that it is cryptographically bound to the Hardware ID (HWID). If the new system has the SAME HWID (e.g., cloned VM), the token works directly. If it has a DIFFERENT HWID (e.g., new VM), contact VoIPmonitor support to reconfigure the license for multiple servers.
'''Summary:''' VoIPmonitor GUI installation guide. Prerequisites: x86 architecture (ARM64 not supported for GUI), PHP 7.4/8.x with ionCube, MySQL/MariaDB, Apache/Nginx. Installation steps: (1) Install packages, (2) Download GUI matching PHP version, (3) Extract to webroot, (4) Run web setup wizard, (5) Add cron job for run.php, (6) Configure sniffer to use same database. Docker/Kubernetes/cloud fully supported. License activation: Online uses "License token" field + click button, Offline uses "License key" field with full multi-line key. Common issues: "hwid invalid" = run chmod +r /dev/root; "Missing sniffer tables" = GUI and sniffer using different databases (fix sniffer config, don't run schema.sql); "Crontab log empty" = add cron job.


For manual license file updates when the GUI license interface is not working properly, you can manually replace the key.php file from the customer portal. Navigate to Services > My services in the portal, click the license button to view and copy the full license content, then replace the entire content of key.php on your GUI server (typically /var/www/voipmonitor or /var/www/html/voipmonitor). Verify the update with the apilicensecheck.php API endpoint. Common issues include file ownership problems (web server user must be able to read), insufficient write permissions, or the web server caching old file content.
'''Keywords:''' gui installation, web interface, php installation, ionCube, trial license, license activation, license token, license key, bad key content, hwid invalid, /dev/root, docker, kubernetes, container, arm64, x86, missing sniffer tables, crontab log empty, cdr table missing, cron job, run.php, system_configuration.php, DISABLE_LIVE_SNIFFER


It also covers full license purchasing, which is based on maximum concurrent calls during peak hours, and references the FAQ for more details on license calculation, exceeding limits, warnings, blocking behavior, and upgrading licenses. The config/system_configuration.php file allows disabling specific features like live sniffer (DISABLE_LIVE_SNIFFER to remove menu), issue tracker, registration, and CDR sharing. IMPORTANT: DISABLE_LIVE_SNIFFER removes the menu item entirely, while DISABLE_LIVEPLAY only hides play buttons. Admin users can override capture settings to enable recording, so avoid granting admin privileges for strict compliance scenarios.
'''Keywords:''' gui installation, trial license, 30-day trial, license extension, my services, members area, get/update license, concurrent calls, server id, full license, customer portal, license key, license token, online activation, offline activation, bad key content, license token field, license key field, key.php, system configuration, disable features, only one trial allowed, trial status, back-end system, DISABLE_LIVE_SNIFFER, DISABLE_LIVEPLAY, disable live sniffer, disable issue tracker, disable registration, admin privileges, override capture settings, compliance, shopping cart, duplicate products, trial order, checkout, unable to complete order, retrieve license token, existing installation, development system, test system, hardware id, hwid, reconfigure license, multiple servers, manual license update, customer portal license button, replace key.php manually, services my services, license file permissions, file ownership, web server permissions, apilicensecheck.php, container, docker, kubernetes, lxc, podman, containerized gui, gui in container, cloud container, aws ecs, azure container instances, google cloud run, virtual machine, vm, cloud instance, aws ec2, google cloud platform, azure vm, vmware esxi, virtualbox, kvm, hyper-v, gui deployment, hosting environment, license update error, configuration page error, something is wrong on this configuration page, trial license workaround, temporary workaround, license server communication, license key validation, premature license expiration, license expires early, license expiration error, license shows expired, license appears invalid, customer server license issue, external customer license network problem, firewall blocking license, download.voipmonitor.org, license validation server, outbound https, firewall configuration, proxy settings, network routing, license server connectivity, intermittent license issues, manual license update workaround, license token is empty, hwid invalid or corrupted, chmod dev root, chmod /dev/root, dev root permissions, root block device permissions, hardware id detection, read permissions, block device, gui installation error, license activation error, initial installation, hwid invalid, corrupted hwid
'''Key Questions:'''
'''Key Questions:'''
* What should I do if I get "license token is empty" and "hwid invalid or corrupted" errors during VoIPmonitor GUI installation?
* How do I install the VoIPmonitor GUI?
* How do I fix "hwid invalid or corrupted" error during GUI installation?
* What PHP version do I need for VoIPmonitor GUI?
* Why do I get "license token is empty" error during installation?
* Does VoIPmonitor GUI work on ARM64?
* How do I fix license activation errors caused by /dev/root permissions?
* Does VoIPmonitor GUI work in Docker/Kubernetes?
* What is the solution for "hwid invalid or corrupted" error during initial GUI installation?
* How do I activate a VoIPmonitor license?
* Do I need to give read permissions to /dev/root for VoIPmonitor GUI license activation?
* What is the difference between "License token" and "License key" fields?
* How do I grant read permissions to /dev/root?
* How do I fix "hwid invalid or corrupted" error?
* What causes "hwid invalid or corrupted" error during VoIPmonitor setup?
* How do I fix "Missing sniffer tables" error?
* How do I resolve initial installation license errors in VoIPmonitor GUI?
* How do I add the GUI cron job?
* What block device permissions does VoIPmonitor GUI require for license activation?
* Where is the VoIPmonitor license file stored (key.php)?
* How do I fix "license token is empty" error when installing VoIPmonitor GUI?
* How do I disable Live Sniffer in the GUI?
* Why does the GUI fail to detect Hardware ID during installation?
* How do I enable hardware ID detection during VoIPmonitor GUI installation?
* What should I do if I cannot activate license during initial GUI installation?
* How do I resolve chmod +r /dev/root for VoIPmonitor?
* What permissions does /dev/root need for VoIPmonitor GUI?
* How do I fix /dev/root read permissions issue?
* What is the fix for "hwid invalid or corrupted" error with /dev/root?
* How do I use chmod +r /dev/root for VoIPmonitor license activation?
* What causes hardware ID detection failure in VoIPmonitor GUI installation?
* How do I retrieve a license token from an existing VoIPmonitor installation?
* Where can I find the license token in the GUI?
* How do I find the license information in the key.php file?
* Can I use my license token on a new development or test system?
* What happens if the new test system has a different hardware ID?
* How do I transfer my license to a new development server?
* What is the hardware ID (HWID) requirement for license tokens?
* Can I use the same license token on multiple servers?
* Where is the key.php file located in the GUI installation?
* How do I reconfigure my license for multiple servers?
* What is the difference between "license token" and "license key" fields in the GUI?
* Which field should I use for online license activation in VoIPmonitor?
* Which field should I use for offline license activation in VoIPmonitor?
* Why do I get "Bad Key Content" error when pasting my license?
* How do I activate a license online using a token?
* How do I activate a license offline using the full key?
* What should I paste into the "License token" field?
* What should I paste into the "License key" field?
* How do I obtain a trial license for VoIPmonitor?
* What is the trial license period?
* How can I get a trial license for a new VoIPmonitor installation?
* Where do I find my license token for VoIPmonitor?
* How do I extend my VoIPmonitor trial license beyond 30 days?
* Do I need to change my server ID when extending my license?
* How is the VoIPmonitor license calculated?
* What happens if I exceed my license limit?
* What is the "get/update license" button in the GUI?
* Where do I check my VoIPmonitor license status and concurrent calls?
* What should I do if I cannot complete the trial order process?
* Why does my trial order checkout fail?
* How do I fix duplicate trial products in my shopping cart?
* What should I do if I cannot receive the verification email for a trial license?
* How long is the trial license verification link valid?
* Can support resend the verification email if I made a typo in my email address?
* What should I do if I get an "only one trial is allowed" error?
* How can I fix the trial license status to generate a new trial?
* Why does the automated portal block my trial request?
* How do I manually update the license key from the customer portal?
* Where is the license button in the customer portal Services section?
* How do I replace the key.php file with a new license from the portal?
* What should I do if the GUI license interface is not working?
* What file permissions are required for key.php?
* How do I verify the license file was updated correctly?
* What are common causes for license file update failures?
* Where is the key.php file located on the GUI server?
* How do I check license status with apilicensecheck.php?
* What happens if the web server cannot read key.php?
* Does the VoIPmonitor GUI work in Docker containers?
* What should I do if I get "Something is wrong on this configuration page. Check the content" error when updating my license?
* Can I use a trial license as a workaround for license update errors?
* How do I apply a trial license workaround while my main license issue is being resolved?
* What causes the "Something is wrong on this configuration page" license error?
* How can I continue using the GUI if my license update fails?
* Can I run the VoIPmonitor GUI in a container?
* Will running the GUI in a container cause licensing issues?
* Do I need special licensing for containerized GUI deployment?
* Can I use the VoIPmonitor GUI in Kubernetes?
* Does the GUI require domain-based licensing when running in containers?
* Does the GUI work in virtual machines (VMs)?
* Can I deploy the GUI on AWS EC2 or other cloud instances?
* What happens to my license if I stop and start an AWS EC2 instance?
* What happens to my license if I terminate and recreate a cloud instance?
* Can I use the same license on multiple cloud instances?
* When should I request domain-based licensing instead of hardware binding?
* Why does my license appear to expire prematurely on a customer server?
* What should I do if my GUI shows the license as expired even though it is valid on the central server?
* How do I check network connectivity to the license validation server?
* What firewall ports need to be open for VoIPmonitor license validation?
* How do I fix license expiration errors caused by network blocking?
* What is the license validation server for VoIPmonitor?
* How do I test HTTPS connectivity to download.voipmonitor.org?
* Can I manually update the license as a workaround for network issues?
* How do I configure firewall to allow license validation?
* What should I do if my customer server cannot reach download.voipmonitor.org?
* What hosting environments does the VoIPmonitor GUI support?

Latest revision as of 01:18, 10 January 2026

GUI Installation

This guide covers installing the VoIPmonitor Web GUI. The GUI is a PHP web application for viewing CDR data and managing sensors.

ℹ️ Note: The GUI is separate from the sniffer/sensor. You need to install both - see Sniffer Installation.

Quick Start

  1. Download the latest GUI package from http://www.voipmonitor.org/download-gui?version=latest
  2. Extract to /var/www/html/ (RHEL/CentOS) or /var/www/ (Debian/Ubuntu)
  3. Rename the extracted folder to voipmonitor
  4. Open http://your-server/voipmonitor in a browser and follow the installation wizard

Prerequisites

Component Requirement
Architecture x86 (32/64-bit) only. ARM64 not supported for GUI.
Web Server Apache2 or Nginx with PHP support
PHP 7.4, 8.1, 8.2, or 8.3 with ionCube Loader
Database MySQL 5.7+ or MariaDB 10.3+
Extensions php-mysql, php-gd, php-curl, php-mbstring, php-zip, php-cli

💡 Tip: For ARM64 systems: Compile the sensor from source on ARM64, then run GUI on a separate x86 server connecting to the same database.

Hosting Environments

Environment License Status
Docker, Kubernetes, LXC, Podman Fully supported, no special licensing
VMware, VirtualBox, KVM, Hyper-V Works normally
AWS EC2, Azure VMs, GCP Works normally

ℹ️ Note: For cloud instances: Stop/Start preserves Hardware ID (license OK). Terminate/Launch changes Hardware ID (requires license reconfiguration or domain-based licensing).

Installation Steps

Step 1: Prepare the Environment

Install required packages:

# Debian/Ubuntu
apt update
apt install apache2 php php-mysql php-gd php-curl php-mbstring mariadb-server unzip wget

# RHEL/Rocky/AlmaLinux
dnf install httpd php php-mysqlnd php-gd php-curl php-mbstring mariadb-server unzip wget

Step 2: Download and Extract

# Download latest GUI (replace phpver with your PHP version: 74, 81, 82, 83)
cd /tmp
wget "https://www.voipmonitor.org/download-gui?version=latest&major=5&allowed&phpver=81" -O gui.tar.gz

# Extract to web root
tar xzf gui.tar.gz
mv voipmonitor-gui-* /var/www/html/voipmonitor

# Set permissions
chown -R www-data:www-data /var/www/html/voipmonitor  # Debian/Ubuntu
# OR
chown -R apache:apache /var/www/html/voipmonitor       # RHEL/Rocky

⚠️ Warning: Download the GUI package matching your PHP version. Check with php --version.

Step 3: Complete Web Setup

  1. Open browser: http://yourserver/voipmonitor
  2. Follow the installation wizard to configure database connection
  3. Enter license token (see License Activation below)

Step 4: Configure Cron Job

The GUI requires a cron job for alerts, reports, and maintenance:

echo "* * * * * root php /var/www/html/voipmonitor/php/run.php cron" >> /etc/crontab

Step 5: Configure Sniffer

Ensure the sniffer uses the same database as the GUI. Edit /etc/voipmonitor.conf:

mysqlhost = localhost
mysqldb = voipmonitor
mysqlusername = voipmonitor
mysqlpassword = your_password

Then restart: systemctl restart voipmonitor

System Requirements

Hardware Architecture

Component Supported Architectures
Web GUI x86 (32-bit and 64-bit) only
Sniffer x86, ARMv7, ARMv8/ARM64

⚠️ Warning: The GUI does NOT support ARM64/aarch64 architecture. If you need to run on ARM64, deploy the sniffer on ARM and connect it to a GUI running on a separate x86 server.

For ARM64 deployments, use a split architecture:

License Activation

Obtaining a Trial License

Request a 30-day trial license:

  • Option 1: Contact VoIPmonitor support
  • Option 2: Generate via Members' Area at voipmonitor.org

Activating the License

Online Activation (server has internet):

  1. Navigate to Settings > License
  2. Paste the short token into "License token" field
  3. Click "get/update license key"

Offline Activation (air-gapped server):

  1. Get full multi-line key from support
  2. Paste entire key into "License key" field
  3. Save changes

⚠️ Warning: Using the wrong field causes "Bad Key Content" error. Token = short string, Key = multi-line text.

License File Location

The license is stored in key.php in the GUI root directory (e.g., /var/www/html/voipmonitor/key.php).

Manual License Update

If automatic activation fails:

# Download key from portal: Services > My services
# Copy content to key.php on server
# Verify:
php /var/www/voipmonitor/php/apilicensecheck.php?task=licenseCheck

Channel-Based Licensing

  • License is based on maximum concurrent calls (channels)
  • Check current usage: Tools > System Status > Concurrent calls
  • Grace period: If limit exceeded, GUI locks after 14 days
  • See License for detailed information

Post-Installation

Add Sensors (Multi-Sensor Setup)

For distributed deployments with multiple sensors:

  1. In GUI: Settings > Sensors > Add
  2. Enter Sensor ID (must match id_sensor in sniffer config)
  3. Enter Manager IP and Port (default: 5029)

See Settings#Sensors for detailed configuration.

Distribution-Specific Guides

For detailed step-by-step installation on specific distributions, see:

GUI Configuration Options

Edit config/system_configuration.php to disable features:

define('DISABLE_LIVE_SNIFFER', true);   // Remove Live Sniffer menu
define('DISABLE_REGISTER', true);       // Disable SIP Register view
define('DISABLE_CDR_SHARE', true);      // Disable CDR sharing feature

For additional configuration constants, see GUI_Configuration_PHP.

Troubleshooting

"hwid invalid or corrupted" Error

The GUI cannot read the Hardware ID.

Solution:

chmod +r /dev/root

"Missing sniffer tables" or "Table 'voipmonitor.cdr' doesn't exist"

The GUI and sniffer are using different databases.

Solution:

  1. Check GUI database settings in /var/www/html/voipmonitor/config/configuration.php
  2. Update sniffer config /etc/voipmonitor.conf to use the same database
  3. Restart sniffer: systemctl restart voipmonitor

⚠️ Warning: Do NOT run schema.sql to "fix" this - the tables already exist in the sniffer's database.

HTTP 500 Errors

  1. Try a different browser or incognito mode
  2. Check PHP and web server error logs:
tail -f /var/log/apache2/error.log
# or
tail -f /var/log/nginx/error.log
  1. Verify IonCube Loader version matches PHP version
  2. Test PHP with info file:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
# Then access http://your-server/info.php

ionCube Loader Errors

The ionCube Loader version doesn't match PHP version.

Solution:

  1. Check PHP version: php --version
  2. Download correct IonCube loader from ioncube.com
  3. Place in PHP extensions directory
  4. Add to php.ini: zend_extension = /path/to/ioncube_loader.so
  5. Restart web server

See Re-install_the_GUI for details.

Database Connection Issues

  1. Verify MySQL/MariaDB is running: systemctl status mysql
  2. Test connection: mysql -u voipmonitor -p voipmonitor
  3. Check credentials in GUI configuration

"Crontab log is empty"

The cron job is not configured or not running.

Solution:

# Add cron job
echo "* * * * * root php /var/www/html/voipmonitor/php/run.php cron" >> /etc/crontab

# Test manually
php /var/www/html/voipmonitor/php/run.php cron

License Shows Expired When Valid

The server cannot reach the license validation server.

Diagnostic:

curl -I https://download.voipmonitor.org

Solution: Allow outbound HTTPS (port 443) to download.voipmonitor.org in your firewall.

See Also


AI Summary for RAG

Summary: VoIPmonitor GUI installation guide. Prerequisites: x86 architecture (ARM64 not supported for GUI), PHP 7.4/8.x with ionCube, MySQL/MariaDB, Apache/Nginx. Installation steps: (1) Install packages, (2) Download GUI matching PHP version, (3) Extract to webroot, (4) Run web setup wizard, (5) Add cron job for run.php, (6) Configure sniffer to use same database. Docker/Kubernetes/cloud fully supported. License activation: Online uses "License token" field + click button, Offline uses "License key" field with full multi-line key. Common issues: "hwid invalid" = run chmod +r /dev/root; "Missing sniffer tables" = GUI and sniffer using different databases (fix sniffer config, don't run schema.sql); "Crontab log empty" = add cron job.

Keywords: gui installation, web interface, php installation, ionCube, trial license, license activation, license token, license key, bad key content, hwid invalid, /dev/root, docker, kubernetes, container, arm64, x86, missing sniffer tables, crontab log empty, cdr table missing, cron job, run.php, system_configuration.php, DISABLE_LIVE_SNIFFER

Key Questions:

  • How do I install the VoIPmonitor GUI?
  • What PHP version do I need for VoIPmonitor GUI?
  • Does VoIPmonitor GUI work on ARM64?
  • Does VoIPmonitor GUI work in Docker/Kubernetes?
  • How do I activate a VoIPmonitor license?
  • What is the difference between "License token" and "License key" fields?
  • How do I fix "hwid invalid or corrupted" error?
  • How do I fix "Missing sniffer tables" error?
  • How do I add the GUI cron job?
  • Where is the VoIPmonitor license file stored (key.php)?
  • How do I disable Live Sniffer in the GUI?