PearlPBX2
← All posts

PearlPBX2 2.7.1: public release, licensing, and a full Docker Compose stack

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: whitenoise was added, since DEBUG=False even in development mode, and there’s no nginx in front of the django container.
  • REDIS_URL in docker-compose.yml was assembled incorrectly from unused REDIS_HOST/REDIS_PORT variables — 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_PORT let the FastAGI server run somewhere other than 127.0.0.1:4573 — needed when Asterisk runs in a separate container.