Follows the homelab pattern: ironicbadger.docker_compose_generator v2 renders services/<host>/NN-<stack>/compose.yml templates into ~/docker/compose.yaml on the host. - 01-vllm: chat model, fixed --gpu-memory-utilization - 02-embeddings: second vLLM instance (--task embed) rather than a separate toolchain, so SM120 support only has to be solved once - 03-openwebui: Open WebUI + pgvector (not chroma — corpus size) - 99-network: shared bridge; leading comment keeps networks: top-level - pin docker_compose_generator to 2.0.1 — galaxy tags mix v1/v2 formats - group_vars: stack config incl. LDAP placeholders still to be filled The role only writes the compose file; starting the stack stays manual. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.5 KiB
1.5 KiB
Compose stacks for phy-srv-gpu01
Rendered by ironicbadger.docker_compose_generator (pinned to 2.0.1) into
{{ docker_compose_generator_output_path }}/compose.yaml on the host.
The fragments here are Jinja2 templates, not plain compose files — Ansible
variables are substituted at render time.
| Stack | Contains |
|---|---|
01-vllm |
vLLM, serves the chat model on port 8000 (OpenAI API) |
02-embeddings |
second vLLM instance, embedding model on port 8001 |
03-openwebui |
Open WebUI (port 80) + pgvector Postgres |
99-network |
the shared llmnet bridge — must sort last |
Ordering comes from the NN- prefix; 99-network keeps networks: at the
bottom of the generated file. The leading comment in 99-network/compose.yml
is load-bearing: the role indents only the first line of each fragment, and the
comment absorbs that indentation so networks: stays top-level.
Deploy
just compose phy_srv_gpu01 # renders ~/docker/compose.yaml on the host
The role only writes the file. Bringing the stack up is deliberate:
ssh sbxadmin@192.168.66.69 'cd ~/docker && docker compose up -d'
Before the first run
- Secrets must exist in
group_vars/secrets.yml(just vault edit):vault_owui_secret_key,vault_owui_db_password,vault_ldap_bind_password - LDAP parameters in
group_vars/phy_srv_gpu01.ymlneed the real bind DN and base DN from the customer vllm_imagemust point at a build that works on SM120 (Blackwell) — verify before deploying, the official image is not guaranteed to work