|
|
| (4 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| {{DISPLAYTITLE:Backing Up GUI Configuration}} | | {{DISPLAYTITLE:Backing Up GUI Configuration}} |
|
| |
|
| '''This guide provides a step-by-step method for creating regular, automated backups of your VoIPmonitor GUI's configuration. This includes users, sensors, capture rules, and all other settings configured through the web interface.'''
| | This guide covers backing up and restoring VoIPmonitor GUI configuration data (users, sensors, alerts, dashboards). It does '''not''' cover CDR/PCAP data backup. |
|
| |
|
| == Overview == | | == Quick Reference == |
| This backup procedure is designed to save '''only the GUI's configuration data''', not the call data (CDRs) or captured PCAP files. It is an essential part of a disaster recovery plan, allowing you to quickly restore a known-good GUI configuration to a new or rebuilt server without backing up terabytes of call data.
| |
|
| |
|
| The backup process works with three types of data:
| | {| class="wikitable" |
| #'''Configuration Tables:''' The core database tables that store settings, dashboards, and configurations (e.g., `users`, `sensors`, `custom_config`). These include all settings made by GUI users and administrators.
| | |- |
| #'''Data Tables:''' Supporting data like saved reports.
| | ! Task !! Method !! Command/Path |
| #'''Configuration Files:''' The PHP configuration files from the GUI directory itself (e.g., `configuration.php`).
| | |- |
| | | One-time backup || GUI || '''Tools → Backup & restore''' → select "configuration tables" + "configuration files" |
| | |- |
| | | Automated backup || CLI || <code>php run.php backupGuiTables -t config -f backup.sql</code> |
| | |- |
| | | Restore || GUI || '''Tools → Backup & restore''' → "restore" |
| | |- |
| | | Restore || CLI || <code>php run.php restoreGuiTables -t config -f backup.sql</code> |
| | |} |
|
| |
|
| == Quick Backup via GUI Web Interface ==
| | '''What Gets Backed Up:''' |
| | * '''Configuration Tables:''' Users, sensors, capture rules, alerts, dashboards, reports |
| | * '''Configuration Files:''' PHP config files (<code>configuration.php</code>) |
|
| |
|
| For a quick backup before an upgrade, you can use the built-in GUI backup feature directly from the web interface.
| | {{Warning|1=Restoring '''overwrites''' existing settings. Perform on fresh GUI or accept data loss.}} |
|
| |
|
| {{Note|This method is ideal for one-time backups before upgrades, reinstallation, or migrations. For automated daily backups, see the command-line script method below.}}
| | == GUI Backup (Quick Method) == |
|
| |
|
| '''Steps:'''
| | Ideal for one-time backups before upgrades or migrations. |
|
| |
|
| # Open the VoIPmonitor GUI web interface
| |
| # Navigate to '''GUI → Tools → Backup & restore''' | | # Navigate to '''GUI → Tools → Backup & restore''' |
| # Select ''':backup GUI: configuration tables''' to back up all database settings made by GUI users and administrators | | # Select "'''backup GUI: configuration tables'''" |
| # Select ''':backup GUI: configuration files''' to back up GUI configuration files | | # Select "'''backup GUI: configuration files'''" |
| # Perform the backup | | # Click backup and download the generated file |
| # Download the generated backup file to a safe location
| |
| | |
| '''What Gets Backed Up:'''
| |
| | |
| * '''Configuration Tables''' includes:
| |
| ** All user accounts and permissions
| |
| ** Sensor definitions and configurations
| |
| ** Capture rules and filters
| |
| ** Alert definitions and thresholds
| |
| ** Dashboard configurations
| |
| ** Reports and their definitions
| |
| | |
| * '''Configuration Files''' includes:
| |
| ** `configuration.php` and other GUI-specific PHP configuration files
| |
| | |
| '''Restoring from GUI Backup:'''
| |
|
| |
|
| If you need to restore after an upgrade (for example, if alerts disappear):
| | '''To Restore:''' |
| # Navigate to '''GUI → Tools → Backup & restore''' | | # Navigate to '''GUI → Tools → Backup & restore''' |
| # Select ''':restore GUI: configuration tables''' | | # Select "'''restore'''" |
| # Upload and select the backup file created earlier | | # Upload the backup file |
| | |
| {{Warning|Restoring will overwrite existing GUI settings. Only perform this on a freshly installed GUI or be prepared to lose current configurations.}}
| |
|
| |
|
| == Automated Daily Backup Using CLI Script == | | == Automated CLI Backup == |
|
| |
|
| This section describes how to set up automated daily backups using a command-line script. This method is ideal for production environments where you want regular, scheduled backups without manual intervention.
| | For production environments requiring scheduled backups. |
|
| |
|
| First, create a shell script that will run the export commands.
| | === Backup Script === |
|
| |
|
| '''Create and edit the script file:'''
| | Create <code>/usr/local/sbin/backup_voipmonitor_gui.sh</code>: |
| <syntaxhighlight lang="bash"> | |
| nano /usr/local/sbin/backup_voipmonitor_gui.sh
| |
| </syntaxhighlight> | |
|
| |
|
| '''Copy and paste the following content into the file:'''
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| #!/bin/bash | | #!/bin/bash |
| #
| |
| # VoIPmonitor GUI Configuration Backup Script | | # VoIPmonitor GUI Configuration Backup Script |
| #
| |
|
| |
|
| # --- Configuration ---
| |
| # Set the base directory where backups will be stored
| |
| BACKUP_DIR="/var/backups/voipmonitor_gui" | | BACKUP_DIR="/var/backups/voipmonitor_gui" |
|
| |
| # Set the retention period in days. Backups older than this will be deleted.
| |
| RETENTION_DAYS=30 | | RETENTION_DAYS=30 |
| | RUN_SCRIPT="/var/www/html/php/run.php" |
| | DAY=$(date "+%Y-%m-%d") |
|
| |
|
| # --- Script Logic ---
| |
|
| |
| # Create the backup directory if it doesn't exist
| |
| mkdir -p "$BACKUP_DIR" | | mkdir -p "$BACKUP_DIR" |
|
| |
|
| # Set the filename based on the current date | | # Export configuration and data tables |
| DAY=$(date "+%Y-%m-%d")
| | php "$RUN_SCRIPT" backupGuiTables -t config -f "$BACKUP_DIR/config_tables-${DAY}.sql" |
| FILE_CFG_TABLES="$BACKUP_DIR/config_tables-${DAY}.sql"
| | php "$RUN_SCRIPT" backupGuiTables -t data -f "$BACKUP_DIR/data_tables-${DAY}.sql" |
| FILE_DATA_TABLES="$BACKUP_DIR/data_tables-${DAY}.sql"
| | php "$RUN_SCRIPT" backupGuiConfigurationFiles -f "$BACKUP_DIR/config_files-${DAY}.tar.gz" |
| FILE_CFG_FILES="$BACKUP_DIR/config_files-${DAY}.tar.gz"
| |
| | |
| # Path to the GUI's run.php script
| |
| RUN_SCRIPT="/var/www/html/php/run.php"
| |
|
| |
|
| echo "--- Starting VoIPmonitor GUI Backup for ${DAY} ---"
| | # Cleanup old backups |
| | find "$BACKUP_DIR" -type f -mtime +"$RETENTION_DAYS" \( -name '*.sql' -o -name '*.tar.gz' \) -delete |
|
| |
|
| # Export the configuration and data tables as SQL dumps
| | echo "Backup complete: $BACKUP_DIR" |
| php "$RUN_SCRIPT" backupGuiTables -t config -f "$FILE_CFG_TABLES"
| | </syntaxhighlight> |
| php "$RUN_SCRIPT" backupGuiTables -t data -f "$FILE_DATA_TABLES"
| |
|
| |
|
| # Backup the GUI's PHP configuration files into a compressed tarball
| | === Setup === |
| php "$RUN_SCRIPT" backupGuiConfigurationFiles -f "$FILE_CFG_FILES"
| |
|
| |
|
| echo "Backup files created:"
| |
| ls -lh "$FILE_CFG_TABLES" "$FILE_DATA_TABLES" "$FILE_CFG_FILES"
| |
|
| |
| # Clean up old backups
| |
| echo "--- Cleaning up backups older than ${RETENTION_DAYS} days ---"
| |
| find "$BACKUP_DIR" -type f -mtime +"$RETENTION_DAYS" -name '*-*-*-*.sql' -print -delete
| |
| find "$BACKUP_DIR" -type f -mtime +"$RETENTION_DAYS" -name '*-*-*-*.tar.gz' -print -delete
| |
|
| |
| echo "--- Backup complete ---"
| |
| </syntaxhighlight>
| |
|
| |
| === Step 1: Make the Script Executable and Test It ===
| |
| Set the correct permissions so the script can be run.
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| | # Make executable and test |
| chmod +x /usr/local/sbin/backup_voipmonitor_gui.sh | | chmod +x /usr/local/sbin/backup_voipmonitor_gui.sh |
| </syntaxhighlight>
| | /usr/local/sbin/backup_voipmonitor_gui.sh |
| You can test the script by running it manually: <code>/usr/local/sbin/backup_voipmonitor_gui.sh</code>. It should create three new files in <code>/var/backups/voipmonitor_gui</code>.
| |
|
| |
|
| === Step 2: Schedule the Automated Backup with Cron ===
| | # Schedule daily at 3:30 AM |
| | |
| The final step is to create a cron job to run the script automatically every night.
| |
| | |
| '''Edit the system's crontab file:'''
| |
| <syntaxhighlight lang="bash">
| |
| crontab -e | | crontab -e |
| | # Add: 30 3 * * * /usr/local/sbin/backup_voipmonitor_gui.sh > /var/log/voipmonitor_backup.log 2>&1 |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| '''Add the following line to the end of the file:'''
| | === CLI Restore === |
| | |
| This example will run the backup script every day at 3:30 AM.
| |
| <syntaxhighlight lang="bash">
| |
| 30 3 * * * /usr/local/sbin/backup_voipmonitor_gui.sh > /var/log/voipmonitor_backup.log 2>&1
| |
| </syntaxhighlight>
| |
| * The `> /var/log/voipmonitor_backup.log 2>&1` part redirects all output (both standard and error) to a log file, which is essential for troubleshooting the cron job if it fails.
| |
| | |
| Save and close the file. The cron daemon will automatically pick up the new schedule.
| |
| | |
| == Importing Only Dashboards from Another GUI Instance == | |
| Use this procedure when you need to migrate dashboards from an old VoIPmonitor GUI instance to a new one.
| |
| | |
| '''Recommended Method: GUI Backup & Restore (Simple)'''
| |
| | |
| The easiest way to transfer dashboards is to use the built-in GUI backup and restore interface. This method is recommended because it correctly handles dashboard ownership tied to user and group IDs.
| |
| | |
| '''1. On the source server (Old GUI):'''
| |
| | |
| Navigate to '''GUI → Tools → Backup & restore'''
| |
| * Select "'''backup GUI: configuration tables'''"
| |
| * Perform the backup
| |
| * Download the generated backup file
| |
| | |
| '''2. On the destination server (New GUI):'''
| |
| | |
| Navigate to '''GUI → Tools → Backup & restore'''
| |
| * Select "'''restore'''"
| |
| * Upload and select the backup file created from the source server
| |
| | |
| This will import the dashboards along with other GUI configuration. If you want to transfer ONLY dashboards (without other settings like sensors, capture rules, etc.), see the advanced method below.
| |
| | |
| '''Advanced Method: Manual SQL Extraction (Dashboards Only)'''
| |
| | |
| Use this advanced procedure when you need to migrate dashboards from an old VoIPmonitor GUI instance to a new one without importing other configurations like sensors or capture rules.
| |
| | |
| Dashboards are stored in the `custom_config` database table, which is part of the configuration backup.
| |
| | |
| === Important Notes ===
| |
| * This process imports dashboards, charts, and associated reports - it is not possible to isolate only the Dashboard layouts
| |
| * Folder structures will NOT be preserved - you will need to manually recreate dashboard folders after import
| |
| * Dashboard ownership may need to be adjusted (e.g., to make dashboards public or assign to the correct user)
| |
| * Panel caching may need to be reconfigured for imported dashboards
| |
| | |
| === Step 1: Create Backups on Both Instances ===
| |
| | |
| First, create backups on both the old and new GUI instances:
| |
| | |
| '''Old GUI Server:'''
| |
| <syntaxhighlight lang="bash">
| |
| cd /var/www/html
| |
| php php/run.php backupGuiTables -t config -f /tmp/old_gui_config.sql
| |
| </syntaxhighlight>
| |
|
| |
|
| '''New GUI Server:'''
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| cd /var/www/html | | cd /var/www/html |
| php php/run.php backupGuiTables -t config -f /tmp/new_gui_config.sql
| |
| </syntaxhighlight>
| |
|
| |
| The backup of the new instance is useful for rollback if the import causes issues.
| |
|
| |
| === Step 2: Extract the custom_config Table from Old Instance ===
| |
|
| |
| The `custom_config` table contains dashboard definitions. Extract only this table from the old instance's backup file:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| # Extract only the custom_config table INSERT statements
| |
| grep -A 100000 "Dumping data for table \`custom_config\`" /tmp/old_gui_config.sql | \
| |
| grep -B 100000 "Table structure for table" | \
| |
| grep "^INSERT INTO" > /tmp/custom_config_only.sql
| |
| </syntaxhighlight>
| |
|
| |
| Alternatively, you can manually extract the table by editing the SQL file and copying only the `INSERT INTO custom_config` statements.
| |
|
| |
| === Step 3: Modify Dashboard Ownership (If Needed) ===
| |
|
| |
| The `custom_config` table may contain user-specific ownership information. If you need to adjust this, edit the <code>/tmp/custom_config_only.sql</code> file:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| nano /tmp/custom_config_only.sql
| |
| </syntaxhighlight>
| |
|
| |
| Common modifications:
| |
| * Change user ID values to match users on the new instance
| |
| * Set ownership to make dashboards public (if your installation supports this)
| |
| * Update any instance-specific paths or IDs
| |
|
| |
| {{Note|
| |
| The structure of the `custom_config` table includes fields that may reference user IDs and other instance-specific data. Review your SQL export carefully before importing to ensure data consistency.
| |
| }}
| |
|
| |
| === Step 4: Import the custom_config Table to New Instance ===
| |
|
| |
| Import the extracted `custom_config` table into the new GUI instance:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| cd /var/www/html
| |
| mysql -u voipmonitor_user -p voipmonitor < /tmp/custom_config_only.sql
| |
| </syntaxhighlight>
| |
|
| |
| Or use the GUI web interface if it provides a table import function.
| |
|
| |
| === Step 5: Post-Import Tasks ===
| |
|
| |
| After importing the dashboards, you will need to:
| |
|
| |
| '''Recreate Dashboard Folder Structures:'''
| |
|
| |
| The import does not preserve folder hierarchies. Log in to the new GUI and manually create any dashboard folders, then move imported dashboards into the appropriate folders.
| |
|
| |
| '''Configure Panel Caching:'''
| |
|
| |
| If your dashboards use cached data for performance, you may need to reconfigure panel caching settings for the imported dashboards.
| |
|
| |
| '''Verify Permissions:'''
| |
|
| |
| Check that users who should have access to the dashboards are appropriately configured in the new GUI instance.
| |
|
| |
| === Troubleshooting ===
| |
|
| |
| If dashboards do not appear after import:
| |
| * Verify the `custom_config` table was imported correctly by checking the database
| |
| * Check for user ID mismatches between the old and new instances
| |
| * Clear browser cache and refresh the GUI
| |
| * Review any GUI error logs for related messages
| |
|
| |
| == How to Restore from a Backup ==
| |
| There are three methods to restore your GUI configuration: the recommended GUI method, the CLI method, or the manual method.
| |
|
| |
| '''Warning:''' This process will overwrite your existing GUI settings. Perform these steps on a freshly installed GUI or be prepared to lose current configurations.
| |
|
| |
| === IMPORTANT: What IS and IS NOT Transferred ===
| |
|
| |
| When restoring a GUI configuration backup to a new instance, the following applies:
| |
|
| |
| '''What IS Transferred:'''
| |
| * User accounts (login credentials, user IDs)
| |
| * Permissions and user group assignments
| |
| * User settings and preferences
| |
| * Sensor definitions (sensor names, IP addresses, capture rules)
| |
| * Alert definitions and thresholds
| |
| * Filter configurations
| |
| * Dashboard configurations
| |
|
| |
| '''What is NOT Transferred:'''
| |
| * '''Assignments of alerts to sensors''' - These must be reconfigured manually after restore
| |
| * '''Assignments of reports to sensors''' - These must be reconfigured manually after restore
| |
| * '''Sensor user assignments''' - Access permissions for sensors must be reassigned to users
| |
| * Captured call data (CDRs) and PCAP files - These are not included in the backup
| |
|
| |
| '''Behavior When Merging:'''
| |
| If the new GUI instance already has existing data:
| |
| * User accounts from the backup will '''overwrite''' existing users with the same username or ID
| |
| * Sensor definitions will be replaced with the backed-up versions
| |
| * Configuration settings will be overwritten
| |
| * This is NOT a merge operation - it is a restore that replaces existing data
| |
|
| |
| For these reasons, it is strongly recommended to perform the restore on a freshly installed GUI instance with no existing configuration.
| |
|
| |
| === Method 1: Using the GUI Web Interface (Recommended) ===
| |
|
| |
| The simplest method is to use the built-in GUI backup and restore interface. This method correctly handles dashboard ownership tied to user and group IDs.
| |
|
| |
| '''1. On the source server (Old GUI):'''
| |
|
| |
| Navigate to '''GUI → Tools → Backup & restore'''
| |
| * Select "'''backup GUI: configuration tables'''"
| |
| * Perform the backup
| |
| * Download the generated backup file
| |
|
| |
| '''2. On the destination server (New GUI):'''
| |
|
| |
| Navigate to '''GUI → Tools → Backup & restore'''
| |
| * Select "'''restore'''"
| |
| * Upload and select the backup file created from the source server
| |
|
| |
| This is the '''recommended method''' for migrating dashboards because it automatically handles user ID mapping and ownership correctly.
| |
|
| |
| === Method 2: Using the restoreGuiTables CLI Command ===
| |
|
| |
| The GUI provides a command-line tool to restore configuration tables directly without manually importing SQL files.
| |
|
| |
| '''1. Navigate to your GUI directory:'''
| |
| <syntaxhighlight lang="bash">
| |
| cd /var/www/html
| |
| </syntaxhighlight>
| |
|
| |
| '''2. Restore the configuration tables:'''
| |
| <syntaxhighlight lang="bash">
| |
| php php/run.php restoreGuiTables -t config -f /var/backups/voipmonitor_gui/config_tables-YYYY-MM-DD.sql | | php php/run.php restoreGuiTables -t config -f /var/backups/voipmonitor_gui/config_tables-YYYY-MM-DD.sql |
| php php/run.php restoreGuiTables -t data -f /var/backups/voipmonitor_gui/data_tables-YYYY-MM-DD.sql | | php php/run.php restoreGuiTables -t data -f /var/backups/voipmonitor_gui/data_tables-YYYY-MM-DD.sql |
| </syntaxhighlight>
| |
|
| |
| '''3. Restore the Configuration Files:'''
| |
|
| |
|
| Extract the backed-up PHP configuration files into your GUI's web root.
| | # Restore config files |
| <syntaxhighlight lang="bash">
| | tar xzf /var/backups/voipmonitor_gui/config_files-YYYY-MM-DD.tar.gz -C /var/www/html/ |
| # Extract the archive, overwriting existing files | |
| tar xzf /var/backups/voipmonitor_gui/config_files-YYYY-MM-DD.tar.gz | |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| === Method 3: Manual MySQL Import === | | == What IS and IS NOT Transferred == |
|
| |
|
| Alternatively, you can use the <code>mysql</code> command-line client to import the saved SQL dumps.
| | {| class="wikitable" |
| | |- |
| | ! Transferred !! NOT Transferred |
| | |- |
| | | User accounts, permissions, groups || '''Alert-to-sensor assignments''' (reconfigure manually) |
| | |- |
| | | Sensor definitions || '''Report-to-sensor assignments''' (reconfigure manually) |
| | |- |
| | | Alert/report definitions || '''Sensor user access permissions''' (reassign manually) |
| | |- |
| | | Dashboards, capture rules, filters || CDR data, PCAP files |
| | |} |
|
| |
|
| '''1. Restore the Database Tables:''' | | {{Note|1=Restore '''replaces''' data, it does NOT merge. Users/sensors with same ID are overwritten.}} |
| <syntaxhighlight lang="bash">
| |
| mysql -u your_user -p voipmonitor < /var/backups/voipmonitor_gui/config_tables-YYYY-MM-DD.sql
| |
| mysql -u your_user -p voipmonitor < /var/backups/voipmonitor_gui/data_tables-YYYY-MM-DD.sql
| |
| </syntaxhighlight>
| |
|
| |
|
| '''2. Restore the Configuration Files:'''
| | == Dashboard-Only Migration == |
|
| |
|
| Extract the backed-up PHP configuration files into your GUI's web root.
| | To transfer only dashboards between GUI instances without other settings. |
| <syntaxhighlight lang="bash">
| |
| # Navigate to the GUI's root directory (path may vary)
| |
| cd /var/www/html/
| |
| | |
| # Extract the archive, overwriting existing files
| |
| tar xzf /var/backups/voipmonitor_gui/config_files-YYYY-MM-DD.tar.gz
| |
| </syntaxhighlight>
| |
| | |
| After restoring both the database and files, your GUI's configuration should be fully recovered.
| |
| | |
| === Important: Cross-OS and Cloud Migration Considerations ===
| |
| | |
| When migrating VoIPmonitor to a new environment such as Azure or another cloud provider where the destination OS version may differ from the source, '''do NOT clone or copy binaries''' between servers. Instead, use a fresh installation approach:
| |
| | |
| '''Key Steps for Cross-OS Migration:'''
| |
| # '''Fresh Installation''': Install VoIPmonitor from scratch on the new server using the official installer for the new OS distribution
| |
| # '''Backup GUI Settings''': Use the GUI backup/restore feature to transfer users, sensors, alerts, dashboards, templates, and reports (see [[#Quick Backup via GUI Web Interface|above]])
| |
| # '''Backup Configuration Files''': Save <code>voipmonitor.conf</code> and GUI configuration files
| |
| # '''Database Migration''': Use mysqldump or a migration instance to transfer CDRs
| |
| # '''Copy Spool Directory''': Transfer <code>/var/spool/voipmonitor</code> (captures and recordings) using rsync
| |
| # '''GUI PHP Version Dependency''': The GUI application is PHP version dependent. When installing on the new server, download the GUI package that matches the PHP version on the destination OS. See [[Re-install_the_GUI|Reinstall the GUI]] for detailed guidance on handling PHP version changes.
| |
| | |
| {{Warning|'''Database Version Mismatch:''' If you are migrating between servers with MySQL or MariaDB versions that differ significantly, do not use mysqldump directly to restore CDR data.}}
| |
| | |
| When the old and new servers have different database versions, a direct mysqldump restore may fail or cause compatibility issues. There are two solutions:
| |
| | |
| '''Solution 1: Use VoipMonitor Migration Instance (Recommended for CDR Migration)'''
| |
| | |
| Instead of using mysqldump directly for the main database:
| |
| # Run a VoipMonitor migration instance using <code>voipmonitor-migrate.conf</code>
| |
| # Configure the migration instance to read from the old database
| |
| # Set the migration destination to a temporary backup database on the new server
| |
| # After migration completes, run a second migration instance to move data from the temporary database to the final destination database
| |
| # This approach handles schema version differences automatically
| |
| | |
| '''Solution 2: Use mysqldump --compatible Option'''
| |
| | |
| For smaller databases, you can use mysqldump with compatibility options:
| |
| <syntaxhighlight lang="bash">
| |
| # Example for MySQL 5.7 to 8.0 migration
| |
| mysqldump -u root -p --compatible=mysql57 voipmonitor > backup.sql
| |
| </syntaxhighlight>
| |
| However, this method may not work for all schema changes and the migration instance method above is more reliable.
| |
| | |
| These warnings apply primarily to the main CDR database. GUI configuration tables (users, sensors, dashboards) typically have stable schemas that can be migrated directly without issues.
| |
| | |
| == Migrating to a New Server (Simple Fresh Installation Method) ==
| |
| | |
| This method describes the straightforward approach for migrating VoIPmonitor to a new server, which is especially useful when the old server is running an end-of-life (EOL) operating system that cannot be upgraded.
| |
| | |
| === Overview ===
| |
| | |
| When dealing with legacy systems that have kernel compatibility issues or EOL operating systems, the simplest approach is to perform a fresh installation on new hardware and restore your configuration backups. This avoids complex migration procedures and potential compatibility problems.
| |
| | |
| This process involves:
| |
| # Backing up GUI configuration tables
| |
| # Backing up configuration files
| |
| # Installing VoIPmonitor on the new server
| |
| # Restoring configuration on the new system
| |
| # Testing with a subset of traffic
| |
| | |
| === Step 1: Backup Configuration on Old System ===
| |
| | |
| Before deactivating the old system, create backups of all essential configuration.
| |
| | |
| '''1. Backup GUI Configuration Tables:'''
| |
| | |
| Run the backup command from your GUI installation directory:
| |
| <syntaxhighlight lang="bash">
| |
| cd /var/www/html
| |
| php php/run.php backupGuiTables -t config -f backup.zip
| |
| </syntaxhighlight>
| |
| | |
| This command exports all GUI settings including:
| |
| * User accounts and permissions
| |
| * Sensor definitions
| |
| * Capture rules
| |
| * Dashboard configurations
| |
| * Alert definitions
| |
| | |
| '''2. Backup Sniffer Configuration Files:'''
| |
| | |
| Copy the main configuration file:
| |
| <syntaxhighlight lang="bash">
| |
| cp /etc/voipmonitor.conf /tmp/voipmonitor.conf.backup
| |
| </syntaxhighlight>
| |
| | |
| '''3. Backup GUI Configuration File:'''
| |
| | |
| <code>configuration.php</code> contains GUI-specific settings. Copy it from your GUI directory:
| |
| <syntaxhighlight lang="bash">
| |
| cp /var/www/html/voipmonitor/configuration.php /tmp/configuration.php.backup
| |
| # Note: Adjust the path if your GUI is installed in a different location
| |
| </syntaxhighlight>
| |
| | |
| Transfer these backup files to the new server using SCP, FTP, or any other secure method.
| |
| | |
| === Step 2: Perform Fresh Installation on New Server ===
| |
| | |
| On the new server, install VoIPmonitor following the standard installation procedures, using a current supported operating system such as Debian 12 (Bookworm) or Ubuntu 22.04.
| |
| | |
| Follow the [[Sniffer_installation|Sniffer Installation Guide]] for the sensor component and the [[GUI_installation|GUI Installation Guide]] for the web interface.
| |
| | |
| === Step 3: Restore Configuration on New Server ===
| |
| | |
| After completing the fresh installation, restore your configuration files.
| |
| | |
| '''1. Restore the Sniffer Configuration:'''
| |
| <syntaxhighlight lang="bash">
| |
| cp voipmonitor.conf.backup /etc/voipmonitor.conf
| |
| </syntaxhighlight>
| |
|
| |
|
| '''2. Restore the GUI Configuration File:'''
| | === Simple Method (GUI) === |
| <syntaxhighlight lang="bash">
| |
| cp configuration.php.backup /var/www/html/voipmonitor/configuration.php
| |
| </syntaxhighlight>
| |
|
| |
|
| '''3. Restore GUI Configuration Tables:''' | | Use standard '''Backup & restore''' - this transfers dashboards along with other config. Users are included. |
|
| |
|
| {{Warning|1=If you applied a <strong>trial license</strong> on the new system, you must <strong>exclude the 'system' table</strong> when restoring to preserve the trial license. Restoring the 'system' table will overwrite the trial license with the old system's license.}}
| | === Advanced Method (SQL Extraction) === |
|
| |
|
| {{Note|The standard web interface restore does not provide an option to exclude specific tables. If you need to exclude the 'system' table to preserve a trial license, use the CLI method below.}}
| | Dashboards are stored in the <code>custom_config</code> table. |
|
| |
|
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| | # On source server: create backup |
| cd /var/www/html | | cd /var/www/html |
| | php php/run.php backupGuiTables -t config -f /tmp/old_config.sql |
|
| |
|
| # Standard restore (overwrites all tables including license) | | # Extract only custom_config INSERT statements |
| php php/run.php restoreGuiTables -t config -f backup.zip
| | grep "^INSERT INTO \`custom_config\`" /tmp/old_config.sql > /tmp/dashboards_only.sql |
| | |
| # To exclude 'system' table (preserves trial license):
| |
| php php/run.php restoreGuiTables -t config -f backup.zip --exclude-table system
| |
| </syntaxhighlight>
| |
| | |
| '''4. Configure Sniffer Parameters:'''
| |
| | |
| Edit the sniffer configuration file for the new environment:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| nano /etc/voipmonitor.conf
| |
| </syntaxhighlight>
| |
| | |
| Update these parameters to match the new server configuration:
| |
| | |
| <syntaxhighlight lang="ini">
| |
| # Update network interface for packet capture
| |
| interface = eth0
| |
| | |
| # Update spool directory path (if different)
| |
| spooldir = /var/spool/voipmonitor
| |
| | |
| # Adjust maxpoolsize based on new disk capacity
| |
| maxpoolsize = 1000000000
| |
| | |
| # Set server_bind if this is a central server for remote sensors
| |
| server_bind = 0.0.0.0
| |
| server_bind_port = 60024
| |
| </syntaxhighlight>
| |
| | |
| Alternatively, you can use the web interface to configure the backup file.
| |
| | |
| === Step 4: Configure Remote Probes ===
| |
| | |
| If you have remote probes in a distributed (client-server) deployment, update the configuration on each probe to point to the new central server:
| |
| | |
| <syntaxhighlight lang="bash>
| |
| # On each remote probe
| |
| nano /etc/voipmonitor.conf
| |
| </syntaxhighlight>
| |
| | |
| Update the <code>server_destination</code> parameter:
| |
| | |
| <syntaxhighlight lang="ini>
| |
| # Update to the new central server IP
| |
| server_destination = NEW.CENTRAL.SERVER.IP
| |
| server_destination_port = 60024
| |
| </syntaxhighlight>
| |
| | |
| After updating, restart the probe service:
| |
| | |
| <syntaxhighlight lang="bash>
| |
| systemctl restart voipmonitor
| |
| </syntaxhighlight>
| |
| | |
| Verify the probe appears as connected in GUI → Settings → Sensors.
| |
| | |
| === Step 5: Start and Verify ===
| |
| | |
| Start the service and verify it is functioning correctly:
| |
| <syntaxhighlight lang="bash">
| |
| systemctl start voipmonitor
| |
| systemctl status voipmonitor
| |
| </syntaxhighlight>
| |
|
| |
|
| Monitor the logs to ensure the service starts without errors:
| | # On target server: import |
| <syntaxhighlight lang="bash">
| | mysql -u voipmonitor_user -p voipmonitor < /tmp/dashboards_only.sql |
| journalctl -u voipmonitor -f
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| === Step 6: Test with Subset of Traffic ===
| | {{Note|Folder structures are NOT preserved. Recreate folders manually after import.}} |
| | |
| Before fully migrating or decommissioning the old system:
| |
| | |
| # Configure network capture to monitor a subset of your traffic (using the [[Capture_rules|capture rules]] or by mirroring only specific VLANs/ports)
| |
| # Verify that calls are appearing in the GUI
| |
| # Check for RTP capture issues that were present on the old system
| |
| # Play back recorded calls to confirm audio quality
| |
| | |
| Once you are satisfied that the new system is functioning correctly:
| |
| | |
| # Expand monitoring to full traffic if needed
| |
| # Move your paid license to the new system:
| |
| ## If you used a trial license on the new system, cancel the trial from voipmonitor.org
| |
| ## Copy the paid license token from the old system to the new system via GUI → Settings → License
| |
| ## Or navigate to voipmonitor.org, download the license key file, and upload to the new system
| |
| # Decommission the old VoIPmonitor installation:
| |
| ## Stop the service: <code>systemctl stop voipmonitor</code>
| |
| ## Disable the service: <code>systemctl disable voipmonitor</code>
| |
| ## Verify the old system is no longer accessible (optional for security)
| |
| | |
| === When to Use This Method vs voipmonitor-migrate.conf ===
| |
| | |
| Use this simple fresh installation method when:
| |
| * The old server is EOL and cannot be upgraded
| |
| * You do not need to migrate historical data (CDRs or PCAP files)
| |
| * You want a clean start with zero compatibility issues
| |
| * You have network access to the new server for SPAN/mirroring
| |
| | |
| Use the [[#Migrating_VoIPmonitor_to_New_Hardware|complex migration method with voipmonitor-migrate.conf]] when:
| |
| * You need to transfer large amounts of historical call data
| |
| * You require zero-downtime migration with parallel operation
| |
| * You need to migrate database files to a new storage system
| |
| | |
| Use the [[Redundant_database|database dump/restore or online migration]] method when:
| |
| * You need to migrate the FULL database including CDRs
| |
| * You want simple mysqldump restore (acceptable downtime) OR
| |
| * You need minimal/no downtime with online migration
| |
| | |
| The [[Redundant_database|Redundant Database]] guide covers:
| |
| | |
| '''Method 1: Dump/Restore (With Downtime):'''
| |
| :# Stop the sniffer on the old server
| |
| :# Dump database: <code>mysqldump -u root -p voipmonitor > backup.sql</code>
| |
| :# Transfer and restore on new server: <code>mysql -u root -p voipmonitor < backup.sql</code>
| |
| | |
| '''Method 2: Online Migration (Minimal/No Downtime):'''
| |
| :# Install new GUI with fresh database
| |
| :# Restore GUI configuration tables via backup/restore
| |
| :# Run migration instance to sync CDRs incrementally
| |
| :# See [[Redundant_database|Redundant Database]] for detailed configuration
| |
| | |
| == Migrating VoIPmonitor to New Hardware (Data Migration Method) ==
| |
| | |
| This is an advanced method for migrating VoIPmonitor to a new hardware server while transferring existing call data. You use a dedicated migration instance to transfer configuration and data smoothly.
| |
| | |
| === Overview ===
| |
| | |
| The migration process involves:
| |
| # Backing up GUI configuration (must be done BEFORE starting migration)
| |
| # Restoring GUI configuration on the new server
| |
| # Running a migration instance using <code>voipmonitor-migrate.conf</code>
| |
| # Optionally running the migration instance in parallel with the original sniffer
| |
|
| |
|
| === Step 1: Prepare for Migration === | | == Server Migration == |
|
| |
|
| First, create a backup of all GUI configuration on the OLD server:
| | === Fresh Installation Method (Recommended) === |
|
| |
|
| # On the old GUI, navigate to '''GUI → Tools → Backup & restore'''
| | Best for EOL systems or when historical data is not needed. |
| # Select ''':backup GUI: configuration tables''' to back up all database settings (users, sensors, capture rules, dashboards, etc.)
| |
| # Download the generated backup file
| |
|
| |
|
| === Step 2: Restore Configuration on New Hardware ===
| | # '''Backup on old server:''' |
| | #* GUI config: '''Tools → Backup & restore''' → "configuration tables" |
| | #* Sniffer config: <code>cp /etc/voipmonitor.conf /tmp/</code> |
| | #* GUI PHP config: <code>cp /var/www/html/*/configuration.php /tmp/</code> |
| | # '''Fresh install on new server''' (see [[Sniffer_installation]], [[GUI_installation]]) |
| | # '''Restore configuration:''' |
| | #* GUI: '''Tools → Backup & restore''' → "restore" |
| | #* Sniffer: <code>cp voipmonitor.conf.backup /etc/voipmonitor.conf</code> |
| | #* Update <code>interface</code>, <code>spooldir</code>, <code>server_bind</code> for new environment |
| | # '''Update remote probes''' (if distributed): Change <code>server_destination</code> to new server IP |
| | # '''Test with subset of traffic''' before full cutover |
|
| |
|
| On the NEW server:
| | {{Tip|1=To preserve trial license on new system, use CLI restore with <code>--exclude-table system</code>}} |
|
| |
|
| # Install VoIPmonitor Sniffer and GUI following the standard installation guide
| | === Data Migration Method === |
| # Restore the GUI configuration backup:
| |
| #* Navigate to '''GUI → Tools → Backup & restore'''
| |
| #* Select ''':restore GUI: configuration tables'''
| |
| #* Upload and select the backup file created from the old server
| |
|
| |
|
| === Step 3: Create voipmonitor-migrate.conf ===
| | For transferring historical CDR data with minimal downtime. See [[Redundant_database]] for: |
| | * '''Dump/Restore:''' Simple <code>mysqldump</code> with downtime |
| | * '''Online Migration:''' Use <code>voipmonitor-migrate.conf</code> for zero-downtime sync |
|
| |
|
| The migration configuration file is a copy of your original <code>voipmonitor.conf</code> with migration-specific options added.
| | === Cross-OS / Cloud Migration === |
|
| |
|
| '''Create the migration configuration file:'''
| | {{Warning|1=Do NOT clone binaries between different OS versions. Always perform fresh installation.}} |
| <syntaxhighlight lang="bash">
| |
| cp /etc/voipmonitor.conf /etc/voipmonitor-migrate.conf
| |
| </syntaxhighlight>
| |
|
| |
|
| {{Warning|You must complete the GUI backup and restore procedure BEFORE starting the migration instance. Do not skip steps 1-2.}}
| | * Download GUI package matching destination PHP version (see [[Re-install_the_GUI]]) |
| | * For database version mismatches, use migration instance instead of direct mysqldump |
|
| |
|
| === Step 4: Configure Parallel Operation (Optional) === | | == Cloud Token Migration == |
|
| |
|
| If you need to run the migration instance while the original sniffer is still active (for zero-downtime migration):
| | Each cloud token has its own database. To migrate alerts/reports between tokens: |
|
| |
|
| '''1. Edit <code>voipmonitor-migrate.conf</code> and modify these settings to avoid conflicts:''' | | # '''Contact VoIPmonitor support''' - request temporary trial cloud license |
| <syntaxhighlight lang="ini">
| | # '''Support restores''' old database to temporary license |
| # Change the manager port to avoid conflicts with the original sniffer | | # '''Export config''' from temporary license via '''Backup & restore''' |
| # Default managerport is 6001, choose a different port (e.g., 6002) | | # '''Import config''' to new license via '''Backup & restore''' |
| managerport = 6002
| | # '''Restart sniffers:''' <code>systemctl restart voipmonitor</code> |
|
| |
|
| # IMPORTANT: Comment out or disable ALL bind* options
| | {{Note|Alert-to-sensor assignments must be reconfigured manually after migration.}} |
| # These bind to network interfaces and will cause conflicts if both instances are active
| |
| #bind = 0.0.0.0:5060
| |
| #bindbindip = 0.0.0.0
| |
| #bindbindport = 5061
| |
| #bindtlsbindport = 5062
| |
| </syntaxhighlight>
| |
|
| |
|
| '''2.''' Ensure other paths (spooldir, pcapdir, etc.) point to appropriate locations on the new hardware
| | == Troubleshooting == |
|
| |
|
| === Step 5: Run Migration Instance === | | === Backup Fails with "errno 28" (Disk Full) === |
|
| |
|
| Once configuration is restored and the migration config is prepared, start the migration instance:
| | MySQL needs temp space for backup operations. |
|
| |
|
| <syntaxhighlight lang="bash">
| | '''Solution:''' Use smaller "configuration tables" backup instead of "data tables": |
| # Start the migration instance
| | * Configuration tables: ~1-10 MB (contains all essential settings) |
| voipmonitor --config-file /etc/voipmonitor-migrate.conf
| | * Data tables: 100+ MB (supporting data, not critical) |
|
| |
|
| # Or using systemd (if configured)
| | Check disk space: <code>df -h</code> (look at <code>/tmp</code> and <code>/var/lib/mysql</code>) |
| systemctl start voipmonitor-migrate.service
| |
| </syntaxhighlight> | |
|
| |
|
| The migration instance will process and migrate data using the restored configuration while avoiding conflicts with any running original sniffer.
| | === Backup Breaks GTID Replication === |
|
| |
|
| {{Note|After migration is complete, you can switch over to the new hardware by starting the standard voipmonitor service with the main <code>voipmonitor.conf</code> configuration file.}}
| | mysqldump includes GTID state by default, breaking replication on restore. |
| | |
| == Troubleshooting: Backup Fails with "errno 28" (No Space Left on Device) ==
| |
| | |
| If the GUI backup feature fails with the error '''"Got errno 28 on write"''', this is a standard system message indicating '''"No space left on device"'''. This means the disk partition where MySQL creates temporary files during the backup process is full.
| |
| | |
| {| class="wikitable" style="background-color: #FFF3CD;"
| |
| |-
| |
| ! colspan="2" style="background: #856404; color: white;" | Common Cause: Disk Full During Backup
| |
| |-
| |
| ! Symptom
| |
| | Backup via '''GUI → Tools → Backup & restore''' fails with errno 28, even though other operations work.
| |
| |-
| |
| ! Root Cause
| |
| | MySQL uses temporary files for backup operations. If the partition containing MySQL's temporary directory (default <code>/tmp</code>) or the data directory (<code>/var/lib/mysql</code>) is full, the backup fails.
| |
| |}
| |
|
| |
|
| === Diagnosis: Check Disk Space on All Partitions ===
| | '''Solution:''' Configure mysqldump to exclude GTID: |
| | # '''Settings → System Configuration → Database''' |
| | # Set '''Extra parameters for mysqldump binary:''' <code>--set-gtid-purged=OFF</code> |
| | # Save and create new backup |
|
| |
|
| | Or manually: |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| df -h
| | mysqldump -u root -p --set-gtid-purged=OFF voipmonitor users sensors alerts custom_config > backup.sql |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Check if the partition containing <code>/tmp</code> or <code>/var/lib/mysql</code> is full.
| | === Alerts/Reports Missing After Upgrade === |
| | |
| === Resolution: Use Smaller "Configuration Tables" Backup === | |
| | |
| If you cannot immediately free up disk space, you can still back up your critical GUI settings by selecting the smaller ''':backup GUI: configuration tables''' option instead of the full data tables backup.
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Backup Type !! Size !! Contents !! Use Case
| |
| |-
| |
| | '''Configuration Tables''' | Small (typically 1-10 MB) | Users, sensors, capture rules, alerts, dashboards, reports | Recommended for errno 28 issues. Contains all essential GUI settings.
| |
| |-
| |
| | '''Data Tables''' | Large (can be 100+ MB) | Supporting data like saved reports | Not critical for disaster recovery if space is limited.
| |
| |-
| |
| | '''Configuration Files''' | Small (KB range) | PHP configuration files | Backup separately (tarball of GUI config files).
| |
| |}
| |
| | |
| '''Steps to Perform Smaller Backup:'''
| |
| | |
| # Open the VoIPmonitor GUI web interface
| |
| # Navigate to '''GUI → Tools → Backup & restore'''
| |
| # Select ONLY ''':backup GUI: configuration tables'''
| |
| # Select ''':backup GUI: configuration files''' if needed
| |
| # Perform the backup
| |
| # Download the generated backup file to a safe location
| |
| | |
| This configuration tables backup contains all the critical settings needed to restore your GUI configuration after an upgrade or migration, while requiring much less disk space to generate.
| |
| | |
| === Alternative Solutions ===
| |
| | |
| If you need to perform a full backup including data tables:
| |
|
| |
|
| *'''Free up disk space:''' Check which partition is full using <code>df -h</code> and remove unnecessary files.
| | Restore from backup created before upgrade: |
| | # '''Tools → Backup & restore''' → "restore" → upload pre-upgrade backup |
| | # Reconfigure alert-to-sensor assignments manually |
|
| |
|
| *'''Change MySQL temporary directory:''' If <code>/tmp</code> is full but other partitions have space, configure MySQL to use a different temporary directory. See [[Data_Cleaning]] for detailed instructions on MySQL tmpdir configuration.
| | == See Also == |
|
| |
|
| For more information on disk space management and MySQL Error 28 troubleshooting, see [[Data_Cleaning#MySQL_Error_28:_No_Space_Left_on_Device|Data Cleaning Guide]].
| | * [[Redundant_database]] - Database replication and online migration |
| | * [[Re-install_the_GUI]] - GUI reinstallation for PHP version changes |
| | * [[Disaster_Recovery]] - Complete disaster recovery procedures |
| | * [[Data_Cleaning]] - Disk space management |
|
| |
|
| == AI Summary for RAG == | | == AI Summary for RAG == |
|
| |
|
| '''Summary:''' Guide for backing up VoIPmonitor GUI configuration. Two methods: (1) '''GUI method''' via '''GUI → Tools → Backup & restore''' for one-time backups - select "configuration tables" and "configuration files". (2) '''CLI method''' using <code>backupGuiTables</code> command with cron for automated daily backups. Restoration via GUI or CLI (<code>restoreGuiTables</code>). Critical: restore '''overwrites''' existing data. What IS transferred: user accounts, permissions, sensor definitions, alerts, dashboards. What is NOT transferred: alert-to-sensor assignments, report-to-sensor assignments, CDR/PCAP data. For dashboard-only migration: extract <code>custom_config</code> table. For cross-OS/cloud migration: perform fresh install and restore backup. For zero-downtime migration: use <code>voipmonitor-migrate.conf</code> with different <code>managerport</code>. '''Troubleshooting: If backup fails with errno 28 (disk full), use smaller "configuration tables" backup instead of "data tables" to save essential settings with minimal disk space.''' | | '''Summary:''' VoIPmonitor GUI configuration backup guide. Two methods: (1) GUI via '''Tools → Backup & restore''' for one-time backups, (2) CLI using <code>backupGuiTables</code>/<code>restoreGuiTables</code> commands with cron for automation. Backup includes users, sensors, alerts, dashboards, capture rules. Does NOT include: alert-to-sensor assignments, report-to-sensor assignments, CDR/PCAP data. Restore overwrites existing data. Dashboard-only migration: extract <code>custom_config</code> table. Server migration: fresh install recommended for EOL systems; use [[Redundant_database]] for data migration. Cloud token migration requires support intervention to restore old database to temporary license. Troubleshooting: errno 28 (disk full) - use smaller "configuration tables" backup; GTID replication - set <code>--set-gtid-purged=OFF</code> in mysqldump parameters. |
|
| |
|
| '''Keywords:''' backup, restore, configuration, GUI, settings, users, sensors, capture rules, cron, automation, disaster recovery, dashboard, migration, upgrade, backupGuiTables, restoreGuiTables, custom_config, overwrite, EOL, fresh installation, voipmonitor-migrate.conf, cross-OS, cloud migration, errno 28, no space left on device, disk fullBackup | | '''Keywords:''' backup, restore, configuration, GUI settings, users, sensors, alerts, dashboards, capture rules, backupGuiTables, restoreGuiTables, custom_config, cron automation, migration, disaster recovery, cloud token, GTID replication, errno 28, disk full |
|
| |
|
| '''Key Questions:''' | | '''Key Questions:''' |
| * How do I back up my VoIPmonitor GUI before an upgrade? | | * How do I back up VoIPmonitor GUI configuration? |
| * How do I schedule automated daily backups using cron? | | * How do I schedule automated daily GUI backups? |
| * How do I restore my GUI configuration from a backup? | | * How do I restore GUI settings from backup? |
| * Does this backup include my call recordings (CDRs/PCAPs)?
| | * What is and is not included in a GUI configuration backup? |
| * What IS and IS NOT transferred when restoring a backup? | | * Does restore merge or overwrite existing data? |
| * Does the restore merge or overwrite existing data? | | * How do I migrate only dashboards between GUI instances? |
| * How do I import only dashboards from one GUI to another? | | * How do I migrate VoIPmonitor to a new server? |
| * How do I migrate VoIPmonitor to new hardware? | | * How do I transfer alerts between cloud tokens? |
| * How do I migrate VoIPmonitor from an EOL operating system? | | * Why does backup fail with errno 28? |
| * What is voipmonitor-migrate.conf and when should I use it?
| | * How do I prevent backups from breaking MySQL GTID replication? |
| * If alerts disappear after an upgrade, how do I restore them?
| |
| * What do I do if GUI backup fails with "errno 28" or "no space left on device"? | |
| * How do I perform a backup when disk space is limited? | |