I've been promising, for a while now, to do a video on installing and setting up a VOIP / PBX system you self host.  Understand there are multiple options out there, and many of them are open source.  The two most common I hear of, and that most options are based on, are Asterisk and Freeswitch.  

FusionPBX is based on Freeswitch, while many are based on Asterisk.  If you have never seen Asterisk or Freeswitch, then you should understand that at the core these two PBX / VOIP systems are CLI (Command Line Interface) tools, and have no GUI (Graphical User Interface) to speak of.

The good news... there are many, many GUI front ends for these two very powerful CLI tools. The one we'll be focused on today is FusionPBX.

You can find the FusionPBX Home Page here, and the Downloads page here.  On the downloads page, you find their quick install scripts for various operating systems and devices.  

We'll be installing on a Debian 10 system in Digital Ocean.  I like to use a VPS from Digital Ocean for a PBX system as it provides access from anywhere int he world, has plenty of power on the simplest $5 / month server to run 100's of calls at once, and keeps me from having to deal with a ton of port forwarding on my home network.  PBX systems utilize numerous ports in order to operate properly.

Installation

First, fire up a droplet (server) over at Digital Ocean and make sure to select the "basic intel chip", then the $5 / month droplet, and select Debian 10 (you can also choose Ubuntu 20.04), but what I'm showing will be on a Debian 10 based server.

Once your server is up and running, you can optionally create a domain or subdomain, and add an A record to point it to your VPS's IP address.  

Now, ssh to your server with the command:

ssh root@<server ip address here> something like

ssh root@tel.opensourceisawesome.com

Once logged in, you'l first want to update your server software to all of the latest packages.

use the command:

sudo apt update && sudo apt upgrade -y

Let that run, and when it's finished, we'll reboot the server quickly with

sudo reboot

Now, we want to get the two scripts from the FusionPBX Downloads page for our chosen OS, and run them.  Since we are using Debian 10, we'll use the scripts for Debian.

First we need to run the following command to download the software and get new packages ready for install:

wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sh;

When that completes. we'll run the command that actually installs all of the software we need:

cd /usr/src/fusionpbx-install.sh/debian && ./install.sh

WARNING!  DO NOT - I repeat DO NOT close the terminal, clear the terminal, or anything else when the install completes.  You have VERY IMPORTANT INFORMATION on that screen at the end of the install.

Logging Into FusionPBX

Now that your install is finished, leave the teminal open and connected, and I highly recommnend highlighting, copying (CTRL+Shift+C in the terminal), and pasting the ending text to a file you can keep safe.

Now open a modern browser, and go to https://<your server ip address> or https://your_server_url.  Accept the risk of the self signed certificate ( you can setup to get a LetsEncrypt certificate later ).  

At the login screen, you'll now need the username and password provided at the end of the install text in your terminal.

The username is admin@<yoru server Ip address>.  This is because the system is multi-tenant capable, so a user can login with their username@tenant_domain.

Copy the password from the terminal and paste it into the password space on the login form, and you'll be logged into your freshly installed FusionPBX dashboard.

Congratulations, you've successfully installed FusionPBX!

Next Steps

There are a few more things to be done to get the system ready to start making calls.  Watch the video and follow along as we walk through it.

You'll want to change your admin user's password, add a domain to the system if you have a domain name setup for your server, update your SIP Profile settings, create a user or two, and then create an extension or two to start making some test calls within the PBX itself.