Skip to content
Jetrepo
Esc
navigateopen⌘Jpreview
On this page

Architecture

See the supported services, dependencies, network paths, and persistent state.

The production Compose stack runs application roles, stateful dependencies, and two one-shot setup tasks on one bridge network.

Access

Host read access is required to inspect services, networks, and volumes.

docker compose -f docker-compose.prod.yaml ps -a

Service paths

The reverse proxy routes the five application origins to ports 3000, 3333, 4000, 8000, and 9000. The separate static documentation service listens on port 80 and can have its own HTTPS origin. Port 9001 is the optional object-storage console and should not be public by default. Postgres and Redis remain internal. Compose exposes container ports but does not publish host ports or provide TLS.

Application servers call Delivery REST; external agents use Management MCP for changes and Context MCP for retrieval with separate credentials. The documentation service exposes static Markdown and agent indexes, not a model runtime or Management API.

The Admin app’s Core and Delivery URLs are built into its image. Changing either URL requires an Admin rebuild, not only a restart.

Core API and Worker reach object storage through the public S3_PUBLIC_URL. Containers must therefore resolve and reach that HTTPS origin. The Image service reaches object storage on the internal network.

Persistent state

Volume State
pgdata Authoritative CMS and authentication data
minio_data Original files and generated image results
redis_data Redis AOF, including queues, delayed jobs, and delivery cache

Confirm all three named volumes exist before relying on container recreation as non-destructive. The Worker has no HTTP port or persistent volume of its own.

Postgres and object storage form the coordinated content recovery set. Redis is operational state, not only a disposable cache: omitting it from recovery can lose pending or delayed work. Pub/Sub invalidation messages are transient and are not stored in AOF. Queue replay after Redis loss has not been drilled by the project.

Was this page helpful?