Docker Compose
Create a private environment file from the deployment example and replace both placeholders.
cd deploy/team-server
cp .env.example .env
# Generate independent values
openssl rand -hex 32
openssl rand -base64 36
docker compose up --build -d
docker compose ps
curl http://127.0.0.1:4772/healthzThe expected health response is {"status":"ok","protocol":"pact-team/0.1"}.
Production boundary
TLS reverse proxy
Expose HTTPS and route Team API requests to loopback port 4772.
PostgreSQL
Keep port 5432 inside the Compose network and back up its persistent volume.
Operate the service
docker compose logs -f pact-team
docker compose exec postgres psql -U pact -d pact
docker compose restart pact-team
# Preserves the PostgreSQL volume
docker compose downRemoving the named volume deletes Team data and is intentionally not part of the normal shutdown path. Treat volume removal as a separate destructive operation.
Update safely
# Back up PostgreSQL first
docker compose build --pull pact-team
docker compose up -d
docker compose ps
curl http://127.0.0.1:4772/healthzThe first API start applies the current idempotent migration. Verify health before allowing clients to reconnect.
Stored server data
The service stores projects, members, invitation hashes, sessions, leases, ordered events, operations, handoffs, and evidence references. It rejects known private fields such as prompts, conversations, chain-of-thought, API keys, and tokens—even when nested.