Setting up a WebRTC phone system from scratch has a reputation for being involved — and honestly, it is not entirely undeserved. Asterisk configuration, TLS certificates, WebSocket transport, codec negotiation — there are enough moving parts that it can feel like you are three yak shaves deep before you have made a single test call.
The Browser Phone Docker image exists specifically to solve this. It is a fully configured WebRTC phone system — Asterisk, Browser Phone, three pre-built users, and a working SSL certificate — that runs on your local machine with three commands. It is not a simulator. It is a real system. You will make real SIP calls over real WebRTC, which makes it the fastest way to actually understand how this all fits together.
What is in the box
The Docker image bundles:
- Asterisk PBX — pre-configured with three SIP extensions
- The Browser Phone web application — served over HTTPS
- A self-signed TLS certificate — so browser microphone access works without manual workarounds
- PJSIP configuration — WebRTC-enabled endpoints for all three users
- A working dialplan — the extensions can call each other immediately
Nothing talks to the outside world by default. This is an entirely self-contained environment for testing and development.
What you need
Just Docker. If you do not have it:
- Windows / Mac: Docker Desktop from docker.com
- Linux: sudo apt install docker.io
No Asterisk, no Node.js, no anything else. Docker handles the environment entirely.
Step 1: Clone the repository
git clone https://github.com/InnovateAsterisk/Browser-Phone.git
cd Browser-Phone
Step 2: Build the image
The first build takes a few minutes while Docker pulls in Asterisk and configures everything. Subsequent builds are faster thanks to layer caching.
docker build -t browser-phone .
Step 3: Run the container
docker run -d -p 443:443 --name browser-phone-test browser-phone
The -d flag runs it in the background. Port 443 on your machine maps to port 443 in the container where the HTTPS server is listening.
Step 4: Open it in your browser
Go to https://localhost. Your browser will warn you about the self-signed certificate — this is expected. Click through (Chrome: Advanced > Proceed to localhost) and you will land on the Browser Phone interface.
Step 5: Log in and make a call
Three users are pre-configured:
- User 1: extension 100, password 1234
- User 2: extension 200, password 1234
- User 3: extension 300, password 1234
Open Browser Phone in two browser tabs — or two different devices on the same network. Log in as User1 in one and User2 in the other. Dial 200 from User1. It rings in User2’s tab. Answer it. You now have a live WebRTC call running on your own machine, through a real Asterisk dialplan, with real SIP signalling over WebSocket.
Allow microphone access when prompted — WebRTC cannot do much without it.
What you can explore from here
The three-user setup lets you test most of Browser Phone’s core features:
- Audio and video calls between extensions
- Call recording — both audio-only and video calls
- Blind and attended transfer — proper SIP transfer flows, not just forwarding
- Conference calls — bring a third party into an active call
- Full call history and presence — see who is registered and available
None of this is mocked. The Asterisk instance inside the container is processing real SIP traffic. When something works here, it works the same way against a real production PBX.
Connecting to your own Asterisk server
If you have an existing Asterisk server, you can point Browser Phone at it from the settings panel — enter your server’s WebSocket address, port, extension, and password. You will need WebRTC-enabled PJSIP endpoints on your Asterisk side, and a valid TLS certificate. Let’s Encrypt handles the certificate side cleanly.
Moving toward production
The Docker image is a development and testing environment, and it is honest about that. When you are ready to move toward production:
- Replace the self-signed certificate with one from Let’s Encrypt or your CA
- Configure your Asterisk instance properly for your network — NAT, external IP, SIP trunks
If running your own Asterisk server long-term is not what you signed up for, Siperb is the hosted evolution of Browser Phone — it handles provisioning, mobile push notifications, and transcoding for legacy PBX systems, so you get the same calling experience without the infrastructure overhead.
A few things that can go wrong
Port 443 is already in use
Something else on your machine is using it. Map to a different port:
docker run -d -p 8443:443 --name browser-phone-test browser-phone
Then access it at https://localhost:8443.
Microphone is not working
Check that you are accessing over HTTPS — WebRTC will not request microphone access on an insecure connection. Also check that microphone permissions have not been previously blocked for localhost in your browser settings.
Extensions showing as unregistered
Check the container is running with docker ps, then inspect the logs:
docker logs browser-phone-test
The point of all this
The Docker image is the fastest path to genuinely understanding how a WebRTC phone system works. Not from reading about it — from actually using one. Once you have made a few calls between the test extensions and poked around the interface, the architecture makes a lot more sense. From there, whether you connect it to your own Asterisk setup or move to a hosted solution, you are starting from a position of understanding rather than guesswork.

Leave a Reply