A doorin front of the GPU
Open WebUI with the model server bundled behind it.Accounts, groups, per-model permissions, and an audit log of who asked.
$ dxflow workflow create --identity open-ui hub://open-ui --start --link
Who is asking,and what they may call
The model server is bundled. What this step puts in front of it is everything Ollama has none of.
Roles, an approval queue, and permissions carried by the group, not the person.
An OpenAI- and Anthropic-shaped API, on the same permissions as their browser.
Who called which model, kept on the volume beside the chats.
The definition wins,not the settings page
Persistent config is off, so what you pass on the start line is what the deployment is.
$ dxflow workflow start open-ui --override env.app.ADMIN_PASSWORD=something-long --link
$ dxflow workflow start open-ui --override env.app.OLLAMA_BASE_URLS=http://gpu-01:11434 --override resource.app.gpu=
One port in,and nothing else
The model server is behind it, on the loopback, where no request reaches it unasked.
The deployment,or the gate in front of others
One variable decides which it is, and the rest follows from that.
Left empty, OLLAMA_BASE_URLS starts the bundled server on this machine's card. Filled in, it does not start at all — and those runs can give the card back.
Nothing is baked into the image and nothing is pulled at start, because a model is a decision about a particular card. Pull one after signing in and it stays on the volume.
Every parallel slot and every resident model costs VRAM. Four and two suit a 24 GB card holding 7B models; bigger models want both turned down.
Ollama offloads what fits. The interface's own embedding model, for search over uploaded files, is a CPU build and stays there — small enough that it rarely shows.
Issue keys from the accounts that will use them. An administrator's key reaches everything and proves nothing about access control.
It decides whether a user may call a model, never how much. The audit log names who is generating the load; a budget means a metering proxy behind it.
Pulled once,then it stays
Open UI arrives as one image. This is what comes down the first time, and what the disk should have free for it.
What it wants,and what it needs
The definition asks for 8 cores and 16 GB. The image comes up on less than that, and a start given --fit trims the ask to whatever the machine actually has.
Machines that fit it
Open UI asks for 8 cores and 16 GB, with an NVIDIA GPU. Cheapest first.