Version 2.7.1 is PearlPBX2’s first public release: a license, quickstart documentation, and a
full Docker Compose stack that brings up the entire backend with a single docker compose up.
License and public files
The project ships under the PolyForm Shield License 1.0.0 — the source is available, use is
allowed for any purpose, including your own commercial deployment, except selling a product or
service that competes with PearlPBX2. Alongside the license, LICENSE, NOTICE,
CONTRIBUTING.md, and QUICKSTART.md were added, covering the Ansible and Docker Compose
install paths, plus SPDX headers in the key modules.
A full Docker Compose stack
docker-compose.yml now brings up more than Django and Asterisk — the whole backend: fastagi,
dashboard-listener, and an optional callback-service (via --profile callback), each with
its own Dockerfile. A new asterisk-init service prepares a minimal manager.conf with AMI
enabled and patches modules.conf to load res_crypto.so before Asterisk’s first start — the
official andrius/asterisk:22 image ships with AMI disabled, and without res_crypto even the
image’s own healthcheck fails. docker-entrypoint.sh idempotently runs migrate and
collectstatic on every start of the django container, and docker-compose.override.yml adds
a bind mount of the source tree and uvicorn --reload for local development.
Smaller fixes that still matter
- Static files are finally served under Docker:
whitenoisewas added, sinceDEBUG=Falseeven in development mode, and there’s no nginx in front of thedjangocontainer. REDIS_URLindocker-compose.ymlwas assembled incorrectly from unusedREDIS_HOST/REDIS_PORTvariables — this broke/dashboard/ulines/and potentially the WebSocket dashboard; the variable is now set directly.- Outgoing calls are now matched by webhooks against the routing table too, not just the dialplan context — previously, webhooks listening only for inbound contexts never fired for outgoing calls.
FASTAGI_HOST/FASTAGI_PORTlet the FastAGI server run somewhere other than127.0.0.1:4573— needed when Asterisk runs in a separate container.