Files
infra-phytron/ansible/services/phy-srv-gpu01
CubelaPetarandClaude Opus 4.8 b6b242196d Add LLM compose stack for phy-srv-gpu01 (not deployed yet)
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>
2026-09-03 14:53:59 +02:00
..

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.yml need the real bind DN and base DN from the customer
  • vllm_image must point at a build that works on SM120 (Blackwell) — verify before deploying, the official image is not guaranteed to work