Skip to main content

Docker Compose

The GTM showcase has one language-parity compose file per generated language.

Clone the repository first if you have not already:

git clone https://github.com/anip-protocol/anip.git
cd anip

The compose stacks run local Postgres, dbt, Metabase, four generated ANIP services, and the GTM Agent UI. Docker is enough for the stack itself, but the agent UI needs an OpenAI-compatible key to answer natural-language questions:

export OPENAI_API_KEY="sk-..."
export ANIP_AGENT_MODEL="gpt-5.4-mini"

ANIP_AGENT_API_KEY can be used instead of OPENAI_API_KEY, and ANIP_AGENT_BASE_URL or OPENAI_BASE_URL can point at another OpenAI-compatible endpoint.

examples/showcase/gtm/docker-compose.language-parity-python.yml
examples/showcase/gtm/docker-compose.language-parity-typescript.yml
examples/showcase/gtm/docker-compose.language-parity-go.yml
examples/showcase/gtm/docker-compose.language-parity-java.yml
examples/showcase/gtm/docker-compose.language-parity-csharp.yml

Source links:

Each stack starts the same logical system:

  • Postgres with Maven CRM data.
  • dbt model build.
  • Metabase with curated GTM verification questions.
  • Four generated ANIP services in the selected language.
  • GTM agent runtime and UI.

Ports

LanguageEntry pageAgent UIMetabasePipelineEnrichmentPrioritizationOutreach
Python43104310/agent30414210421142124213
TypeScript43204320/agent30424220422142224223
Go43304330/agent30434230423142324233
Java43404340/agent30444240424142424243
C#43504350/agent30454250425142524253

Run one stack

Choose one language stack:

LanguageCommand
Pythondocker compose -p anip-gtm-python -f examples/showcase/gtm/docker-compose.language-parity-python.yml up -d --build
TypeScriptdocker compose -p anip-gtm-typescript -f examples/showcase/gtm/docker-compose.language-parity-typescript.yml up -d --build
Godocker compose -p anip-gtm-go -f examples/showcase/gtm/docker-compose.language-parity-go.yml up -d --build
Javadocker compose -p anip-gtm-java -f examples/showcase/gtm/docker-compose.language-parity-java.yml up -d --build
C#docker compose -p anip-gtm-csharp -f examples/showcase/gtm/docker-compose.language-parity-csharp.yml up -d --build

Example for Go:

export OPENAI_API_KEY="sk-..."
export ANIP_AGENT_MODEL=gpt-5.4-mini

docker compose \
-p anip-gtm-go-local \
-f examples/showcase/gtm/docker-compose.language-parity-go.yml \
up -d --build

Open:

http://127.0.0.1:4330/

The entry page links to:

  • /agent for the GTM Agent chat UI.
  • Metabase on http://127.0.0.1:3043.
  • The local runbook and example questions.
  • The public GTM architecture and testing docs.

Stop:

docker compose \
-p anip-gtm-go-local \
-f examples/showcase/gtm/docker-compose.language-parity-go.yml \
down

The local entry page at / links back to the public GTM docs:

Published Docker images default these links to https://anip.dev. Override the docs base when testing unpublished docs:

ANIP_AGENT_DOCS_BASE_URL=http://127.0.0.1:3000 \
docker compose \
-p anip-gtm-go-local \
-f examples/showcase/gtm/docker-compose.language-parity-go.yml \
up -d --build

Smoke scripts

Use the smoke script to check stack basics:

examples/showcase/gtm/scripts/smoke-language-compose.sh go

Use the auth smoke to check demo actor tokens and capability auth:

examples/showcase/gtm/scripts/smoke-language-compose-auth.sh go

Structure

Each compose file follows the same shape:

gtm-postgres
gtm-dbt
gtm-metabase
gtm-metabase-setup
gtm-pipeline-service
gtm-enrichment-service
gtm-prioritization-service
gtm-outreach-service
gtm-agent-llm-ui

The only intended differences are language image, generated-service build context, and port offsets.