PlaySMS Kannel SMS Gateway integration on NGINX+Debian

Everything Linux, A.I, IT News, DataOps, Open Source and more delivered right to you.
"The best Linux newsletter on the web"

This post is about PlaySMS Kannel SMS Gateway integration on NGINX+Debian


PlaySMS is a free and open source SMS management software, a web interface for SMS gateways and bulk SMS services. In this article we will configure PlaySMS on Debian 10 with NGINX web server and MariaDB Database. We will need PHP to run PlaySMS web application and Kannel SMS Gateway. To install Kannel SMS Gateway please check this article.

LAB Environment Host Info:

PlaySMS and Kannel Server Host IP:
Client Host IP:

Installing NGINX:

We will use prebuilt Debian Package from the Official NGINX Repository

Download and add the NGINX packages and the repository signing key to apt program’s key ring:

root@sms-gw:~# wget
root@sms-gw:~# apt-key add nginx_signing.key

To add NGINX source list, create /etc/apt/sources.list.d/nginx.list file with below contents

deb buster nginx
deb-src buster nginx

Update repository list and install NGINX

root@sms-gw:~# apt-get update
root@sms-gw:~# apt-get install –y nginx

Enable and Start NGINX service and verify that NGINX Server is up and running:

root@sms-gw:~# systemctl enable nginx.service
root@sms-gw:~# systemctl start nginx.service
root@sms-gw:~# netstat –lntp
root@sms-gw:~# curl -l

From Client Machine:

NGINX Server is running and showing its default page.

Installing PHP:

Now install PHP, PHP-FPM and other PHP packages required for PlaySMS

root@sms-gw:~# apt-get install –y php php-fpm php-mysql php7.3-mysql php7.3-cli php7.3-common php7.3-xml php7.3-xmlrpc php7.3-mbstring php7.3-gd php7.3-curl

Enable and Start PHP7.3-FPM service and check status

root@sms-gw:~# systemctl enable php7.3-fpm.service
root@sms-gw:~# systemctl start php7.3-fpm.service
root@sms-gw:~# systemctl status php7.3-fpm.service

NGINX Configuration for PlaySMS:

Create /etc/nginx/fastcgi.conf file with below contents using vim

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Change www-data user and group to nginx in /etc/php/7.3/fpm/pool.d/www.conf for below config directives

user = www-data
group = www-data
listen.owner = www-data = www-data

change to

user = nginx
group = nginx
listen.owner = nginx = nginx

root@sms-gw:~# sed -i 's/www-data/nginx/g'  /etc/php/7.3/fpm/pool.d/www.conf

Replace NGINX default config file for PlaySMS to run with FPM/FastCGI

root@sms-gw:~# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
root@sms-gw:~# vim /etc/nginx/conf.d/default.conf

Add below lines to /etc/nginx/conf.d/default.conf for PlaySMS

server {
   listen       80;
   root   /usr/share/nginx/html;
   index  index.php index.html index.htm;
   server_name  _;

    access_log  /var/log/nginx/playsms_access.log;
   error_log   /var/log/nginx/playsms_error.log;

    charset utf-8;

    location / {
       try_files $uri $uri/ =404;

   location ~ .php {
       include fastcgi.conf;
       fastcgi_split_path_info ^(.+.php)(/.+)$;
       fastcgi_pass unix:/run/php/php7.3-fpm.sock;

   location ~ /\.ht {
       deny  all;

You will need to set your local timezone for PHP.

Uncomment and set date.timezone config directive under [Date] section in /etc/php/7.3/cli/php.ini and /etc/php/7.3/fpm/php.ini to get localtime for your time zone. Example: for New York, USA config would be

date.timezone = America/New_York

Restart the php7.3-fpm service after changing timezone info.

root@sms-gw:~# systemctl restart php7.3-fpm.service

Note: For timezone list please visit:

Place a test page at NGINX root directory to check PHP configuration with NGINX

root@sms-gw:~# echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php

Browse from client machine

PHP works properly with NGINX using PHP-FPM socket and showing PHP info.

Install MariaDB:

We will need database service for PlaySMS. Here we are using MariaDB.

Import key for MariaDB in apt key ring

root@sms-gw:~# apt-key adv --fetch-keys ''

Prepare source list for MariaDB: create  /etc/apt/sources.list.d/MariaDB.list file including below lines

# MariaDB 10.3 repository list - created 2021-12-28 18:41 UTC
deb [arch=amd64,arm64,ppc64el] buster main
deb-src buster main

Update repository list and install MariaDB

root@sms-gw:~# apt-get update
root@sms-gw:~# apt-get install –y mariadb-server

If it asks to provide root password for MariaDB, escape it. We will set it later

Enable and Start MariaDB service

root@sms-gw:~# systemctl enable mariadb.service
root@sms-gw:~# systemctl start mariadb.service

Run mysql_secure_installation command to set root password and other security directives as below

Set root password? [Y/n] Y
Set MariaDB root password
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
And finally …
Reload privilege tables now? [Y/n] Y

Create PlaySMS database and user in MariaDB

root@sms-gw:~# mysql -u root –p
MariaDB [(none)]> CREATE DATABASE playsms;
MariaDB [(none)]> CREATE USER 'playsmsuser'@'localhost' IDENTIFIED BY 'playsmsSecuredPassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON playsms.* TO 'playsmsuser'@'localhost';
MariaDB [(none)]> quit

Now MariaDB is ready for PlaySMS.

Installing PlaySMS:

Install dependencies

root@sms-gw:~# apt-get install -y zip

Add playsms user

root@sms-gw:~# adduser playsms --disabled-password --home=/usr/local/playsms/

Create Log directory and set appropriate permission to it

root@sms-gw:~# mkdir /var/log/playsms
root@sms-gw:~# chown nginx:nginx -R /var/log/playsms

Switch to playsms user

root@sms-gw:~# su - playsms

Download and untar the latest PlaySMS Official release form

playsms@sms-gw:~$ cd /tmp/
playsms@sms-gw:/tmp$ wget
playsms@sms-gw:/tmp$ mv 1.4.5.tar.gz playsms-1.4.5.tar.gz
playsms@sms-gw:/tmp$ tar -zxf playsms-1.4.5.tar.gz
playsms@sms-gw:/tmp$ cd playsms-1.4.5/

Note: Do not use PlaySMS version less than 1.4.5, those have security vulnerability which has fixed in version 1.4.5

Create install.conf file with below content


Run file to install PlaySMS

Check Installation data and confirm each step

playsms@sms-gw:/tmp/playsms-1.4.5$ ./

playSMS Install Script for Ubuntu (Debian based)
- This install script WILL NOT upgrade currently installed playSMS
- This install script WILL REMOVE your current playSMS database
- This install script is compatible ONLY with playSMS version 1.4
- Please BACKUP before proceeding

You are NOT running this installation script as root
That means you need to make sure that this Linux user has
permission to create necessary directories


Proceed ?

When you're ready press [y/Y] or press [Control+C] to cancel Y



MySQL username      = playsmsuser
MySQL password      = playsmsSecuredPassword
MySQL database      = playsms
MySQL host          = localhost
MySQL port          = 3306

Web server user     = nginx
Web server group    = nginx

playSMS source path = /tmp/playsms-1.4.5

playSMS web path    = /usr/local/playsms/html
playSMS lib path    = /usr/local/playsms/lib
playSMS bin path    = /usr/local/playsms/bin
playSMS log path    = /var/log/playsms

playSMS conf path   = /usr/local/playsms/etc


Please read and confirm INSTALL DATA above

When you're ready press [y/Y] or press [Control+C] to cancel Y


Are you sure ?

Please read and check again the INSTALL DATA above

When you're ready press [y/Y] or press [Control+C] to cancel Y


Installation is in progress

DO NOT press [Control+C] until this script ends


Getting composer from

Please wait while the install script downloading composer

Composer is ready in this folder

Pleas wait while composer getting and updating required packages

Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Generating autoload files

Composer has been installed and packages has been updated


PLAYSMSD_CONF = /usr/local/playsms/etc/playsmsd.conf
PLAYSMS_PATH = /usr/local/playsms/html
PLAYSMS_LIB = /usr/local/playsms/lib
PLAYSMS_BIN = /usr/local/playsms/bin
PLAYSMS_LOG = /var/log/playsms
PIDS schedule =
PIDS ratesmsd =
PIDS dlrssmsd =
PIDS recvsmsd =
PIDS sendsmsd =

playsmsd has been started
schedule at pid 21444
ratesmsd at pid 21447
dlrssmsd at pid 21450
recvsmsd at pid 21453
sendsmsd at pid 21455

playsmsd is running
schedule at pid 21444
ratesmsd at pid 21447
dlrssmsd at pid 21450
recvsmsd at pid 21453
sendsmsd at pid 21455

playSMS has been installed on your system

Your playSMS daemon script operational guide:

- To start it : playsmsd /usr/local/playsms/etc/playsmsd.conf start
- To stop it  : playsmsd /usr/local/playsms/etc/playsmsd.conf stop
- To check it : playsmsd /usr/local/playsms/etc/playsmsd.conf check



When message "unable to start playsmsd" occurred above, please check:
1. Possibly theres an issue with composer updates, try to run: "./composer update"
2. Manually run playsmsd, "playsmsd /usr/local/playsms/etc/playsmsd.conf start", and then "playsmsd /usr/local/playsms/etc/playsmsd.conf status"

Exit from playsms user shell

Set proper bin and conf file location in /usr/local/playsms/html/plugin/feature/playsmslog/config.php

$plugin_config['playsmslog']['playsmsd']['bin'] = '/usr/local/playsms/bin/playsmsd';
$plugin_config['playsmslog']['playsmsd']['conf'] = '/usr/local/playsms/etc/playsmsd.conf';

Also need to set proper conf file location in /usr/local/playsms/bin/playsmsd

Change [near about line#222]

$PLAYSMSD_CONF = ‘/usr/local/playsms/etc/playsmsd.conf’;

As our web server user/group is nginx, to avoid permission issues we will change the ownership for all contents in PlaySMS web root directory to nginx:nginx

root@sms-gw:~# cd /usr/local/playsms/html/
root@sms-gw:/usr/local/playsms/html# chown nginx:nginx -R ./*

Set new web root directory in /etc/nginx/conf.d/default.conf for PlaySMS

Restart NGINX service

root@sms-gw:~# systemctl restart nginx.service

Browse from client workstation and login with default Username: admin, Password: admin

Under My Account > Preferences Menu Change default Password and other information

Integrating PlaySMS with Kannel SMS Gatway:

Go to Setting > Manage Gateway and SMSC in PlaySMS admin web portal, click on the Plus (+) Sign next to kannel Gateway option

Put Kannel Gateway info as we have configured in sendsms-user group in kannel.conf. Ref: Kannel Installation

Note: These info are for bidirectional HTTP API access between Kannel and PlaySMS. As we are installing both service on same server we used localhost for Bearerbox, Send SMS and PlaySMS URL. Please use your host IP Address/FQDN if you install Kannel and PlaySMS on different servers.

The Kannel SMSC will be added under SMSC Tab in Setting > Manage Gateway and SMSC

Go to Setting > Main Configuration. Set Kannel as Default SMSC and save the configuration.

Sending SMS from PlaySMS:

Go to My Account > Compose message, write a SMS and send

Kannel Access log:

Recipient Phone:

Receiving SMS in PlaySMS from Kannel:

To get incoming SMS we will have to add PlaySMS callback URL get-url under sms-service group in kannel.conf file

group = sms-service
get-url = "http://localhost/index.php?app=call&cat=gateway&plugin=kannel&access=geturl&t=%t&q=%q&a=%a&Q=%Q&smsc=kannel"

You will find incoming SMS in Reports > Sandbox in PlaySMS Portal.

From Settings > Route incoming SMS you can set destination/action for an incoming SMS.

Add playsmsd to startup using systemd:

Create systemd unit /etc/systemd/system/playsms.service with below contents


ExecStart=/usr/local/playsms/bin/playsmsd start
ExecReload=/usr/local/playsms/bin/playsmsd restart
ExecStop=/usr/local/playsms/bin/playsmsd stop


Reload systemd and enable/start playsms.service

root@sms-gw:~# systemctl daemon-reload
root@sms-gw:~# systemctl enable playsms.service
root@sms-gw:~# systemctl start playsms.service
root@sms-gw:~# systemctl status playsms.service


Everything Linux, A.I, IT News, DataOps, Open Source and more delivered right to you.
"The best Linux newsletter on the web"
Unix/Linux Guru and FOSS supporter



Please enter your comment!
Please enter your name here

Latest articles

Join us on Facebook