Skip to content

About

Build pipeline: publishes GonoPBX (ankaios76/gonopbx) Docker images to ghcr.io/companionintelligence for the CI-Marketplace catalog

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

GonoPBX icon

CI-GonoPBX

Build pipeline for publishing GonoPBX container images to the Companion Intelligence catalog.

release platform License Discord

Source · Systems map · Documentation

Build container images

Why this repo exists

GonoPBX has no official pre-built images upstream — it's designed to be deployed by docker compose build-ing its asterisk/, backend/, and frontend/ directories from source. Every app in the CI-Marketplace catalog references a pre-built, tagged image, so this repo exists solely to check out a pinned upstream ref and build+push those three images. It does not vendor or modify GonoPBX's source — the workflow checks out ankaios76/gonopbx directly at build time.

What gets published

Image Upstream source dir Notes
ghcr.io/companionintelligence/gonopbx-frontend frontend/ React UI + nginx; nginx proxies /api and /ws to a service literally named backend, so the CI-Marketplace compose must keep that service name
ghcr.io/companionintelligence/gonopbx-backend backend/ FastAPI backend
ghcr.io/companionintelligence/gonopbx-asterisk asterisk/ Asterisk 20 (andrius/asterisk:20 base) with GonoPBX's sound/config overlay

Images are tagged to match the upstream git tag being built (e.g. v2.1.1), matching the version pinned in CI-Marketplace/apps/gonopbx/config.json.

⚠️ Licensing — needs a look before publishing

Upstream's README states the project is "open source and available under the MIT License," but no LICENSE file actually exists in the upstream repo (confirmed via GitHub's repo API and a direct 404 on /LICENSE). The stated intent is clearly MIT, but there's no committed license text to point to. Before treating these published images as freely redistributable, either:

  • Open an issue/PR upstream (ankaios76/gonopbx) asking them to commit the missing LICENSE file, or
  • Get explicit confirmation from the maintainer some other way,

and link the resolution here.

Features

Feature What it provides
Upstream build Check out a selected GonoPBX ref and build its application images.
Multi-architecture publish Publish frontend, FastAPI and Asterisk container images.
Network boundary Proxy web/API/WebSocket through Nginx while SIP/RTP reaches Asterisk directly.

Screenshots

Pulled from upstream's own website/screenshots (linked directly from issue #700); mirrored here and in the CI-Marketplace store listing gallery.

Dashboard Extensions
Dashboard Extensions
SIP trunks Call history
SIP trunks Call history

How it fits together

A workflow builds upstream frontend, API and Asterisk images and publishes them; Nginx handles web/API/WebSocket traffic, while SIP and RTP reach Asterisk directly.

flowchart LR
  Ref[Selected upstream ref] --> Workflow[Build and publish workflow]
  Workflow --> Registry[Multi-arch image registry]
  Browser[Web traffic] --> Nginx[Nginx proxy]
  Nginx --> Frontend[Frontend and API]
  Phone[SIP and RTP clients] --> Asterisk[Asterisk media]
Loading

Architecture

Four containers per install, isolated on their own compose network. Only the frontend goes through Hub's Traefik proxy — Asterisk needs direct UDP/TCP access for SIP and RTP, which can't go through an HTTP reverse proxy.

flowchart TB
    subgraph ext["External"]
        PHONE["SIP Phones / Softphones"]
        TRUNK["SIP Trunk Provider"]
        ADMIN["Admin Browser"]
    end

    subgraph hub["CI Hub"]
        TRAEFIK["Traefik reverse proxy"]
    end

    subgraph app["gonopbx app (isolated compose network)"]
        FE["gonopbx (frontend)<br/>nginx + React :80"]
        BE["backend<br/>FastAPI :8000"]
        AST["asterisk<br/>Asterisk 20<br/>:5060 SIP / :10000-10100 RTP"]
        PG[("postgres<br/>asterisk_gui")]
        VOL[("shared volume<br/>/etc/asterisk/custom")]
    end

    ADMIN -->|HTTPS| TRAEFIK --> FE
    FE -->|"/api, /ws"| BE
    BE -->|"AMI :5038"| AST
    BE -->|SQL| PG
    BE -. writes pjsip config .-> VOL
    VOL -. read on boot .-> AST
    PHONE -->|"SIP :5060"| AST
    TRUNK -->|"SIP :5060"| AST
    PHONE <-->|"RTP :10000-10100"| AST
    TRUNK <-->|"RTP :10000-10100"| AST
Loading

Call signaling and CDR logging for a typical inbound call:

sequenceDiagram
    participant Trunk as SIP Trunk
    participant Ast as asterisk
    participant Ext as Extension (SIP phone)
    participant BE as backend
    participant DB as postgres

    Trunk->>Ast: INVITE (inbound call, DID)
    Ast->>Ast: match DID -> ring group / IVR
    Ast->>Ext: INVITE (ring)
    Ext-->>Ast: 200 OK (answered)
    Ast-->>Trunk: 200 OK
    Note over Trunk,Ext: RTP media flows directly through Asterisk
    Ast->>BE: AMI event (call state)
    BE->>DB: write call detail record
    Ast->>Ext: BYE (call ends)
    Ast->>BE: AMI event (hangup)
    BE->>DB: update CDR
Loading

Triggering a build

.github/workflows/build-images.yml is manually triggered (workflow_dispatch) with a gonopbx_ref input (the upstream git tag/ref to build, e.g. v2.1.1). It builds all three images and pushes them tagged with that ref.

Known gap: the asterisk image's base (andrius/asterisk:20) isn't confirmed to support arm64. The workflow attempts multi-arch (amd64,arm64) for all three images — if the asterisk build fails on arm64, drop it from that job's platform list and update supported_architectures in the CI-Marketplace manifest accordingly.

After a successful build

  1. Confirm all three images pulled successfully on both architectures you intend to support.
  2. Flip available: true in CI-Marketplace/apps/gonopbx/config.json.
  3. Run scripts/verify-app.sh --slug gonopbx against a real Hub instance from the CI-Marketplace repo.

Icon

The store icon (docs/assets/icon.png, source docs/assets/icon.svg) is an original vector redraw of GonoPBX's own mark — the broken ring of connected nodes represents extensions/endpoints meshed through the PBX hub, and the center star nods to Asterisk (the engine underneath, and literally "a little star"). The original upstream logo is a wide wordmark lockup (docs/assets/wordmark.png) that doesn't crop cleanly to the square tile CI-Marketplace store listings need, so this repo maintains a proper square icon derived from the same visual language instead.

Build outputs and network requirements

Image Role
Frontend Nginx UI and HTTP proxy for /api and /ws
Backend FastAPI application and API/websocket handling
Asterisk SIP/PBX services; SIP and RTP traffic reaches this container directly
Build setting Current workflow behavior
Trigger Manual workflow_dispatch
Source ref gonopbx_ref input, default v2.1.1
Published architecture linux/amd64 and linux/arm64 requested by the build workflow

Allow the required SIP and RTP ports through the host/network firewall; HTTP proxying through the frontend does not carry media traffic. The licensing warning above remains a release gate: verify upstream licensing before redistributing the images.

About

Build pipeline: publishes GonoPBX (ankaios76/gonopbx) Docker images to ghcr.io/companionintelligence for the CI-Marketplace catalog

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors