Service graph¶
About this page
This documents a stack generated from soliplex-template. A generated
project ships its own copy of this page without this note.
The stack is defined in docker-compose.yml. Several services cooperate; two
of them share the RAG vector store through a bind mount.
graph LR
browser([Browser]) -->|9000/9443| nginx
nginx -->|/api/ /mcp/| backend
backend -->|reads LanceDB| ragdb[(rag/db)]
ingester[haiku-ingester] -->|writes LanceDB| ragdb
ingester -->|convert/chunk| docling[docling-serve]
ingester -->|job queue| postgres[(postgres)]
backend -->|threads + authz| postgres
nginx¶
Serves the Flutter web frontend (built from a soliplex/frontend release in
nginx/Dockerfile) and reverse-proxies /api/ and /mcp/ to backend:8000.
Terminates TLS on host port 9443 with a self-signed cert.
backend¶
Runs soliplex-cli serve /environment, installed from the pinned soliplex
package (see Backend image & dependencies). The --reload=config
flag means edits under backend/environment/ take effect without a rebuild.
haiku-ingester¶
The writer for the LanceDB at rag/db/. Runs haiku-ingester serve with a
Postgres-backed job queue (its own soliplex_ingester database), an async
worker pool, retries + a dead-letter queue, and an HTTP control plane on host
port 8765. There is a single-writer constraint: only one
ingester per LanceDB. The backend reads the same store through a bind mount.
See RAG pipeline.
docling-serve¶
A stateless document converter (CPU image by default; a GPU variant is a
commented swap in docker-compose.yml).
tui¶
Soliplex's Textual terminal client, served
as a web app over textual-serve; nginx proxies it at /tui/, so open
https://myproject.localhost:9443/tui/. The same client is bundled in
the backend image — to run it from the command line, see
Using the TUI.
postgres¶
Creates the stack's databases on first boot via postgres/config/init.sh:
soliplex_agui(thread persistence)soliplex_authz(authorization policy)-
soliplex_ingester(the haiku-ingester job queue) -
soliplex_gitea(Gitea's backing store)
Each gets a dedicated low-privilege role whose password is a Docker secret.
Init runs only on an empty data volume; to re-run it,
docker compose down -v first.
gitea¶
A local Gitea instance (rootless image), backed by
the soliplex_gitea Postgres database. nginx reverse-proxies it under /gitea/
on the HTTPS port — open https://myproject.localhost:9443/gitea/ — and its
built-in SSH and HTTP are published on host ports 2222 and 3000. State lives
in the gitea_data / gitea_config named volumes. Provision it after first
boot with scripts/init_gitea.py — see
Provision Gitea.