Launch CentOS 7 AWS Ec2 Instance

  1. Log in to your aws console
  2. Go to ec2 management page and click Launch Instance on Instance page
  3. In Choose AMI step, go to AWS MarketPlace tab and search CentOS 7 on search field. List of centos 7 ami's will be available.
  4. Select CentOS 7 (x86_64) ami which is free tier eligible.
  5. Select your instance type and click configure instance. Keep default values from Configure Instance to Add Tags steps
  6. In configure security group, create a security group which allow minimum ports open
    1. SSH : port 22
    2. HTTP : port 80
    3. Custom UDP Rule : 10000-20000 (if you are giving RTP ports 10000-20000)
    4. Custom UDP Rule : 5060 (ChanSIP port)
    5. Custom TCP Rule : 5060 (ChanSIP Port)
  7. Click Launch Instance. Select your key file and accept terms to launch instance.

Setup CentOS Server

  1. SSH into newly created CentOS server with username centos and your key file.
  2. Update all existing packages
    1. sudo yum update -y
  3. Now start http service(you can access your server via browser by going to your server ip address)
    1. sudo systemctl enable httpd.service
    2. sudo systemctl start httpd.service
  4. If you are using nano editor, please install it because its not inbuilt installed. If you use vi, skip this step
    1. yum install nano

Install Asterisk

Please execute below as root user.
  1. Please disable selinux to avoid strange behavior during installation
    1. Run ‘sestatus’ to check selinux state
      1. if enabled, please run below commands
        1. sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux
        2. sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
        3. Reboot
      2. If disabled, run step 2
  2. Run below commands
    1. yum -y update
    2. yum -y groupinstall core base "Development Tools"
  3. Now install prerequisite packages
    1. yum -y install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server
    2. yum -y install httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel
    3. yum -y install audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie
    4. yum -y install cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear unixODBC mysql-connector-odbc
    5. yum -y install gcc gcc-c++ make openssl-devel libtermcap-devel perl curl curl-devel
    6. yum -y install libtool-ltdl libtool-ltdl-devel unixODBC-devel
    7. yum -y install bison doxygen mlocate tar nmap bzip2 mod_ssl php-mcrypt flex screen libxml2 libtiff gmime gmime-devel net-snmp-utils net-snmp-devel neon openssl gnutls-utils
    8. pear install Console_Getopt
  4. Check if firewall is running or not by executing systemctl status firewalld
    1. If you see this error ‘if it shows Unit Firewalld.service could not be found.’, install firewall by below commands
      1. yum install firewalld
      2. systemctl start firewalld (start firewall service)
    2. Open firewall port 80 and reload it
      1. firewall-cmd --zone=public --add-port=80/tcp --permanent
      2. firewall-cmd --reload
  5. Enable mariadb (freepbx use mariadb to log cdr reports)
    1. systemctl enable mariadb.service
    2. systemctl start mariadb
  6. Secure mysql installation by running mysql_secure_installation
    1. By default there won't be any password
    2. Don't set root password because freepbx will secure automatically
    3. Choose yes to remaining options. This will remove sample users and database, disable remote root logins and reload new rules so that mysql will take our changes immediately
  7. Reboot the server
  8. After rebooting, create a new user named asterisk
    1. adduser asterisk -M -c "Asterisk User"
  9. Execute below commands to install jansson
    1. cd /usr/src/
    2. git clone
    3. cd /usr/src/jansson
    4. autoreconf -i
    5. ./configure
    6. make
    7. make install
  10. Now install pjproject by running below commands
    1. cd /usr/src
    2. wget
    3. tar -xjvf pjproject-2.4.tar.bz2
    4. rm -f pjproject-2.4.tar.bz2
    5. cd pjproject-2.4
    6. CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64
    7. make dep
    8. make
    9. make install
  11. Now install asterisk
    1. cd /usr/src
    2. wget
    3. tar xvfz asterisk-13-current.tar.gz
    4. cd asterisk-13.*
    5. cd ./contrib/scripts
    6. ./install_prereq install
    7. ./install_prereq install-unpackaged
    8. cd /usr/src/asterisk-13.*
    9. ./configure --libdir=/usr/lib64
    10. ./configure --with-pjproject --with-ssl --with-srtp
    11. contrib/scripts/
    12. make menuselect
      1. Now a screen will appear to select packages to install. Along with selected packages, please select below packages
        1. format_mp3(from add-ons tab)
        2. res_config_mysql, app_mysql, cdr_mysql (from Add-ons tab)
        3. res_odbc, func_odbc
        4. chan_pjsip (from Channel Driver tab)
      2. Press F12 to save this menu
    13. make
    14. make install
    15. make config
    16. ldconfig
    17. Start asterisk by systemctl start asterisk
      1. To know asterisk status, run systemctl status asterisk
    18. chkconfig asterisk off
  12. Now change asterisk directories to asterisk user
    1. chown asterisk. /var/run/asterisk
    2. chown -R asterisk. /etc/asterisk
    3. chown -R asterisk. /var/{lib,log,spool}/asterisk
    4. chown -R asterisk. /usr/lib/asterisk OR chown -R asterisk. /usr/lib64/asterisk
    5. chown -R asterisk. /var/www/
  13. To install freepbx, need to change some values to php and httpd
    1. sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
    2. sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
    3. sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf
  14. Now restart apache
    1. systemctl restart httpd.service
  15. Make asterisk database(if required)
    1. ASTERISK_DB_PW='pa2sw0rd'
    2. mysqladmin -u root create asterisk
    3. mysqladmin -u root create asteriskcdrdb
    4. mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
    5. mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
    6. mysql -u root -e "flush privileges;"
  16. Install freepbx
    1. cd /usr/src
    2. wget
    3. tar xfz freepbx-13.0-latest.tgz
    4. rm -f freepbx-13.0-latest.tgz
    5. cd /usr/src/freepbx
    6. ./start_asterisk start
    7. ./install -n
      1. If this fails, reboot server and re-execute step 16.5 to 16.7
  17. Now install freepbx necessary packages
    1. fwconsole chown
    2. fwconsole ma installall
    3. fwconsole ma upgradeall
    4. fwconsole ma refreshsignatures
    5. fwconsole reload
    6. fwconsole restart
  18. Update firewall rules
    1. firewall-cmd --zone=public --add-port=5060/tcp --permanent
    2. firewall-cmd --zone=public --add-port=5060/udp --permanent
    3. firewall-cmd --reload
  19. Make freepbx to run on server startup
    1. Create  a file freepbx.service in /etc/systemd/system and add below code to it and save
    2. [Unit]
      Description=FreePBX VoIP Server
      ExecStart=/usr/sbin/fwconsole start
      ExecStop=/usr/sbin/fwconsole stop
    3. systemctl enable freepbx.service
    4. systemctl status freepbx

Configuring FreePBX

  1. If your server external ip is, then go to in your browser. This will be your freepbx web panel
  2. On first time, you will be asked to set administrator username and password.
  3. On setting admin credentials, login to admin panel with your admin credentials