Trong bài viết này mình chia sẻ với anh em hướng dẫn cài đặt tổng đài FreePBX trên Debian. Phiên bản tổng đài FreePBX 16, Asterisk 18 và Debian 11.

FreePBX là một hệ thống quản lý giao diện đồ họa nguồn mở dành cho máy chủ điện thoại IP PBX. Nó giúp người dùng dễ dàng cấu hình và quản lý các hệ thống điện thoại VoIP dựa trên nền tảng Asterisk. FreePBX cung cấp các tính năng như quản lý cuộc gọi, hộp thư thoại, ghi âm cuộc gọi, và nhiều tính năng khác thường thấy trong các hệ thống tổng đài điện thoại hiện đại

1. Chuẩn bị

Để thực hiện anh em chuẩn bị cho mình một con máy ảo hoặc VPS hệ điều hành Debian 11. Bạn nào mới bắt đầu thì có thể đăng kí một tài khoản trên DigitalOcean. Hiện tại có chương trình khuyến mãi tặng $200 dùng trong 60 ngày cho khách mới lần đầu đăng kí. Mình có video hướng dẫn chi tiết quá trình đăng kí tại đây. Cấu hình tối thiểu máy ảo hoặc VPS như sau:

  • Debian 11 (v11 (Bullseye), x64 minimal install)
  • Ram: 1-2G
  • HDD: 10-20G

2. Các bước cài đặt

Để tiến hành cài đặt. Sau khi SSH truy cập vào server anh em làm theo các bước bên dưới

2.1 Chỉnh ngày giờ và cập nhập hệ thống

Đầu tiền cần chỉnh ngày giờ và cập nhập hệ thống cho đúng với timezone hiện tại.

ln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
apt update && apt -y upgrade && apt install lsb-release

2.2 Cài các gói service cần thiết

Các gói ban đầu khá quan trọng cho việc cài đặt tổng đài nên anh em cần cài đúng và đủ để tránh lỗi trong quá trình cài FreePBX ở bước cuối cùng.

PHP

Đây là gói PHP sử dụng. Phiên bản sử dụng là php7.4.

apt -y install curl 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.4 php7.4-curl php7.4-cli php7.4-mysql php7.4-mbstring php7.4-gd php7.4-xml

Cập nhập hệ thống cài đặt gói ban đầu

Đây là các gói cần thiết và phụ thuộc ban đầu nên cần được cài sau khi cài PHP.

apt -y install locales sngrep build-essential aptitude openssh-server apache2 mariadb-server mariadb-client bison doxygen flex php-pear curl sox libncurses5-dev libssl-dev libmariadb-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool-bin autoconf git subversion uuid uuid-dev libiksemel-dev tftpd postfix mailutils nano ntp libspandsp-dev libcurl4-openssl-dev libical-dev libneon27-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libsrtp*-dev unixodbc unixodbc-dev python-dev xinetd e2fsprogs dbus sudo xmlstarlet lame ffmpeg dirmngr linux-headers* gnupg2

Node.js

FreePBX sử dụng server backend là Nodejs. Nên không thể thiếu Nodejs

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
apt -y install nodejs

ODBC

Gói driver để hỗ trợ kết nối giữa Asterisk và database MySQL.

cd /usr/src
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-2.0.19/\
mariadb-connector-odbc-2.0.19-ga-debian-x86_64.tar.gz
tar -zxvf mariadb-connector-odbc-2.0.19*.tar.gz
cp lib/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/

cat >> /etc/odbcinst.ini << EOF
[MySQL]
Description = ODBC for MariaDB
Driver = libmaodbc.so
FileUsage = 1
EOF

cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description = MariaDB connection to 'asteriskcdrdb' database
driver = MySQL
server = localhost
database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
option = 3
  
EOF

MongoDB (gói cài thêm nếu sử dụng XMPP)

Gói mở rộng nếu anh em sử dụng module XMPP trên tổng đài FreePBX

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" \
| sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
apt update && apt install -y mongodb-org
systemctl enable mongod

Asterisk

Gói không thể thiếu khi cài đặt tổng đài FreePBX.

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar zxvf asterisk-18-current.tar.gz
cd /usr/src/asterisk-18*/
make distclean
cd /usr/src/asterisk-18*/
./contrib/scripts/install_prereq install
./configure --with-jansson-bundled
make menuselect.makeopts
menuselect/menuselect --enable app_macro menuselect.makeopts
adduser asterisk --disabled-password --gecos "Asterisk User"
make && make install && chown -R asterisk. /var/lib/asterisk

FreePBX

Cuối cùng là cài đặt FreePBX. Anh em cần đảm bảo các gói phía trên không lỗi và tiến hành cài FreePBX.

cd /usr/src
git clone -b release/16.0 --single-branch https://github.com/freepbx/framework.git freepbx
touch /etc/asterisk/modules.conf
cd /usr/src/freepbx
./start_asterisk start
./install -n

fwconsole ma downloadinstall framework core voicemail sipsettings infoservices \
featurecodeadmin logfiles callrecording cdr dashboard music soundlang recordings conferences pm2
fwconsole chown
fwconsole reload

cat >> /etc/systemd/system/freepbx.service << EOF
[Unit]
Description=Freepbx
After=mariadb.service
 
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start -q
ExecStop=/usr/sbin/fwconsole stop -q
 
[Install]
WantedBy=multi-user.target

EOF
systemctl enable freepbx

Cấu hình và phân quyền truy cho Apache

Sau hình cài đặt xong FreePBX cần phân quyền để truy cập cho Web server.

cat >> /etc/apache2/conf-available/allowoverride.conf << EOF 
<Directory /var/www/html>
    AllowOverride All
    </Directory>
EOF
a2enconf allowoverride
sed -i 's/\(APACHE_RUN_USER=\)\(.*\)/\1asterisk/g' /etc/apache2/envvars
sed -i 's/\(APACHE_RUN_GROUP=\)\(.*\)/\1asterisk/g' /etc/apache2/envvars
chown asterisk. /run/lock/apache2
mv /var/www/html/index.html /var/www/html/index.html.disable
a2enmod rewrite
systemctl restart apache2
systemctl enable apache2

Cài đặt logs

Để tránh bị full disk thì chúng ta nên tạo và xoá logs định kì cho hệ thống.

cat >> /etc/logrotate.d/asterisk << EOF
/var/spool/mail/asterisk
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/fail2ban
/var/log/asterisk/freepbx.log
/var/log/asterisk/freepbx_security.log 
/var/log/asterisk/freepbx_debug {
        size 50M
        missingok
        rotate 4
        #compress
        notifempty
        sharedscripts
        create 0640 asterisk asterisk
        postrotate
        /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null || true
        endscript
        su root root
}
EOF

Cài đặt bổ sung khác

Một sấu cầu hình bổ sung khác cho server như giới hạn memory và file upload.

sed -i 's/memory_limit = .*/memory_limit = 256M/g' /etc/php/7.4/apache2/php.ini
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 20M/g' /etc/php/7.4/apache2/php.ini
systemctl restart apache2
systemctl disable apparmor
systemctl stop apparmor

Sau khi cài đặt xong. Anh em cần khởi động lại server.

Sau đó mở trình duyệt và truy cập http://yourserverIP

Tiến hành thiết lập một tài khoản đăng nhập và khám phá tổng đài thôi!

3. Tổng kết

Trên đây là toàn bộ quá trình cài đặt tổng đài FreePBX trên Debian. Phiên bản tổng đài FreePBX 16, Asterisk 18 và Debian 11.

Chúc các bạn thành công!