ASTPP VoIP Billing 6 Debian 11 Freeswitch 1.10 Install Guide
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.
Our changes from the original repository are shown at the following link.
https://github.com/iNextrix/ASTPP/compare/V6.0...powerpbx:ASTPP:php81_fix
Tested using the following software:
Call Flow
Outbound
Inbound
Prerequisites
Verify locale is set to C.UTF-8
or en US.UTF-8
.
locale
If it is not then set it now. You may also set your own UTF-8 locale.
# Select C.UTF-8 UTF-8
apt update && apt -y install locales && dpkg-reconfigure locales
Log out/in or close/open shell for changes to take effect.
Install prerequisite packages
apt update && apt -y upgrade && apt -y remove apache2
apt -y install software-properties-common
apt update && apt -y install git nano dbus sudo nginx wget curl sqlite3 haveged ghostscript lsb-release libtiff5-dev libtiff-tools at dirmngr postfix gawk dnsutils openssl ntp unixodbc unixodbc-dev net-tools whois sensible-mda mlocate vim gettext fail2ban ntpdate ntp lua5.1 bc libxml2 libxml2-dev openssl libcurl4-openssl-dev gettext gcc g++ gnupg2 build-essential dpkg-dev libreoffice make
Postfix
If a postfix configuration wizard pops up you can select the default Internet Site
and also the default mail name. These settings can be manually changed later in /etc/postfix/main.cf
.
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 php8.1 php8.1-fpm php8.1-mysql php8.1-cli php8.1-readline php8.1-xml php8.1-curl php8.1-gd php8.1-mbstring php8.1-opcache php8.1-imap php8.1-imagick php-pear
update-alternatives --set php /usr/bin/php8.1
MySQL
Configure
# Confirm MySQL Server & Cluster (mysql-8.0) is currently selected # If selected, select ok at the bottom of that list cd /opt && wget https://repo.mysql.com/mysql-apt-config_0.8.24-1_all.deb dpkg -i mysql-apt-config_0.8.24-1_all.deb
Install MySQL
Select "Use Legacy Authentication" when asked. Database access will not work if you miss this step.
# You can leave root password blank apt update && apt -y install mysql-server mysql-connector-odbc
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
Get your signalwire token according to these instructions:
https://freeswitch.org/confluence/display/FREESWITCH/HOWTO+Create+a+SignalWire+Personal+Access+Token
Once you have your signalwire token install freeswitch packages
TOKEN=YOURSIGNALWIRETOKEN apt-get update && apt-get install -y gnupg2 wget lsb-release wget --http-user=signalwire --http-password=$TOKEN -O /usr/share/keyrings/signalwire-freeswitch-repo.gpg https://freeswitch.signalwire.com/repo/deb/debian-release/signalwire-freeswitch-repo.gpg echo "machine freeswitch.signalwire.com login signalwire password $TOKEN" > /etc/apt/auth.conf echo "deb [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/debian-release/ `lsb_release -sc` main" > /etc/apt/sources.list.d/freeswitch.list echo "deb-src [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/debian-release/ `lsb_release -sc` main" >> /etc/apt/sources.list.d/freeswitch.list apt update && apt install -y freeswitch-meta-all
ASTPP
# Set some MySQL user password. This is used muliple times in this section. USER_PASSWORD=somepassword # If you have set a MySQL root password assign it here. # If you left it blank just hit ENTER when asked. MYSQL_PASSWORD=existingmysqlpassword
cd /opt git clone -b php81_fix https://github.com/powerpbx/ASTPP.git
Geoip2
PHP v8 does not included geoip because it does not support IP6 and is no longer updated, so we need to use geoip2 instead.
cd /opt/ASTPP/web_interface wget https://github.com/maxmind/GeoIP2-php/releases/download/v2.13.0/geoip2.phar wget https://git.io/GeoLite2-Country.mmdb
Configure MySQL
mysql -p${MYSQL_PASSWORD} -e "CREATE DATABASE astpp;" mysql -p${MYSQL_PASSWORD} -e "CREATE USER 'astppuser'@'localhost' IDENTIFIED BY '${USER_PASSWORD}';" mysql -uroot -p${MYSQL_PASSWORD} -e "ALTER USER 'astppuser'@'localhost' \ IDENTIFIED WITH mysql_native_password BY '${USER_PASSWORD}';" mysql -p${MYSQL_PASSWORD} -e "GRANT ALL PRIVILEGES ON astpp.* TO 'astppuser'@'localhost' WITH GRANT OPTION;" mysql -p${MYSQL_PASSWORD} -e "FLUSH PRIVILEGES;"
cd /opt && cp ASTPP/misc/odbc/deb_odbc.ini /etc/odbc.ini sed -i "s#\(^PASSWORD\).*#PASSWORD = ${USER_PASSWORD}#g" /etc/odbc.ini sed -i '28i wait_timeout=600' /etc/mysql/conf.d/mysql.cnf sed -i '28i interactive_timeout = 600' /etc/mysql/conf.d/mysql.cnf sed -i '28i sql_mode=""' /etc/mysql/conf.d/mysql.cnf sed -i '28i log_bin_trust_function_creators = 1' /etc/mysql/conf.d/mysql.cnf sed -i '28i [mysqld]' /etc/mysql/conf.d/mysql.cnf systemctl restart mysql
Install ASTPP DB
cd /opt mysql -p${MYSQL_PASSWORD} astpp < ASTPP/database/astpp-6.0.sql # If you get a datetime error on this step try restart mysql mysql -p${MYSQL_PASSWORD} astpp < ASTPP/database/astpp-6.0.1.sql
Test odbc driver
odbcinst -s -q
Test odbc connection
isql -v astpp astppuser ${USER_PASSWORD} quit
Configure Freeswitch
cd /opt mv /usr/share/freeswitch/scripts /tmp/. ln -s /opt/ASTPP/freeswitch/fs/ /var/www/html ln -s /opt/ASTPP/freeswitch/scripts/ /usr/share/freeswitch cp -rf 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
Configure ASTPP
cd /opt 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
Configure web server
ln -s /opt/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 sed -i "s/php7.3-fpm.sock/php8.1-fpm.sock/" /etc/nginx/sites-available/astpp.conf sed -i "s/php7.3-fpm.sock/php8.1-fpm.sock/" /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
Configure ASTPP Freeswitch files
cd /opt # Copy cp -rf ASTPP/freeswitch/conf/autoload_configs/* /etc/freeswitch/autoload_configs/ # Configure SWITCH_CONF=/etc/freeswitch/autoload_configs/switch.conf.xml sed -i "s#max-sessions\" value=\"1000#max-sessions\" value=\"2000#g" ${SWITCH_CONF} sed -i "s#sessions-per-second\" value=\"30#sessions-per-second\" value=\"50#g" ${SWITCH_CONF} sed -i "s#max-db-handles\" value=\"50#max-db-handles\" value=\"500#g" ${SWITCH_CONF} sed -i "s#db-handle-timeout\" value=\"10#db-handle-timeout\" value=\"30#g" ${SWITCH_CONF}
Configure ASTPP DB access
SERVER_IP=$(ifconfig | sed -En 's/127.0.0.*//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | head -n1 | cut -d " " -f1) 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 = ${USER_PASSWORD}#" /var/lib/astpp/astpp-config.conf sed -i "s#\(^base_url\).*#base_url = https://${SERVER_IP}/#" /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 = \"${USER_PASSWORD}\"#" /var/lib/astpp/astpp.lua
Enable MySQL module on Freeswitch
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 /opt/ASTPP/web_interface/astpp/cron/ && /usr/bin/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 mysql.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 www-data chown -R www-data. /etc/freeswitch /var/lib/freeswitch \ /var/log/freeswitch /usr/share/freeswitch \ /var/log/astpp /var/log/nginx /opt/ASTPP # 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 /opt/ASTPP -type d -exec chmod 755 {} \; find /var/log/astpp -type d -exec chmod 755 {} \; find /var/lib/astpp -type d -exec chmod 755 {} \; # File permissions to 777(u=rwx,g=rwx,o=rwx) find /var/log/astpp -type f -exec chmod 777 {} \; # File permissions to 644 (u=rw,g=r,o=r) find /etc/freeswitch -type f -exec chmod 644 {} \; find /var/lib/freeswitch -type f -exec chmod 644 {} \; find /var/log/freeswitch -type f -exec chmod 644 {} \; find /usr/share/freeswitch -type f -exec chmod 644 {} \; find /opt/ASTPP -type f -exec chmod 644 {} \; find /var/lib/astpp -type f -exec chmod 644 {} \;
Configure php-fpm
sed -i "s/;request_terminate_timeout = 0/request_terminate_timeout = 300/" /etc/php/8.1/fpm/pool.d/www.conf sed -i "s#short_open_tag = Off#short_open_tag = On#g" /etc/php/8.1/fpm/php.ini sed -i "s#;cgi.fix_pathinfo=1#cgi.fix_pathinfo=1#g" /etc/php/8.1/fpm/php.ini sed -i "s/max_execution_time = 30/max_execution_time = 3000/" /etc/php/8.1/fpm/php.ini sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 20M/" /etc/php/8.1/fpm/php.ini sed -i "s/post_max_size = 8M/post_max_size = 20M/" /etc/php/8.1/fpm/php.ini sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/8.1/fpm/php.ini
systemctl restart php8.1-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
Configure log rotation
sed -i -e 's/daily/size 30M/g' /etc/logrotate.d/rsyslog sed -i -e 's/weekly/size 30M/g' /etc/logrotate.d/rsyslog sed -i -e 's/rotate 7/rotate 5/g' /etc/logrotate.d/rsyslog sed -i -e 's/weekly/size 30M/g' /etc/logrotate.d/php8.1-fpm sed -i -e 's/rotate 12/rotate 5/g' /etc/logrotate.d/php8.1-fpm sed -i -e 's/daily/size 30M/g' /etc/logrotate.d/nginx sed -i -e 's/rotate 14/rotate 5/g' /etc/logrotate.d/nginx sed -i -e 's/weekly/size 30M/g' /etc/logrotate.d/fail2ban
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 add the port on the firewall as well. If accessing by DNS name change the IP to the DNS name in /var/lib/astpp/astpp-config.conf
.
User documentation is located at the following link
https://docs.astppbilling.org/display/itplmars/Overview+of+ASTPP
Troubleshooting
The primary ways to troubleshoot are to watch the fs_cli
command line in real time or to scan the log files, some of which duplicate that info. The fs_cli
info is logged in /var/log/freeswitch.log
.
When troubleshooting it is also sometimes helpful to enable debugging. There are at least 4 separate debugging settings in ASTPP.
The first place to start would usually be to set
/opt/ASTPP/web_interface/astpp/application/config/config.php > $config['log_threshold'] = 4
This will cause a date stamped log file to be created at
/opt/ASTPP/web_interface/astpp/application/logs/
which shows all the PHP code being initialized and any errors in that code. This should only be enabled temporarily as the log files are not automatically deleted. There may also be some sensitive information in those files.
The second debugger is in the GUI at
Configuration > Settings > Calls > Debug
This will enable logging to /var/log/astpp.log
and will show the variables being passed to freeswitch from the database.
The 3rd debugger is located in the GUI at
Switch > SIP Profiles > default > sip-trace
If changed to yes
and adding another setting tracelevel = debug
you can trace SIP traffic.
Lastly, you can enable php debugging by going to
/opt/ASTPP/web_interface/astpp/index.php
and set define ( 'ENVIRONMENT', 'development' )
. This allows you to see the PHP errors in a web browser as they happen instead of just in the log files.