Skip to content

Deploy with Docker Compose

This tutorial gets a working Faxart stack running on one host with Docker Compose. By the end you will have the web app, the broker API, the database, and the media layer up, and you will know what each piece does.

This is a learning exercise on a single machine. For a production cutover, read the Configuration reference and the Architecture after you finish here.

You need:

  • Docker with the Compose plugin (docker compose, not docker-compose)
  • A clone of the repository
  • A few minutes; the first build pulls images and compiles the web UI

Faxart reads everything from a .env file. Copy the example and open it:

Terminal window
cp .env.example .env

The defaults are wired for local development against *.l.supported.systems hostnames. You do not need real Active Directory, a GPU, or a SIP carrier to see the app come up. Those features stay inert until you provide their credentials, which is the whole posture of the system: every integration is off by default and lights up when configured.

Terminal window
docker compose up -d --build

Then bring up the web UI in dev mode (hot reload):

Terminal window
COMPOSE_PROFILES=dev docker compose up -d --build faxart-web-dev

Check the logs, which is always worth doing right after a start:

Terminal window
docker compose logs -f --tail=50

Visit the app hostname from your .env (the dev default is app-faxart.l.supported.systems). You should see the fax dashboard: an inbox, a sent view, and the settings surfaces.

A quick tour of the services you just started:

ServiceRole
faxart-apiThe broker. All routing, AD access, email, and filing logic.
faxart-postgresThe database, with a PHI-read audit floor.
faxart-freeswitchPure media: send and receive over SIP. No decisions.
faxart-worker-*Background queues: send, classify, file, print, deliver.
faxart-web-devThe web UI in hot-reload mode.

The layering principle matters: the media layer never makes routing decisions. See Architecture for the full picture.