Skip to main content

Run with Docker Compose

Alternatively, the whole stack can be built and started with Docker Compose (compose.yml):

echo GOOGLE_API_KEY=your_google_api_key_here > .env
docker compose up --build

Open http://localhost:3000. Database data persists in the pgdata volume across restarts.

Set FRONTEND_PORT in .env to publish the frontend on a different host port (the container still listens on 3000 internally); the backend's CORS_ORIGINS follows it automatically.

What comes up​

ContainerWhat it does
dbPostgreSQL 17. Everything A2Flow records lives here
backendThe agent and the API
workerSends the notification email the backend queues
mcp-proxyRuns the MCP servers you register — see why it is separate
frontendThe screens you use

Only the frontend is reachable from outside; the rest talk to each other on Docker's internal network.

The first start takes longer than later ones: the images are built, the database schema is created, and the MCP proxy waits for the backend to hand it the certificate it needs before it will accept anything.