24
Knowledge Center

24IThub Insights

Enterprise communication knowledge and guidance.

Visit 24IThub All Articles

How to Install VICIdial on AlmaLinux 9: Complete Production Guide

A practical step-by-step guide to installing VICIdial on AlmaLinux 9, including MariaDB, Apache, Asterisk 18, firewall, SIP carrier, campaigns, agents, recordings, testing and production security.

Last updated 12 Jul 2026
How to Install VICIdial on AlmaLinux 9: Complete Production Guide

24IThub LLC Technical Deployment Guide

How to Install VICIdial on AlmaLinux 9

This step-by-step guide explains how to prepare an AlmaLinux 9 server for a VICIdial deployment, install the required database, web and telephony components, configure Asterisk, deploy the VICIdial application, create the first carrier and campaign, and validate the complete call flow.

The guide is intended for system administrators, telecom engineers, contact center operators and technical teams building a controlled lab or production dialer environment.

Production warning

Do not run installation commands blindly on an existing dialer. Take a complete server and database backup first. Test the complete procedure on a fresh AlmaLinux 9 server before using it in production.

Version policy

This guide uses Asterisk 18 as the reference telephony engine. Pin the exact Asterisk and VICIdial revisions validated by your organization instead of automatically deploying an untested release.

Deployment Architecture

Typical VICIdial Call Flow

Lead Database

VICIdial

Asterisk

SIP Carrier

Customer

Agent

Recommended Server Requirements

ComponentLab / Small SetupProduction Recommendation
CPU4 vCPU8 or more dedicated CPU cores
Memory8 GB16 GB or more
Storage100 GB SSD500 GB or larger NVMe with recording plan
Operating SystemAlmaLinux 9 minimalFresh AlmaLinux 9 minimal installation
NetworkStatic public IPv4Static IPv4 with stable low-latency connectivity
HostnameOptional for labDedicated FQDN
BackupManualAutomated off-server backup

Pre-Installation Checklist

  • ✓Fresh AlmaLinux 9 server
  • ✓Root or sudo access
  • ✓Static public IP address
  • ✓Correct forward and reverse DNS where available
  • ✓SIP carrier details
  • ✓Approved caller ID
  • ✓Firewall and RTP requirements
  • ✓Recording retention plan
  • ✓Database backup destination

Step 1: Confirm the Fresh Server

STEP 01

Verify operating system and resources

Confirm that the server is running AlmaLinux 9 and that its CPU, memory, storage, hostname and network configuration match the deployment plan.

root@dialer Copy Command

cat /etc/almalinux-release hostnamectl timedatectl ip address free -h df -h lscpu

Expected Result

AlmaLinux 9.x Correct hostname and timezone Expected public or private network address Sufficient RAM and free storage

Screenshot placement: Add a terminal screenshot showing the AlmaLinux version, hostname, memory and disk capacity.

Step 2: Configure Hostname and Timezone

STEP 02

Assign a permanent server identity

Replace the example hostname and timezone with values appropriate for your deployment.

root@dialer Copy Command

hostnamectl set-hostname dialer.example.com timedatectl set-timezone Asia/Kolkata timedatectl set-ntp true hostnamectl timedatectl

Expected Result

Static hostname: dialer.example.com Time zone: Asia/Kolkata System clock synchronized: yes

Use the correct timezone

VICIdial reports, scheduled callbacks, campaign operating hours and database timestamps depend on consistent time configuration.

Step 3: Update AlmaLinux

STEP 03

Install current operating-system updates

Update the package metadata and install available security and stability updates before adding application components.

root@dialer Copy Command

dnf clean all dnf makecache dnf update -y reboot

After Reboot

uname -r uptime timedatectl

Step 4: Enable Required Repositories

STEP 04

Enable build and supplementary packages

VICIdial and Asterisk require development libraries that may not all be available in a minimal installation.

root@dialer Copy Command

dnf install -y epel-release dnf config-manager --set-enabled crb dnf makecache

Verification

dnf repolist

Step 5: Install Core Packages

STEP 05

Install web, database, development and utility packages

Install the base packages needed for Apache, MariaDB, PHP, Asterisk compilation, source management and system administration.

root@dialer Copy Command

dnf groupinstall -y "Development Tools" dnf install -y \ git wget curl tar unzip rsync nano vim-enhanced \ httpd mariadb-server mariadb-devel \ php php-cli php-common php-mysqlnd php-gd php-mbstring \ php-xml php-process php-opcache php-json \ perl perl-CPAN perl-DBI perl-DBD-MySQL \ perl-Time-HiRes perl-libwww-perl perl-JSON \ openssl openssl-devel libxml2 libxml2-devel \ ncurses ncurses-devel libuuid libuuid-devel \ jansson jansson-devel sqlite sqlite-devel \ libedit libedit-devel libcurl libcurl-devel \ speex speex-devel speexdsp speexdsp-devel \ libogg libogg-devel libvorbis libvorbis-devel \ unixODBC unixODBC-devel sox lame ffmpeg \ chrony firewalld policycoreutils-python-utils

Verification

php -v httpd -v mariadb --version git --version sox --version

Package availability

Package names may vary between enabled repositories. If a package is unavailable, verify the repository configuration instead of installing an unrelated third-party RPM.

Step 6: Start Chrony, Firewall, Apache and MariaDB

STEP 06

Enable required services

Start the base services and configure them to launch automatically after a server reboot.

root@dialer Copy Command

systemctl enable --now chronyd systemctl enable --now firewalld systemctl enable --now mariadb systemctl enable --now httpd systemctl status chronyd --no-pager systemctl status mariadb --no-pager systemctl status httpd --no-pager

Expected Result

Active: active (running)

Step 7: Secure MariaDB

STEP 07

Apply the initial database security configuration

Remove test access, review anonymous users and configure the database administrator authentication according to your policy.

root@dialer Copy Command

mariadb-secure-installation

Verification

mariadb -e "SELECT VERSION();"

Step 8: Configure MariaDB for VICIdial

STEP 08

Create a dedicated database configuration file

Use a conservative baseline first. Database tuning should be based on actual call volume, list size, reporting load and available RAM.

root@dialer Copy Command

cat > /etc/my.cnf.d/vicidial.cnf <<'EOF' [mysqld] max_connections=500 max_allowed_packet=64M wait_timeout=300 interactive_timeout=300 skip_name_resolve=1 innodb_file_per_table=1 innodb_buffer_pool_size=2G innodb_log_file_size=512M innodb_flush_log_at_trx_commit=2 sql_mode=NO_ENGINE_SUBSTITUTION [client] default-character-set=utf8mb4 EOF systemctl restart mariadb systemctl status mariadb --no-pager

Verification

mariadb -e "SHOW VARIABLES LIKE 'max_connections';" mariadb -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Adjust memory values

Do not use a 2 GB InnoDB buffer pool on a server that does not have sufficient RAM. Database, Apache, Asterisk and operating-system processes must all have adequate memory.

Step 9: Create the VICIdial Database and User

STEP 09

Create a dedicated application account

Replace the example password before executing the SQL.

root@dialer Copy Command

mariadb <<'SQL' CREATE DATABASE asterisk CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'cron'@'localhost' IDENTIFIED BY 'CHANGE_THIS_LONG_PASSWORD'; GRANT ALL PRIVILEGES ON asterisk.* TO 'cron'@'localhost'; FLUSH PRIVILEGES; SQL

Verification

mariadb -e "SHOW DATABASES;" mariadb -e "SELECT User,Host FROM mysql.user;"

Step 10: Download the VICIdial Source

STEP 10

Clone and pin the validated source revision

Use your approved VICIdial source repository and pin a tested commit or release before production deployment.

root@dialer Copy Command

mkdir -p /usr/src/vicidial cd /usr/src/vicidial git clone https://github.com/astguiclient/astguiclient.git cd astguiclient git status git log -1 --oneline

Production Requirement

Record the exact Git commit ID used for deployment. Do not automatically pull a different revision on production.

Step 11: Install Asterisk 18

STEP 11

Download and compile the validated Asterisk release

Replace the example version with the exact supported Asterisk 18 release validated for your VICIdial build.

root@dialer Copy Command

cd /usr/src export ASTERISK_VERSION="18.XX.X" wget "https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-${ASTERISK_VERSION}.tar.gz" tar -xzf "asterisk-${ASTERISK_VERSION}.tar.gz" cd "asterisk-${ASTERISK_VERSION}" contrib/scripts/install_prereq install ./configure --with-jansson-bundled --with-pjproject-bundled make menuselect

Menuselect Review

Confirm required codecs, format modules, res_http_websocket, PJSIP or chan_sip requirements, recording formats and app modules.

Do not continue with a placeholder version

Replace 18.XX.X with the exact Asterisk release tested by your team. A placeholder command should never be executed unchanged.

root@dialer Copy Command

make -j"$(nproc)" make install make samples make config ldconfig systemctl enable asterisk systemctl start asterisk asterisk -rx "core show version" asterisk -rx "core show uptime"

Expected Result

Asterisk 18.x System uptime displayed Asterisk process running successfully

Screenshot placement: Add the Asterisk CLI showing core show version and core show uptime.

Step 12: Create the Asterisk Service User and Permissions

STEP 12

Apply controlled ownership

Ensure Asterisk owns the directories it must write to without making the entire server world-writable.

root@dialer Copy Command

id asterisk || useradd --system --home-dir /var/lib/asterisk \ --shell /sbin/nologin asterisk chown -R asterisk:asterisk \ /etc/asterisk \ /var/lib/asterisk \ /var/log/asterisk \ /var/spool/asterisk \ /var/run/asterisk find /etc/asterisk -type d -exec chmod 750 {} \; find /etc/asterisk -type f -exec chmod 640 {} \;

Verification

ls -ld /etc/asterisk ls -ld /var/lib/asterisk ls -ld /var/spool/asterisk

Step 13: Deploy VICIdial Web Files

STEP 13

Copy the web interface to Apache

Confirm the actual source directories in your checked-out VICIdial revision before copying files.

root@dialer Copy Command

cd /usr/src/vicidial/astguiclient mkdir -p /var/www/html/vicidial mkdir -p /var/www/html/agc rsync -av www/vicidial/ /var/www/html/vicidial/ rsync -av www/agc/ /var/www/html/agc/ chown -R apache:apache /var/www/html/vicidial /var/www/html/agc find /var/www/html/vicidial -type d -exec chmod 755 {} \; find /var/www/html/vicidial -type f -exec chmod 644 {} \; find /var/www/html/agc -type d -exec chmod 755 {} \; find /var/www/html/agc -type f -exec chmod 644 {} \;

Verification

find /var/www/html/vicidial -maxdepth 2 -type f | head find /var/www/html/agc -maxdepth 2 -type f | head

Check source paths first

Different VICIdial source revisions may organize web files differently. Review the cloned repository before running the rsync commands.

Step 14: Install VICIdial Perl and AGI Files

STEP 14

Deploy backend scripts

Install the required VICIdial scripts, AGI programs and supporting files using the structure provided by the selected source revision.

root@dialer Copy Command

cd /usr/src/vicidial/astguiclient mkdir -p /usr/share/astguiclient mkdir -p /var/lib/asterisk/agi-bin rsync -av bin/ /usr/share/astguiclient/ rsync -av agi/ /var/lib/asterisk/agi-bin/ chown -R root:root /usr/share/astguiclient chown -R asterisk:asterisk /var/lib/asterisk/agi-bin find /usr/share/astguiclient -type f -exec chmod 750 {} \; find /var/lib/asterisk/agi-bin -type f -exec chmod 750 {} \;

Verification

ls -lah /usr/share/astguiclient | head ls -lah /var/lib/asterisk/agi-bin | head

Step 15: Import the VICIdial Database Schema

STEP 15

Locate and import the schema files

Inspect the SQL directory included with your source revision and import the required base schema and upgrade files in the documented order.

root@dialer Copy Command

cd /usr/src/vicidial/astguiclient find . -type f -name "*.sql" | sort

Next Action

Identify the base schema and required update scripts supplied by the pinned VICIdial revision. Import them in the documented order.

example-only Copy Command

mariadb asterisk < /path/to/validated-base-schema.sql mariadb -e "USE asterisk; SHOW TABLES;"

Expected Result

VICIdial tables should be listed. Do not use an arbitrary SQL file or skip required upgrade scripts.

Step 16: Configure astguiclient.conf

STEP 16

Connect VICIdial scripts to MariaDB

Locate the configuration template supplied with the source and enter the correct database host, database name, username and password.

root@dialer Copy Command

find /usr/src/vicidial/astguiclient \ -type f -name "astguiclient.conf*" -print nano /etc/astguiclient.conf

Required Values

VARDB_server: localhost VARDB_database: asterisk VARDB_user: cron VARDB_pass: your-secure-database-password VARSERVER_ip: server IP used by VICIdial

Protect database credentials

Restrict the configuration-file permissions and never publish real database passwords in screenshots, blogs or support tickets.

Step 17: Configure Apache

STEP 17

Create a dedicated virtual host

Replace the sample hostname with the production FQDN.

root@dialer Copy Command

cat > /etc/httpd/conf.d/vicidial.conf <<'EOF' <VirtualHost *:80>    ServerName dialer.example.com    DocumentRoot /var/www/html    <Directory /var/www/html>        AllowOverride All        Require all granted        Options FollowSymLinks    </Directory>    ErrorLog /var/log/httpd/vicidial-error.log    CustomLog /var/log/httpd/vicidial-access.log combined </VirtualHost> EOF apachectl configtest systemctl restart httpd systemctl status httpd --no-pager

Expected Result

Syntax OK Apache active and running

Step 18: Configure PHP

STEP 18

Apply application limits

Review limits according to list-upload size, report generation and administrative workflows.

root@dialer Copy Command

cat > /etc/php.d/99-vicidial.ini <<'EOF' date.timezone = Asia/Kolkata memory_limit = 512M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300 max_input_vars = 5000 session.gc_maxlifetime = 14400 EOF php --ini php -i | grep -E \ "date.timezone|memory_limit|upload_max_filesize|post_max_size" systemctl restart httpd

Verification

Configured timezone and limits should be displayed.

Step 19: Configure the Firewall

STEP 19

Allow only required traffic

Do not expose SIP and administrative services to the entire internet unless absolutely required. Prefer carrier IP allowlists, VPN access and trusted management networks.

ServiceTypical PortRecommended Scope
HTTPTCP 80Temporary or redirect to HTTPS
HTTPSTCP 443Agents and administrators
SSHTCP 22Trusted IP or VPN only
SIPUDP/TCP 5060 or provider-definedCarrier and approved endpoints only
RTPConfigured UDP rangeCarrier and media endpoints

example-policy Copy Command

firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Example only: replace with the RTP range configured in Asterisk. firewall-cmd --permanent --add-port=10000-20000/udp # Prefer a carrier source allowlist instead of opening SIP globally. firewall-cmd --permanent \ --add-rich-rule='rule family="ipv4" source address="CARRIER_IP/32" port protocol="udp" port="5060" accept' firewall-cmd --reload firewall-cmd --list-all

Security Requirement

Replace CARRIER_IP with the approved provider address. Match the RTP range to the active Asterisk configuration.

Step 20: Handle SELinux Correctly

STEP 20

Review denials instead of permanently disabling protection

Keep SELinux enforcing where possible. Apply only the permissions required by the application and inspect audit logs when access is denied.

root@dialer Copy Command

getenforce restorecon -Rv /var/www/html restorecon -Rv /var/lib/asterisk restorecon -Rv /var/spool/asterisk setsebool -P httpd_can_network_connect_db 1 setsebool -P httpd_can_network_connect 1 ausearch -m AVC -ts recent | tail -50

Expected Result

Review AVC denials and create narrowly scoped policy adjustments only when a legitimate application action is blocked.

Step 21: Install VICIdial Cron Jobs

STEP 21

Use the cron template supplied by the pinned source

Cron jobs manage dialing processes, reports, recordings, maintenance and several background workflows.

root@dialer Copy Command

cd /usr/src/vicidial/astguiclient find . -type f | grep -Ei \ "cron|crontab|ADMIN_keepalive|AST_manager" crontab -l

Deployment Rule

Install the official cron template supplied by your validated VICIdial revision. Review every path before enabling it.

Do not paste an unrelated crontab

Cron entries differ by VICIdial release, server role and deployment architecture. Use the template included with the exact source revision.

Step 22: Configure Asterisk Manager Access

STEP 22

Create a restricted AMI account

VICIdial communicates with Asterisk through the Asterisk Manager Interface. Use a dedicated account and restrict its network scope.

configuration-example Copy Command

cat >> /etc/asterisk/manager.conf <<'EOF' [vicidial] secret = CHANGE_THIS_AMI_PASSWORD deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.255 read = all write = all EOF chown asterisk:asterisk /etc/asterisk/manager.conf chmod 640 /etc/asterisk/manager.conf asterisk -rx "manager reload" asterisk -rx "manager show users"

Expected Result

Dedicated VICIdial AMI account visible. Remote access blocked unless explicitly required.

Step 23: Restart and Verify Core Services

STEP 23

Confirm all primary services

Restart the application stack and review each service before attempting the first browser login.

root@dialer Copy Command

systemctl restart mariadb systemctl restart httpd systemctl restart asterisk systemctl status mariadb --no-pager systemctl status httpd --no-pager systemctl status asterisk --no-pager asterisk -rx "core show version" asterisk -rx "core show channels" asterisk -rx "manager show users" mariadb -e "USE asterisk; SHOW TABLES;" | head

Expected Result

MariaDB active Apache active Asterisk active VICIdial database tables present AMI account present

Step 24: Open the VICIdial Administration Portal

STEP 24

Confirm browser access

Open the administration URL using the configured hostname. Immediately replace any default credentials and restrict administrative access.

browser Copy Command

http://dialer.example.com/vicidial/admin.php

After Login

Change default administrator credentials. Create named administrator accounts. Review system settings and server definitions.

Screenshot placement: Add the VICIdial administrator login page with server details and sensitive information hidden.

Step 25: Add the VICIdial Server

STEP 25

Register the local Asterisk server

In the administrator interface, add or verify the server record. Match the server IP, active status, Asterisk version, recording paths and manager credentials.

FieldRecommended Value
Server IDUnique short identifier
Server IPIP used by VICIdial services
ActiveY after verification
Asterisk VersionInstalled Asterisk 18 release
Manager UserDedicated AMI account
Recording LocationApproved storage path

Step 26: Configure the SIP Carrier

STEP 26

Add carrier signaling and dial rules

Use the exact authentication, codec, destination format and caller ID requirements supplied by the voice provider.

Carrier ItemRequired Information
AuthenticationIP authentication or registration
SIP HostCarrier SBC or proxy
Signaling PortProvider-defined SIP port
CodecProvider-supported audio codec
Destination FormatE.164 or provider-defined format
Caller IDCarrier-approved CLI
RTP RangeMust match firewall configuration

Do not publish carrier credentials

Blur SIP usernames, passwords, customer prefixes, account IDs, telephone numbers and provider IP details in screenshots.

Step 27: Create Phones and Agent Users

STEP 27

Provision agent access

Create phone records, agent users and user groups. Assign the minimum permissions required for each role.

ObjectPurpose
PhoneLinks an extension or softphone to Asterisk
UserProvides agent or administrator authentication
User GroupControls permissions and campaign access
Remote AgentOptional remote telephone workflow

Screenshot placement: Add the Phone, User and User Group screens with all passwords hidden.

Step 28: Create the First Campaign

STEP 28

Start with a controlled manual or ratio campaign

Avoid aggressive predictive settings until carrier performance, agent workflow and reporting have been validated.

Campaign SettingInitial Recommendation
Campaign IDShort unique code
Campaign NameDescriptive business name
ActiveN during configuration, Y after testing
Dial MethodManual, Ratio or controlled Progressive
Local Call TimeApproved customer calling window
Caller IDCarrier-approved CLI
RecordingConfigure according to consent and policy
StatusesUse clear business dispositions

Step 29: Create a List and Upload Test Leads

STEP 29

Use internal test numbers first

Create a small test list containing only approved internal or controlled destination numbers.

CSV FieldExample
phone_numberValidated test number
first_nameTest
last_nameCustomer
country_codeDestination country code
commentsInternal controlled test

Do not start with production data

Validate dialing, audio, caller ID, dispositions, recordings and reporting using a controlled test list before importing customer data.

Step 30: Test Agent Login

STEP 30

Validate the complete agent workflow

Confirm that the phone registers, the agent logs in, the campaign is available and customer data appears correctly.

Agent Login Checklist

  • ✓Softphone or browser phone registers
  • ✓Agent login page opens
  • ✓Phone login succeeds
  • ✓User login succeeds
  • ✓Campaign appears
  • ✓Agent becomes ready
  • ✓Customer data loads
  • ✓Pause codes work
  • ✓Disposition saves correctly

Step 31: Place a Controlled Test Call

STEP 31

Validate signaling, audio and reporting

Place a test call to an approved destination while monitoring the Asterisk CLI and carrier response.

asterisk-cli Copy Command

asterisk -rvvvvv core show channels pjsip show endpoints pjsip show registrations # For chan_sip environments: sip show peers sip show registry

Validate

Correct destination format Expected caller ID Two-way audio Correct disposition Recording generated Call visible in reports

Step 32: Verify Recordings

STEP 32

Confirm storage and playback

Verify that recording files are created, permissions are correct, playback works and retention requirements are documented.

root@dialer Copy Command

find /var/spool/asterisk/monitor -type f | tail -20 du -sh /var/spool/asterisk/monitor df -h

Expected Result

New recording file present File ownership valid Disk capacity sufficient Recording accessible only to authorized users

Step 33: Verify VICIdial Background Processes

STEP 33

Confirm keepalive and scheduled processes

Review the running VICIdial scripts and verify that cron jobs are launching the expected processes.

root@dialer Copy Command

ps aux | grep -Ei \ "AST_|VD|vicidial|astguiclient" | grep -v grep crontab -l journalctl -u crond --since "30 minutes ago" --no-pager

Expected Result

Required VICIdial processes running Cron entries present No repeated path, permission or database errors

Step 34: Configure HTTPS

STEP 34

Protect administrator and agent credentials

Configure a valid TLS certificate and redirect browser traffic from HTTP to HTTPS.

root@dialer Copy Command

dnf install -y certbot python3-certbot-apache certbot --apache -d dialer.example.com certbot renew --dry-run

Expected Result

Valid HTTPS certificate installed HTTP redirected to HTTPS Certificate renewal test successful

Step 35: Configure Backups

STEP 35

Back up the database and critical configuration

Store backups outside the dialer server and regularly test the restoration procedure.

backup-example Copy Command

mkdir -p /backup/vicidial mariadb-dump \ --single-transaction \ --routines \ --triggers \ asterisk \ | gzip > "/backup/vicidial/asterisk-$(date +%F-%H%M).sql.gz" tar -czf \ "/backup/vicidial/config-$(date +%F-%H%M).tar.gz" \ /etc/asterisk \ /etc/astguiclient.conf \ /etc/httpd/conf.d/vicidial.conf \ /etc/my.cnf.d/vicidial.cnf

Verification

ls -lh /backup/vicidial gzip -t /backup/vicidial/asterisk-*.sql.gz

A local backup is not sufficient

Copy encrypted backups to a separate server or approved storage platform. A disk failure or security incident can destroy local backups stored on the same system.

Step 36: Production Security Checklist

Security Hardening

  • ✓Default VICIdial accounts removed or changed
  • ✓Named administrator accounts created
  • ✓Strong database and AMI passwords configured
  • ✓SSH restricted to trusted IP or VPN
  • ✓SIP restricted to approved sources where possible
  • ✓HTTPS enabled
  • ✓SELinux denials reviewed
  • ✓Firewall rules documented
  • ✓Recordings protected by role
  • ✓Off-server backups tested
  • ✓Logs monitored
  • ✓Calling and privacy policies implemented

Step 37: Production Readiness Test

Final Go-Live Checklist

  • ✓AlmaLinux fully updated
  • ✓MariaDB active and backed up
  • ✓Apache and HTTPS working
  • ✓Asterisk active
  • ✓VICIdial processes running
  • ✓SIP carrier connected
  • ✓Approved caller ID displayed
  • ✓Two-way audio tested
  • ✓Agent login tested
  • ✓Campaign and list tested
  • ✓Disposition saved
  • ✓Recording generated
  • ✓Reports show correct result
  • ✓Monitoring and disk alerts configured

Common VICIdial Installation Problems

ProblemLikely CauseRecommended Check
Admin page does not openApache, PHP, firewall or file pathCheck httpd status and error log
Database connection failsWrong credentials or MariaDB permissionTest the account from the command line
Asterisk does not startConfiguration or module errorRun Asterisk in console mode and inspect logs
Carrier does not registerAuthentication, DNS or signaling issueReview SIP registration and carrier requirements
One-way audioNAT or RTP firewall problemVerify external address, local networks and RTP range
Agent cannot log inPhone, user, campaign or permissions issueReview user, phone and campaign assignments
Campaign does not dialInactive list, no leads, time restriction or process issueCheck campaign, list, leads and background processes
Recordings are missingRecording disabled, path issue or no storageCheck campaign setting, permissions and disk capacity
Reports show incorrect timeTimezone mismatchCompare OS, PHP, MariaDB and VICIdial time settings
Web page returns permission deniedSELinux context or Apache permissionsReview AVC and Apache logs

Useful Diagnostic Commands

diagnostics Copy Command

systemctl status mariadb --no-pager systemctl status httpd --no-pager systemctl status asterisk --no-pager systemctl status firewalld --no-pager journalctl -u mariadb -n 100 --no-pager journalctl -u httpd -n 100 --no-pager journalctl -u asterisk -n 100 --no-pager tail -100 /var/log/httpd/error_log tail -100 /var/log/asterisk/full asterisk -rx "core show channels" asterisk -rx "core show uptime" asterisk -rx "manager show users" mariadb -e "SHOW PROCESSLIST;" df -h free -h ss -lntup

Use

Run these commands when checking service state, ports, database activity, Asterisk channels, logs and server resources.

Recommended Screenshots for This Guide

ScreenshotPlacement
AlmaLinux server verificationAfter Step 1
Repository and package installationAfter Step 5
MariaDB service statusAfter Step 8
Asterisk version and uptimeAfter Step 11
VICIdial admin loginAfter Step 24
Server configuration pageAfter Step 25
Carrier configurationAfter Step 26
User and phone setupAfter Step 27
Campaign setupAfter Step 28
Lead uploadAfter Step 29
Agent interfaceAfter Step 30
Live call monitoringAfter Step 31
Recording and reportsAfter Step 32

Frequently Asked Questions

Can VICIdial run on AlmaLinux 9?

Yes, it can be deployed on AlmaLinux 9 when its database, web, Perl and Asterisk dependencies are prepared correctly. Organizations should test and pin the complete software stack before production use.

Which Asterisk version should be used?

Use the exact Asterisk release tested with your selected VICIdial revision. This guide uses Asterisk 18 as the reference platform, but the production version should be pinned and documented.

Should SELinux be disabled?

Permanently disabling SELinux is not the preferred production approach. Keep it enforcing where practical, correct file contexts and review AVC denials when the application requires additional access.

Why is a static public IP required?

A predictable address simplifies carrier authentication, firewall rules, remote access, NAT configuration and SIP media handling.

Why does one-way audio occur?

Common causes include incorrect NAT settings, blocked RTP traffic, mismatched media ranges, carrier restrictions or an incorrect external address.

Can the database be hosted on another server?

Yes. Larger deployments may separate the database, web and telephony roles. The architecture must include secure connectivity, low latency, backups and appropriate database permissions.

Can agents work remotely?

Yes, but remote access should use secure network controls, approved endpoints, strong authentication and voice-quality monitoring.

How much storage is required for recordings?

Storage depends on codec, call volume, average call duration, retention period and whether recordings are compressed or archived. Monitor actual daily growth before finalizing capacity.

Can VICIdial use IP-authenticated SIP trunks?

Yes. The carrier may authenticate using the dialer's public IP instead of SIP registration. Firewall and source-address restrictions should match the provider's requirements.

When should predictive dialing be enabled?

Enable predictive dialing only after the carrier, call progress, agent availability, abandoned-call controls and reporting have been validated. Start with a controlled dialing mode during initial testing.

Final Recommendation

A successful VICIdial deployment requires more than installing packages. The database, Asterisk, carrier routing, firewall, web portal, cron processes, recordings, campaigns, agents and reporting must operate as one controlled system.

Always begin with approved internal test numbers. Confirm two-way audio, caller ID, agent workflow, recording, dispositions and reports before introducing production customer data or increasing the dialing ratio.

24IThub LLC provides Cloud Dialer, VICIdial deployment, Hosted PBX, SIP Trunking, Virtual Numbers, Toll-Free Numbers and enterprise voice-infrastructure solutions for contact centers, sales teams and customer support operations.

24
24IThub Editorial Team

Enterprise communication insights covering cloud dialers, hosted PBX, SIP trunking, CRM and modern voice infrastructure.

Ready to Modernize Your Communication?

Build a scalable calling operation with cloud dialer, hosted PBX and enterprise voice infrastructure.

24IThub LLC

Book Free Consultation

Tell us what you need. Our telecom specialist will contact you with the right solution.

Secure Form Fast Response Global Voice Solutions
Your information is secure and will only be used to contact you.