On-Prem LLM Deployment Architecture: vLLM, SSO, and Logging

Written by Jakub Rusinowski · Last updated 2026-07-12 · Hardware figures computed by our VRAM engine

A production on-prem LLM deployment is four boxes: a serving engine (vLLM for multi-user throughput, Ollama for simplicity), an OpenAI-compatible gateway that adds SSO and per-user audit logging, an optional RAG layer over internal documents, and monitoring wired into what you already run. Total effort is about an engineer-week on hardware you've sized correctly — the six steps below take you from bare server to a logged, authenticated internal endpoint your existing tools can call.

The architecture in one diagram's worth of words

Every workable business deployment converges on the same shape:

Users and internal apps → gateway (auth + logging + routing) → serving engine (vLLM/Ollama) → GPU. Beside the serving engine sits the optional RAG stack: an embedding model plus a vector database that the gateway consults before prompting. Everything speaks the OpenAI API dialect, which is the quiet superpower of the whole exercise: internal tools, IDE plugins, and off-the-shelf UIs (Open WebUI is the common choice) work unmodified against your endpoint, and if you ever change serving engines — or burst an approved workload to a cloud API — nothing downstream notices.

The design decision that matters most is putting the gateway in from day one. Teams that expose the serving engine directly always retrofit authentication and logging later, under audit pressure, badly. The gateway is where compliance lives: who asked what, when, and what came back. Get it in place before the first real user, and the GDPR story or Security-Rule audit answer writes itself.

vLLM or Ollama? The honest decision rule

OllamavLLM
Sweet spotTier-1 workstation, ≤ ~10 usersTier-2/3 servers, real concurrency
Concurrency modelSequential-ish; fine for light interleavingContinuous batching — designed for parallel users
Model formatGGUF (quantized, easy)safetensors (GPU-native, faster at scale)
Ops burdenNear zero — one binary, model pull built inA service to run properly (container, pinned versions)
QuantizationQ4/Q5/Q8 GGUF out of the boxFP8/AWQ/GPTQ — better throughput on pro cards

Decision rule: Ollama until concurrent users make people wait; vLLM the moment they do. A department workstation serving five people is a perfect Ollama deployment and gains nothing from vLLM's complexity. A 50-seat company on one RTX PRO 6000 wants vLLM's batching — it is the difference between one card serving the company and a queue forming at 9 AM. Because both sit behind the same gateway API, migrating later is a config change, not a project — so start simple without fear of lock-in.

What deliberately isn't in this architecture

1. Size and prepare the server

Confirm the model/GPU pairing with the compatibility checker and the hardware tiers guide — VRAM for weights plus KV-cache headroom for your context lengths. Provision Linux (Ubuntu LTS is the well-trodden path), current NVIDIA drivers, and NVMe space for models (20–120 GB each; keep two generations). Block outbound egress at the firewall now — the deployment should be born with the network posture it will keep.

2. Stand up the serving engine

Tier 1: install Ollama, pull your model, confirm /v1/chat/completions answers locally. Tier 2/3: run vLLM in a container with pinned versions, serving your model in safetensors with an appropriate quantization for your card (FP8 on Hopper/Blackwell-class hardware). Either way the deliverable is identical: an OpenAI-compatible endpoint on localhost, benchmarked with a quick load test at your expected concurrency so you know your real tokens/sec before users define it for you.

3. Put the gateway in front — auth and audit first

Deploy a reverse-proxy gateway (LiteLLM proxy is the common open-source choice; a plain nginx + OIDC layer also works) that: authenticates against your identity provider (SAML/OIDC — the SSO your company already has), issues per-team API keys for service accounts, and writes an audit record per request — user, timestamp, model, request/response references — to your SIEM or log store. Set log retention deliberately (prompts may contain personal data; your retention policy applies to them). This step is what makes the deployment defensible; do not defer it.

4. Add the RAG layer over internal documents

Run an embedding model beside the LLM and a vector database (Qdrant or pgvector — both self-hosted, both boring in the good way). Ingest the document corpus with access-control metadata so retrieval respects existing permissions — the assistant must not become the tool that shows anyone anything. Our local RAG guide covers the stack in detail; the business-grade addition is that permission filter.

5. Connect the front ends

Point the interfaces at the gateway: Open WebUI for chat, IDE plugins for developers (the coding hub covers that stack), and internal apps via the OpenAI-compatible API with service-account keys. Because everything upstream speaks one dialect, each new consumer is a base-URL configuration, not an integration project.

6. Wire monitoring and write the two-page runbook

Export the numbers that predict trouble — GPU memory utilization, queue depth, tokens/sec, per-team request volume — into the monitoring you already run (Prometheus exporters exist for both engines). Then write the runbook: how to restart serving, how to roll a model version forward and back, where logs live, who owns quarterly updates. Two pages, tested once by someone who didn't write it. This is the difference between a deployment and a science project.

Frequently asked questions

Should a business use Ollama or vLLM for on-premise LLM serving?
Ollama for single-workstation deployments serving up to roughly ten light users — near-zero operations, GGUF quantization, one binary. vLLM once real concurrency arrives: its continuous batching is what lets one 80–96 GB card serve a 50-person company without queueing. Both expose the OpenAI API, so starting with Ollama and migrating to vLLM later is a configuration change, not a rebuild.
How long does an on-premise LLM deployment actually take?
About an engineer-week for the production-grade version on correctly sized hardware: a day for server prep and serving engine, one to two for the SSO/logging gateway, one to two for RAG ingestion with permission filters, and the remainder for front ends, monitoring, and the runbook. The most common overrun is hardware sizing discovered late — verify the model/GPU math before the week starts.
How do employees actually use an on-prem LLM?
Through the same interfaces they'd use with cloud AI: a chat UI (Open WebUI is the standard self-hosted choice), IDE plugins for developers, and internal applications calling the OpenAI-compatible endpoint. Sign-in is your existing SSO. Done right, most users never know or care that the model is local — which is precisely the goal.
What logging does a business LLM deployment need?
Per-request audit records at the gateway: authenticated user, timestamp, model, and references to the request and response — exported to your existing SIEM with a deliberate retention period, since prompts can contain personal data. This single log stream is what answers GDPR access requests, HIPAA audit controls, and the internal "who asked it that?" question. Engine-level logs are for debugging; the gateway log is for compliance.
Do I need Kubernetes to run LLMs on-premise?
Not for one server, which is where most business deployments live. A container with pinned versions under systemd or docker-compose is appropriate machinery for a single GPU node — simpler to secure, simpler to hand over. Kubernetes earns its complexity with multiple GPU nodes, replicas, and an existing platform team; adopting it earlier converts an engineer-week deployment into a quarter-long platform project.

Keep going

Rolling this out in your organization?

Jakub Rusinowski, the founder of LLM Configurator, runs corporate workshops and lectures on deploying local LLMs — hardware sizing, model selection, compliance-friendly architectures, and hands-on setup for your team. Direct, vendor-neutral, practitioner-level.

Ask about a workshop →