Skip to content
Azorel PBX — home
04Architecture

Every call takes the guarded route.

A security edge in front, a call engine nobody can reach, and one control plane deciding everything in between.

How a call travels through AZOREL PBX

Public edgePrivate networkPhonesSIP endpointsTrunksCarriersBrowserHTTPSOpenSIPSSIP edgeRTPengineMedia borderProxyTLSFreeSWITCHCall engineNext.jsAdmin interfaceGo backendControl planePostgreSQLSource of truthRedisLive state
Phones, softphones and SIP trunks reach the platform only through the public edge: OpenSIPS for SIP signalling and RTPengine for media. Both relay to FreeSWITCH, the call engine, on a private network. The Go backend controls FreeSWITCH and stores state in PostgreSQL and Redis. Administrators use the Next.js interface through an HTTPS reverse proxy.
  • SIP signalling
  • RTP media
  • Control · ESL / xml_curl / HTTPS
  • State

Design principles of the architecture

01Edge and engine are separate
Only OpenSIPS (signalling) and RTPengine (media) face the network. They filter malformed SIP, rate-limit, hide topology and enforce bans. FreeSWITCH lives on a private network with nothing published.
02Changes apply on the next call
The SIP directory and dialplan are served live by the backend on every REGISTER and INVITE. Structural configuration is generated, validated, swapped atomically and reloaded per component — never a full engine restart.
03One source of truth
PostgreSQL holds every business object. Redis keeps only state that can be rebuilt; if it is lost, the system recovers from the database and fresh engine events.
04A modular monolith
The control plane is a single Go service organised by domain — extensions, trunks, routing, records, provisioning, authentication, audit — with one deliberate seam to the call engine.

Technology stack

  • Go
  • Next.js
  • FreeSWITCH
  • OpenSIPS
  • RTPengine
  • PostgreSQL
  • Redis
  • Docker Compose
  • Debian