How to Setup FreePBX using Docker (Build FreePBX Docker Container) (2024)

How to Setup FreePBX using Docker (Build FreePBX Docker Container). In this post, we will introduce FreePBX, it’s features, major advantages. After that we will move onto the FreePBX installation phase with Docker.

First of all what is aPBX or Private Branch Exchange? A telephone hardware system available within a business that allows call switching between users on local phone lines whilst enabling them to share a fixed number of external lines.

So let’s start with our article How to Setup FreePBX using Docker (Build FreePBX Docker Container).

Also Read

FreePBX vs 3CX – What’s the Difference? (Pros and Cons)

What is FreePBX?

Firstly PBX is an acronym for Private Branch Exchange. FreePBX is basically a phone system that you can install on your virtual machine. It plays an important role in managing asterisk. What is asterisk? Simply put a communication server and is open sourced. Instead of using their own phone system and interface and paying an optimum 100 dollars a month, users can use FreePBX to manage their PBX.

Moreover FreePBX works as a medium of communication between the customers and the office. What it does, it greets the customers in a warm manner to make them feel comfortable and then directs the call to the desired branch or section of the office depending on the customers’ query.

Asterisk allows us to convert an ordinary computer to a communication server using . It is a software implementation of a telephone private branch exchange (PBX), allowing connected telephones to call each other and then connect to other telephone services such as the public switched telephone network (PSTN) and Voice over Internet Protocol (VoIP) services.

Users can download FreePBX for free but need to have the skillset and the knowledge to set it up and maintain it. You will require an ISTP (Internet Telephony Service Provider) to make calls through FreePBX.

In simple words, Asterisk is a multiple line system allowing communication inside offices within branches through different extensions. Existence of internal extensions lead to sharing of outgoing lines for communication with users or employees inside or outside the office space.

Also Read

How to Setup FreePBX Server on Azure/AWS/GCP (FreePBX Hosting)

Features of FreePBX

Here are some features of the FreePBX:

  • The system can be back up or restore by the user.
  • Users can save the call recordings.
  • You can create IVR (Interactive Digital Receptionist) menus.
  • View call detail reporting with asterisk stat.
  • Allows users to view the trunk status and extension.
  • The ARI (Asterisk Recording Interface) allows the user to view the recordings of the conversations.
  • Additionally allows users to upload custom on hold music. (MOH)
  • Allows to route the incoming calls on the basis of time of day.
  • Equally FreePBX comes packed with a lot of other features such as: Business Features, Calling Features and Telephony Support.
  • Business features includes features like conference bridge, IVR, video calling, text to speech, announcements, ring groups etc.
  • Calling features include: call recording, call transfers, call waiting, blacklisting of callers, call history, voicemail to email, three way calling support.
  • Whereas the telephony support features are: desktop support, speciality device support, WebRTC, POTS/ISDN, SIP and PJSIP.
  • Importantly FreePBX system can fill in as an extra employee, if the need arises. This is one of the most important benefits of using FreePBX. Developed over time to keep in mind the needs and developments.

Also Read

How to Install FreePBX on Ubuntu 20.04 (Open Source PBX Tutorial)

Advantages of FreePBX

FreePBX has numerous advantages, some of them are listed below:

Vast language support

This advantage of FreePBX allows users to pick their local language on a one to one basis. Further it enables the users to keep their phone system up irrespective of the location of the users across the globe.

Fully equipped WebGUI

Features like WebGUI presents multiple calibrated features like extension development, IVRs, restore and backup, user permissions, time conditions and firewall.

Vast list of unique features

Add on features like high availability and call centre bundles are also provided alongside a 25 year license. That maintains credibility and reliability for business development.

Low Cost

Cost of FreePBX have an edge over expensive and other difficult to use solutions. So reliable FreePBXs can recover the cost in no time.

No limitations on licensing

There is no specific limit as to number of users, IVRs to be built, queues etc.

Flexible

Flexibility of FreePBX works with almost all the commercially available virtual machines and hardware. Additionally it also works with more than 200 endpoints because of its wide usage across the globe. Can be paired with any IP phone or conferencing solution that you already own.

Reliable and secure

Due to its in house testing and checks, the quality of security is top notch. It goes through rigorous testing process before being rolled out to the general public. What is more it also gets regular updates to improve the stability of the system.

Automatic response system

FreePBX has an automatic response solution through which the user can be directed and forwarded to a specific branch by just pressing a number.

Advancement in technology

With time, a huge advancement in the technology by the means of various updates, can be seen. This allows the users to personalise the system better according to their needs.

Now it is time for the main part of the article about How to Setup FreePBX using Docker .

Also Read

FreePBX vs FreeSWITCH – What’s the Difference? (Pros and Cons)

How to Setup FreePBX using Docker

Prerequisites

  • A server running Ubuntu or Debian operating system.
  • A root user or a user with sudo privileges.

Add Docker Repository

By default, the latest version of Docker is not included in the Ubuntu default repo. So you will need to add the Docker CE official repository to the APT.

First, install all the required dependencies using the following command:

apt install apt-transport-https ca-certificates curl software-properties-common -y

After installing all the dependencies, download and add the Docker CE GPG key with the following command:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

Next, add the Docker CE repository with the following command:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Here please verify the Added repository with the following command:

apt-cache policy docker-ce

You will get the following output:

docker-ce: Installed: (none) Candidate: 5:20.10.17~3-0~ubuntu-focal Version table: 5:20.10.17~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 5:20.10.16~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 5:20.10.15~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 5:20.10.14~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 5:20.10.13~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 5:20.10.12~3-0~ubuntu-focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Also Read

Ansible vs Docker – What’s the Difference Between DevOps Tools

Install Docker and Docker Compose

Now, install the Docker package by running the following command:

apt install docker-ce -y

Once the Docker is installed, verify the Docker running status using the following command:

systemctl status docker

You will get the following output:

● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-09-04 16:04:27 UTC; 13s agoTriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 3264 (dockerd) Tasks: 7 Memory: 29.8M CGroup: /system.slice/docker.service └─3264 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockSep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.555173170Z" level=warning msg="Your kernel does not support CPU realtime >Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.555196177Z" level=warning msg="Your kernel does not support cgroup blkio >Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.555270124Z" level=warning msg="Your kernel does not support cgroup blkio >Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.555772301Z" level=info msg="Loading containers: start."Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.719676988Z" level=info msg="Default bridge (docker0) is assigned with an >Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.804973724Z" level=info msg="Loading containers: done."Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.834543443Z" level=info msg="Docker daemon" commit=a89b842 graphdriver(s)=>Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.834895532Z" level=info msg="Daemon has completed initialization"Sep 04 16:04:27 ubuntu2004 systemd[1]: Started Docker Application Container Engine.Sep 04 16:04:27 ubuntu2004 dockerd[3264]: time="2022-09-04T16:04:27.878373838Z" level=info msg="API listen on /run/docker.sock"

Following step is to verify the Docker version information with the following command:

docker --version

You should get the following output:

Docker version 20.10.17, build 100c701

Now please install the Docker Compose package with the following command:

apt install docker-compose -y

Once the installation is complete, verify the Docker Compose version using the following command:

docker-compose --version

You should get the following output:

docker-compose version 1.25.0, build unknown

Also Read

How to Setup Docker Compose on Ubuntu in Azure/AWS/GCP

Create a Docker Compose File for FreePBX

Firstly, create a directory to store the Docker Compose file:

mkdir app

Next, navigate to the created directory and create a Docker Compose file for FreePBX:

cd appnano docker-compose.yaml

Add the following code:

version: '2'services: freepbx-app: container_name: freepbx-app image: tiredofit/freepbx ports: #### If you aren't using a reverse proxy - 80:80 #### If you want SSL Support and not using a reverse proxy #- 443:443 - 5060:5060/udp - 5160:5160/udp - 18000-18100:18000-18100/udp #### Flash Operator Panel - 4445:4445 volumes: - ./certs:/certs - ./data:/data - ./logs:/var/log - ./data/www:/var/www/html ### Only Enable this option below if you set DB_EMBEDDED=TRUE #- ./db:/var/lib/mysql ### You can drop custom files overtop of the image if you have made modifications to modules/css/whatever - Use with care #- ./assets/custom:/assets/custom environment: - VIRTUAL_HOST=hostname.example.com - VIRTUAL_NETWORK=nginx-proxy ### If you want to connect to the SSL Enabled Container #- VIRTUAL_PORT=443 #- VIRTUAL_PROTO=https - VIRTUAL_PORT=80 - ZABBIX_HOSTNAME=freepbx-app - RTP_START=18000 - RTP_FINISH=18100 ## Use for External MySQL Server - DB_EMBEDDED=FALSE ### These are only necessary if DB_EMBEDDED=FALSE - DB_HOST=freepbx-db - DB_PORT=3306 - DB_NAME=asterisk - DB_USER=asterisk - DB_PASS=asteriskpass ### If you are using TLS Support for Apache to listen on 443 in the container drop them in /certs and set these: #- TLS_CERT=cert.pem #- TLS_KEY=key.pem restart: always networks: - proxy-tier ### These final lines are for Fail2ban. If you don't want, comment and also add ENABLE_FAIL2BAN=FALSE to your environment cap_add: - NET_ADMIN privileged: true freepbx-db: container_name: freepbx-db image: tiredofit/mariadb restart: always volumes: - ./db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=asterisk - MYSQL_USER=asterisk - MYSQL_PASSWORD=asteriskpass networks: - proxy-tier freepbx-db-backup: container_name: freepbx-db-backup image: tiredofit/db-backup links: - freepbx-db volumes: - ./dbbackup:/backup environment: - ZABBIX_HOSTNAME=freepbx-db-backup - DB_HOST=freepbx-db - DB_TYPE=mariadb - DB_NAME=asterisk - DB_USER=asterisk - DB_PASS=asteriskpass - DB_DUMP_FREQ=1440 - DB_DUMP_BEGIN=0000 - DB_CLEANUP_TIME=8640 - COMPRESSION=BZ - MD5=TRUE networks: - proxy-tier restart: alwaysnetworks: proxy-tier: external: name: nginx-proxy

Save and close the file then create a Docker network for Nginx proxy:

docker network create nginx-proxy

Also Read

How to Setup Docker Compose on Windows Server in Azure/AWS/GCP

Launch the FreePBX Container

At this point, Docker Compose file is ready to launch the FreePBX container. You can run the following command to launch the FreePBX container:

docker-compose up -d

This command will download all required images and create a container from each image:

Pulling freepbx-db (tiredofit/mariadb:)...latest: Pulling from tiredofit/mariadb59bf1c3509f3: Pull completee887546d6053: Pull complete3dace326c0ec: Pull completeea97c706ca03: Pull completef908583427a3: Pull completeDigest: sha256:9a2b1332bc6b0775765d8ae43e94646d4f5b97d2c5af4d246ab82042241f1517Status: Downloaded newer image for tiredofit/mariadb:latestPulling freepbx-db-backup (tiredofit/db-backup:)...latest: Pulling from tiredofit/db-backup213ec9aee27d: Pull complete0a34d2f2b45d: Pull complete4dd70801aef3: Pull completef471a1502016: Pull completebdd9d308f2cc: Pull completeDigest: sha256:0a49053ee9164087696bf646a453de194debb652bb654e4452c75efa4b1c6661Status: Downloaded newer image for tiredofit/db-backup:latestCreating freepbx-db ... doneCreating freepbx-app ... doneCreating freepbx-db-backup ... done

You can verify the all downloaded images using the following command:

docker images

You should get the following output:

REPOSITORY TAG IMAGE ID CREATED SIZEtiredofit/db-backup latest fbb26eb96e30 2 weeks ago 521MBtiredofit/mariadb latest 158d51d45d6f 6 months ago 420MBtiredofit/freepbx latest e98ede842e6d 17 months ago 2.05GB

Next, verify all running containers using the following command:

docker ps

You should see the following output:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESbb06e45b3ddd tiredofit/db-backup "/init" 37 seconds ago Up 37 seconds 2020/tcp, 10050/tcp freepbx-db-backupe7d8d9dbd2d1 tiredofit/freepbx "/init" 39 seconds ago Up 33 seconds 80/tcp, 443/tcp, 4569/tcp, 0.0.0.0:5060->5060/udp, :::5060->5060/udp, 5061/tcp, 5161/tcp, 8001/tcp, 8003/tcp, 8008-8009/tcp, 8025/tcp, 0.0.0.0:5160->5160/udp, :::5160->5160/udp, 10050/tcp, 0.0.0.0:4445->4445/tcp, :::4445->4445/tcp, 0.0.0.0:18000-18100->18000-18100/udp, :::18000-18100->18000-18100/udp, 18101-20000/udp freepbx-appc60189d931bf tiredofit/mariadb "/init" 39 seconds ago Up 37 seconds 2020/tcp, 3306/tcp, 10050 tcp freepbx-db 

Also Read

How to Install Asterisk on Ubuntu 20.04 (Open Source VoIP Server)

Access FreePBX Dashboard

1. Now, open your web browser and access the FreePBX container using the URL http://your-server-ip/admin/config.php. You should see the admin password setup screen:

2. Define your admin username, password and click on the Setup System button. You should see the following screen:

3. Click on the FreePBX Administration. You should see the FreePBX login screen:

4. Provide your admin username, password and click on the Continue button. You should see the FreePBX language selection page:

5. Click on the Submit button. You should see the FreePBX dashboard on the following screen:

Thank you for reading How to Setup FreePBX using Docker. We shall conclude.

Also Read

VOIP Planning – 10 Best Practices

How to Setup FreePBX using Docker (Build FreePBX Docker Container) Conclusion

In this post, we explained how to build and run FreePBX using the Docker and Docker Compose. You can now host your own telephone system in your organizations. Summarizing FreePBX makes it easier for us by providing with pre programmed features available through a user friendly web interface that allows us to have a fully functional PBX almost instantly with no programming required.

Please check out our FreePBX content here.

How to Setup FreePBX using Docker (Build FreePBX Docker Container) (2024)
Top Articles
Latest Posts
Article information

Author: Dean Jakubowski Ret

Last Updated:

Views: 5539

Rating: 5 / 5 (70 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Dean Jakubowski Ret

Birthday: 1996-05-10

Address: Apt. 425 4346 Santiago Islands, Shariside, AK 38830-1874

Phone: +96313309894162

Job: Legacy Sales Designer

Hobby: Baseball, Wood carving, Candle making, Jigsaw puzzles, Lacemaking, Parkour, Drawing

Introduction: My name is Dean Jakubowski Ret, I am a enthusiastic, friendly, homely, handsome, zealous, brainy, elegant person who loves writing and wants to share my knowledge and understanding with you.