This guide covers the installation of the ASTPP VoIP billing and Freeswitch applications. ASTPP is installed manually from source. Freeswitch is installed from deb packages.
Tested using the following software:
Call Flow
Outbound
Inbound
Prerequisites
Verify locale is set to en US.UTF-8
.
locale
If it is not then set it now. You may also set your own UTF-8 locale if not in the US.
# Select en_US.UTF-8 UTF-8
apt install locales && dpkg-reconfigure locales
Log out/in or close/open shell for changes to take effect.
Install prerequisite packages
apt update && apt upgrade -y && apt -y remove apache2
apt -y install software-properties-common add-apt-repository 'deb http://security.debian.org/debian-security/ stretch/updates main contrib'
apt -y install git nano dbus sudo nginx curl sqlite3 haveged ghostscript lsb-release libtiff5-dev libtiff-tools at dirmngr postfix gawk dnsutils openssl ntp unixodbc unixodbc-bin gettext fail2ban ntpdate ntp lua5.1 bc libxml2 libxml2-dev openssl libcurl4-openssl-dev gettext gcc g++
PHP
# install this section one line at a time. apt -y install apt-transport-https ca-certificates wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update && apt -y install php7.3 php7.3-fpm php7.3-gd php7.3-opcache php7.3-cli php7.3-common php7.3-curl php7.3-sqlite3 php7.3-odbc php7.3-mysql php7.3-xml php7.3-json php7.3-mbstring php-pear
MySQL
# Confirm that MySQL Server & Cluster mysql-8.0 is selected cd /usr/src wget https://repo.mysql.com/mysql-apt-config_0.8.15-1_all.deb dpkg -i mysql-apt-config_0.8.13-1_all.deb
# You can leave root password blank # Select "Use Legacy Authentication" when asked apt update && apt -y install mysql-server
MySQL ODBC
wget https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc_8.0.22-1debian9_amd64.deb dpkg -i mysql-connector-odbc_8.0.22-1debian9_amd64.deb
Disable Selinux
Check status
sestatus
If the command is found and is not disabled, set SELINUX=disabled
in /etc/selinux/config
. Requires reboot for changes to take effect.
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
Disable Firewall
It is sometimes helpful to disable the firewall during installation.
systemctl disable firewalld systemctl disable iptables systemctl stop firewalld systemctl stop iptables
Timezone
## FIND YOUR TIMEZONE tzselect ## SET TIMEZONE EXAMPLE timedatectl set-timezone America/Vancouver ## CHECK TIMEZONE timedatectl status
systemctl restart rsyslog
Install
Freeswitch
wget -O - https://files.freeswitch.org/repo/deb/debian-release/fsstretch-archive-keyring.asc | apt-key add - echo "deb http://files.freeswitch.org/repo/deb/debian-release/ $(lsb_release -sc) main" > \ /etc/apt/sources.list.d/freeswitch.list apt update && apt -y install freeswitch-meta-all
ASTPP
# Set MySQL user ${userpassword} variable. This is used muliple times in this section. userpassword=somepassword # If you have set a MySQL root password assign it here. # If you left it blank just hit ENTER when asked. mysqlpassword=existingmysqlpassword
cd /usr/src git clone -b v4.0.1 https://github.com/iNextrix/ASTPP.git
mysql -p${mysqlpassword} -e "CREATE DATABASE astpp;" mysql -p${mysqlpassword} -e "CREATE USER 'astppuser'@'localhost' IDENTIFIED BY '${userpassword}';" mysql -uroot -p${mysqlpassword} -e "ALTER USER 'astppuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '${userpassword}';" mysql -p${mysqlpassword} -e "GRANT ALL PRIVILEGES ON astpp.* TO 'astppuser'@'localhost' WITH GRANT OPTION;" mysql -p${mysqlpassword} -e "FLUSH PRIVILEGES;"
# This will likely run for several minutes and should not be interrupted. mysql -p${mysqlpassword} astpp < ASTPP/database/astpp-4.0.sql # If you get a datetime error on this step try restart mysql mysql -p${mysqlpassword} astpp < ASTPP/database/astpp-4.0.1.sql
Configure MySQL
cp ASTPP/misc/odbc/deb_odbc.ini /etc/odbc.ini sed -i "s#\(^PASSWORD\).*#PASSWORD = ${userpassword}#g" /etc/odbc.ini sed -i '33i wait_timeout=600' /etc/mysql/mysql.conf.d/mysqld.cnf sed -i '33i interactive_timeout = 600' /etc/mysql/mysql.conf.d/mysqld.cnf sed -i '33i sql_mode=""' /etc/mysql/mysql.conf.d/mysqld.cnf systemctl restart mysql
Test odbc driver
odbcinst -s -q
Test odbc connection
isql -v astpp astppuser ${userpassword} quit
Copy and configure Freeswitch files
cd /usr/src cp -R ASTPP/freeswitch/fs /var/www/html/ cp -R ASTPP/freeswitch/scripts/* /usr/share/freeswitch/scripts/ cp -R ASTPP/freeswitch/sounds/*.wav /usr/share/freeswitch/sounds/en/us/callie/ rm -Rf /etc/freeswitch/dialplan/* touch /etc/freeswitch/dialplan/astpp.xml rm -Rf /etc/freeswitch/directory/* touch /etc/freeswitch/directory/astpp.xml rm -Rf /etc/freeswitch/sip_profiles/* touch /etc/freeswitch/sip_profiles/astpp.xml
Copy and configure ASTPP files
cd /usr/src mkdir -p /usr/local/astpp mkdir -p /var/log/astpp mkdir -p /var/lib/astpp cp ASTPP/config/astpp-config.conf /var/lib/astpp/astpp-config.conf cp ASTPP/config/astpp.lua /var/lib/astpp/astpp.lua # Copy/config web GUI files cp -R ASTPP/web_interface/astpp /var/www/html/ cp ASTPP/web_interface/nginx/deb_astpp.conf /etc/nginx/sites-available/astpp.conf cp ASTPP/web_interface/nginx/deb_fs.conf /etc/nginx/sites-available/fs.conf ln -s /etc/nginx/sites-available/astpp.conf /etc/nginx/sites-enabled/astpp.conf ln -s /etc/nginx/sites-available/fs.conf /etc/nginx/sites-enabled/fs.conf rm /etc/nginx/sites-enabled/default # Just press ENTER to use defaults for all the questions mkdir -p /etc/nginx/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt # Add nginx log files touch /var/log/nginx/astpp_access.log touch /var/log/nginx/astpp_error.log touch /var/log/nginx/fs_access.log touch /var/log/nginx/fs_error.log # Add ASTPP log files touch /var/log/astpp/astpp.log touch /var/log/astpp/astpp_email.log # Copy ASTPP specific freeswitch config files /bin/cp -R ASTPP/freeswitch/conf/autoload_configs/* /etc/freeswitch/autoload_configs/ # Configure ASTPP config files in /var/lib/astpp. serverIP=$(ifconfig | sed -En 's/127.0.0.*//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p') sed -i "s#\(^dbname\).*#dbname = astpp#" /var/lib/astpp/astpp-config.conf sed -i "s#\(^dbuser\).*#dbuser = astppuser#" /var/lib/astpp/astpp-config.conf sed -i "s#\(^dbpass\).*#dbpass = ${userpassword}#" /var/lib/astpp/astpp-config.conf sed -i "s#\(^base_url\).*#base_url = https://${serverIP}/#" /var/lib/astpp/astpp-config.conf sed -i "s#\(^DB_USERNAME\).*#DB_USERNAME = \"astppuser\"#" /var/lib/astpp/astpp.lua sed -i "s#\(^DB_PASSWD\).*#DB_PASSWD = \"${userpassword}\"#" /var/lib/astpp/astpp.lua
Enable mariadb module
nano /etc/freeswitch/autoload_configs/pre_load_modules.conf.xml
<configuration name="pre_load_modules.conf" description="Modules"> <modules> <!-- Databases --> <load module="mod_mariadb"/> </modules> </configuration>
CRON
crontab -u www-data -e
# Call all crons * * * * * cd /var/www/html/astpp/cron/ && php cron.php crons
Systemd
Create unit file.
systemctl stop freeswitch rm -r /run/freeswitch nano /etc/systemd/system/freeswitch.service
[Unit] Description=freeswitch After=syslog.target network.target local-fs.target mariadb.service [Service] Type=forking RuntimeDirectory=freeswitch PIDFile=/run/freeswitch/freeswitch.pid Environment="DAEMON_OPTS=-ncwait -nonat" EnvironmentFile=-/etc/default/freeswitch ExecStart=/usr/bin/freeswitch $DAEMON_OPTS TimeoutSec=45s Restart=always User=www-data Group=www-data LimitCORE=infinity LimitNOFILE=100000 LimitNPROC=60000 LimitSTACK=250000 LimitRTPRIO=infinity LimitRTTIME=infinity IOSchedulingClass=realtime IOSchedulingPriority=2 CPUSchedulingPriority=89 UMask=0007 ; Comment this out if using OpenVZ CPUSchedulingPolicy=rr [Install] WantedBy=multi-user.target
Create environment file.
cat >> /etc/default/freeswitch << EOF # Uncommented variables will override variables in unit file # User="" # Group="" # DAEMON_OPTS="" EOF
Set ownership and permissions
Run this any time there are any changes/moves/adds/upgrades or if experiencing problems.
# Ownership chown -R www-data. /etc/freeswitch /var/lib/freeswitch \ /var/log/freeswitch /usr/share/freeswitch /var/www/html \ /var/log/astpp /var/log/nginx # Directory permissions to 755 (u=rwx,g=rx,o='rx') find /etc/freeswitch -type d -exec chmod 755 {} \; find /var/lib/freeswitch -type d -exec chmod 755 {} \; find /var/log/freeswitch -type d -exec chmod 755 {} \; find /usr/share/freeswitch -type d -exec chmod 755 {} \; find /var/www/html -type d -exec chmod 755 {} \; find /var/log/astpp -type d -exec chmod 755 {} \; # File permissions to 664 (u=rw,g=rw,o=r) find /etc/freeswitch -type f -exec chmod 664 {} \; find /var/lib/freeswitch -type f -exec chmod 664 {} \; find /var/log/freeswitch -type f -exec chmod 664 {} \; find /usr/share/freeswitch -type f -exec chmod 664 {} \; find /var/www/html -type f -exec chmod 664 {} \; find /var/log/astpp -type d -exec chmod 664 {} \;
Configure php-fpm
sed -i "s/;request_terminate_timeout = 0/request_terminate_timeout = 300/" /etc/php/7.3/fpm/pool.d/www.conf sed -i "s#short_open_tag = Off#short_open_tag = On#g" /etc/php/7.3/fpm/php.ini sed -i "s#;cgi.fix_pathinfo=1#cgi.fix_pathinfo=1#g" /etc/php/7.3/fpm/php.ini sed -i "s/max_execution_time = 30/max_execution_time = 3000/" /etc/php/7.3/fpm/php.ini sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 20M/" /etc/php/7.3/fpm/php.ini sed -i "s/post_max_size = 8M/post_max_size = 20M/" /etc/php/7.3/fpm/php.ini sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.3/fpm/php.ini
systemctl restart php7.3-fpm systemctl restart nginx
Configure firewall
apt -y install firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --permanent --zone=public --add-service={http,https} firewall-cmd --permanent --zone=public --add-port={5060,5061}/tcp firewall-cmd --permanent --zone=public --add-port={5060,5061}/udp firewall-cmd --permanent --zone=public --add-port=16384-32768/udp firewall-cmd --reload firewall-cmd --list-all
Enable services
systemctl daemon-reload systemctl enable freeswitch systemctl restart freeswitch
Test Freeswitch console
If fs_cli
command is not working change the following line.
nano +4 /etc/freeswitch/autoload_configs/event_socket.conf.xml
<param name="listen-ip" value="127.0.0.1"/>
systemctl restart freeswitch
Browse to control panel
https://x.x.x.x
username: admin password: admin
The 443 listening port can be changed at /var/lib/astpp/astpp-config.conf
and /etc/nginx/sites-available/astpp.conf
. Remember to change the port on the firewall as well. If accessing by DNS name change the IP to the DNS name.
User documentation is located at the following link
https://docs.astppbilling.org/display/itplmars/Overview+of+ASTPP