# Asterisk and FreePBX on Debian12

# Preparations

## Database
Create new user in Cloud SQL
```
https://console.cloud.google.com/sql/instances/xxx/users?project=yyy
```
Warning: ```-``` dashes (hyphens) __can not__ be used in the MariaDB databases' naming. To match user to database, only underlines are used.

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/vlsJQBF7pTLWaY47-image-1759891637304.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/vlsJQBF7pTLWaY47-image-1759891637304.png)


Verify connection from the host to database server
```bash
mysql -h 172.21.32.6 -u pbx_2dz_fi_asterisk -p
```

Create database and grante permissions for Asterisk
```sql
CREATE DATABASE pbx_2dz_fi_asterisk      CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE pbx_2dz_fi_asteriskcdrdb CHARACTER SET utf8 COLLATE utf8_general_ci;


GRANT ALL PRIVILEGES ON pbx_2dz_fi_asterisk.*      TO 'pbx_2dz_fi_asterisk'@'10.166.0.2';
GRANT ALL PRIVILEGES ON pbx_2dz_fi_asteriskcdrdb.* TO 'pbx_2dz_fi_asterisk'@'10.166.0.2';

FLUSH PRIVILEGES;
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/w4fvsn9UNyV69QlJ-image-1759891985374.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/w4fvsn9UNyV69QlJ-image-1759891985374.png)



## PHP installation

Elevate
```bash
sudo su
```

Install PHP and depending libraries
```bash
apt install \
    php \
    php-cli \
    php-mysql \
    php-gd \
    php-curl \
    php-mbstring \
    php-xml \
    php-bcmath \
    php-zip \
    php-json \
    php-pear
```


## node.js installation
```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
apt install nodejs
```


## Asterisk installation

Choosing Asterisk version considerations

Pickup LTS version from Versions page. On the moment of writing (2025-10-08), it is v22.
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/hWdAHXVeo1TkoGph-image-1759892909508.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/hWdAHXVeo1TkoGph-image-1759892909508.png)

```url
https://docs.asterisk.org/About-the-Project/Asterisk-Versions/
```

Observer releases From official Github page
```
https://github.com/asterisk/asterisk/releases
https://github.com/asterisk/asterisk/releases/tag/22.5.2
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/Xv4Zj0FxaqYhfbHN-image-1759893110678.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/Xv4Zj0FxaqYhfbHN-image-1759893110678.png)

Download Asterisk
```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}

export v="22.5.2"
curl -O -L https://github.com/asterisk/asterisk/releases/download/${v}/asterisk-${v}.tar.gz
curl -O -L https://github.com/asterisk/asterisk/releases/download/${v}/asterisk-${v}.sha256

sha256sum asterisk-${v}.tar.gz
cat asterisk-${v}.sha256
```

Unpack after checksum verification (comparison)
```bash
tar -xzvf asterisk-${v}.tar.gz
```

Change dir and install prerequisites
```bash
cd asterisk-${v}
contrib/scripts/install_prereq install
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/AZIGi83eA4HhOtLz-image-1759894408072.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/AZIGi83eA4HhOtLz-image-1759894408072.png)

Configure
```bash
./configure
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/WZrLzlZLPQBQrBWS-image-1759894526700.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/WZrLzlZLPQBQrBWS-image-1759894526700.png)

Define additional features
```bash
make menuselect
```

Enable mp3 support:
```
+ format_mp3
+ app_macro
```

Download additional libraries
```bash
contrib/scripts/get_mp3_source.sh
```

Build and install
```bash
make -j$(nproc)
make install
make samples
make basic-pbx
make config
ldconfig
```

Create run directory
```bash
mkdir -p /var/run/asterisk
```

Set permissions
```bash
useradd -m asterisk
chown -R asterisk:asterisk \
    /var/lib/asterisk \
    /var/spool/asterisk \
    /var/log/asterisk \
    /var/run/asterisk \
    /usr/lib/asterisk
```


Copy default config
```bash
cp /home/anton/delme/asterisk-22.5.2/configs/samples/asterisk.conf.sample /etc/asterisk/asterisk.conf
```

Modify config
```bash
vi /etc/asterisk/asterisk.conf
```
```ini
runuser = asterisk              ; The user to run as.
rungroup = asterisk             ; The group to run as.
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/0s5AUUlaWjsIait8-image-1759900900934.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/0s5AUUlaWjsIait8-image-1759900900934.png)


Create service override
```bash
mkdir -p /etc/systemd/system/asterisk.service.d/
vi /etc/systemd/system/asterisk.service.d/override.conf
```
```ini
[Service]
User=asterisk
Group=asterisk
```

Enable and start the services
```bash
systemctl daemon-reexec
systemctl enable asterisk
systemctl restart asterisk
systemctl status asterisk
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/ON2n7olMmBIQfOy8-image-1772890565365.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/ON2n7olMmBIQfOy8-image-1772890565365.png)

Verify
```bash
ps aux  | grep asterisk
ss -ntap | grep asterisk
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/79pd8Dr7hTrtjB8S-image-1772890723006.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/79pd8Dr7hTrtjB8S-image-1772890723006.png)

Define cert in config
```bash
TODO: update cert in Asterisk
```




## FreePBX installation

Install preresequitives 
```bash
apt install \
    composer \
    unzip
```

Check compatible version
```bash
https://github.com/FreePBX/framework/tags
```


Download FreePBX
```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}

git clone -b release/17.0 https://github.com/FreePBX/framework.git freepbx
cd freepbx
```



## Initial FreePBX config

before
```bash
fwconsole ma list
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/Mc6PdWCQm6hZLu4I-image-1772892950296.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/Mc6PdWCQm6hZLu4I-image-1772892950296.png)

List available online
```bash
fwconsole ma listonline
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/SQp9uwnnTqbLVV4Y-image-1772893057009.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/SQp9uwnnTqbLVV4Y-image-1772893057009.png)

Install core module
```bash
fwconsole ma downloadinstall core
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/wB2qaSXcNW3SXOQC-image-1772894754507.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/wB2qaSXcNW3SXOQC-image-1772894754507.png)


Update framework
```bash
fwconsole ma downloadinstall framework
```
after

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/PW8yNwTv8IkaFOhy-image-1772898691149.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/PW8yNwTv8IkaFOhy-image-1772898691149.png)




Install FreePBX
```bash
rm -rf /etc/freepbx.conf
rm -rf /etc/amportal.conf

./start_asterisk start
./install 
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/mscRyzZt71G968NR-image-1772897624433.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/mscRyzZt71G968NR-image-1772897624433.png)






Check that application installed
```bash
ls -la /var/www/html/admin
fgrep -irn freepbx.conf /var/www/html/admin/config.php
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/NUIUjqq8iShyeosN-image-1772891090518.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/NUIUjqq8iShyeosN-image-1772891090518.png)

Enable host on Nginx webserver 
```bash
cd /etc/nginx/sites-available
cp default pbx.2dz.fi.conf
ln -s /etc/nginx/sites-available/pbx.2dz.fi.conf /etc/nginx/sites-enabled/
```

Modify virtual host file to point to
```nginx
TODO: move to  /var/www/pbx.2dz.fi
    root /var/www/html/;
```


Test config and reload webserver
```bash
nginx -t
nginx -s reload
```

Request cert from LE (this will create additional SSL block in virtual server config)
```bash
certbot --nginx -d pbx.2dz.fi
```




Permissions fix
```bash
#? mkdir -p /var/www/pbx.2dz.fi
#? chown -R asterisk:asterisk /var/www/pbx.2dz.fi
#? chown -R www-data:www-data /var/www/pbx.2dz.fi

chown -R www-data:www-data /var/lib/php/sessions/
chown -R www-data:www-data /var/www/html/admin/
chown    www-data:www-data /etc/freepbx.conf

usermod -aG asterisk www-data
usermod -aG www-data asterisk
```

Change FreePBX log's group to www-data, for webserver user to write into
```bash
chown asterisk:www-data /var/log/asterisk/freepbx.log
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/FBk3zpimted2nUNq-image-1772895104382.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/FBk3zpimted2nUNq-image-1772895104382.png)


Define database credentials created in the beginning
```bash
vi /etc/freepbx.conf
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/i1UI7WqPfp3L3mKt-image-1772896352759.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/i1UI7WqPfp3L3mKt-image-1772896352759.png)



Initial page
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/pKe9M4PzYVfr5NQF-image-1772899335240.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/pKe9M4PzYVfr5NQF-image-1772899335240.png)


Welcome page
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/4vni4IT0ZKkSKHK0-image-1772899509459.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/4vni4IT0ZKkSKHK0-image-1772899509459.png)


No nodules found
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/jFiuz6et7xedJExN-image-1772899602250.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/jFiuz6et7xedJExN-image-1772899602250.png)



## SIP configuration

Install modules
```bash
fwconsole ma downloadinstall sipsettings
```




---




Upgrade:
```bash
fwconsole ma listonline
fwconsole ma upgrade framework
fwconsole ma refreshsignatures
fwconsole chown
#? fwconsole backup --list
fwconsole reload
```