Skip to content

Solutions · Multi-model chat

A VPS for LibreChat

LibreChat is the open-source chat interface for many models at once: OpenAI, Anthropic, Google, and local models through an OpenAI-compatible endpoint, with agents, file search and accounts for a whole team. Its docs publish no RAM or CPU figure, and the official Docker Compose file starts six containers, so we size from that. BD-8 at $12.90 a month is the cheapest machine with real room; C2-4-80 at $37.90 is the smaller shape for one user or a small group.

What it needs

Software from the docs, sizes labelled by source

The software and the security posture come from the project's own documentation. Where the project publishes no hardware figure, the sizes say whose they are.

From the LibreChat docs and its compose file

  • Git and Docker, on Linux. The Docker guide on librechat.ai lists nothing else, and states no RAM, CPU or disk requirement.
  • Install: clone the repository, then cp .env.example .env && docker compose up -d. The app answers on port 3080; a second container, the admin panel, answers on port 3000.
  • The official compose file starts six containers: the LibreChat app, its admin panel, MongoDB for conversations and accounts, Meilisearch for conversation search, a pgvector database and the RAG API for file search.
  • Models are keys, not hardware. OpenAI, Anthropic and Google keys go in .env, or each user enters their own in the interface. A local model is a separate Ollama or other OpenAI-compatible endpoint that you add in librechat.yaml, so this machine needs no GPU.

Sizes (ours, from the six containers the compose file starts)

Sizing by workload
WorkloadvCPURAM
One user or a small group, a few chats, no heavy file searchOurs. Six containers idle in memory of their own; this is the least we would run them on.24 GB
A team, file search on, search index growingOurs. MongoDB, Meilisearch and the vector database each want headroom, and embedding uploads is CPU work.48 GB
Many users, large document sets, conversations kept for yearsOurs. The conversation store, the search index and the vectors all grow with use.816 GB

The plans that fit

5 machines, priced live

Cheapest fitting machine first. Prices are today's, per month, read from the catalogue.

  • BD-8$12.90/mo

    4 vCPU · 8 GB · 100 GB disk · 32 TB

    Cheapest with room for the whole stack. Comfortable for a team: the six containers, uploads, and the search index, with memory to spare.

  • BD-12$17.90/mo

    6 vCPU · 12 GB · 200 GB disk · 32 TB

    More disk for uploads and vectors. For a real document library behind file search and years of saved conversations.

  • BD-24$31.90/mo

    8 vCPU · 24 GB · 300 GB disk · 32 TB

    A large team or several heavy users. Plenty of memory for MongoDB, Meilisearch and the vector database to grow into.

  • C2-4-80$37.90/mo

    2 vCPU · 4 GB · 80 GB disk · 3 TB

    The smaller shape, for one user or a few. Runs the stack; do not also run a local model or builds on it. Pick it for the city, not the size.

  • C4-8-160$75.90/mo

    4 vCPU · 8 GB · 160 GB disk · 3 TB

    The comfortable size where the cheapest row's cities do not suit you. The same shape as the cheapest row, for a team that needs a different city.

There is no start-up preset for LibreChat yet: the install is the steps below, typed by you. They are the commands from LibreChat's own docs, plus the secrets its compose file asks for.

The install

Four steps, from LibreChat's docs

Docker, the compose stack, the first account, then your models. Register your own account the minute the stack is up: the first account created becomes the admin.

  1. Docker. curl -fsSL https://get.docker.com | sh Then check that docker compose version answers.
  2. Clone and configure. git clone https://github.com/LibreChat-AI/LibreChat.git cd LibreChat && cp .env.example .env In .env, set MEILI_MASTER_KEY (at least 16 characters) and ADMIN_PANEL_SESSION_SECRET, which the admin panel will not start without. If the containers report permission errors, set UID and GID to the user running compose.
  3. Start it and register first. docker compose up -d docker compose ps should show all six containers up. Open http://your-ip:3080 and press Register: there is no default user. Until HTTPS is in front, keep 3080 and 3000 behind the firewall and reach the app over SSH: ssh -N -L 3080:127.0.0.1:3080 root@your-server
  4. Add models, then a domain. Put OPENAI_API_KEY, ANTHROPIC_API_KEY and GOOGLE_KEY in .env, or leave them as user_provided so each user enters their own key. For a local model, add an Ollama endpoint in librechat.yaml; from inside the container the address is host.docker.internal, not localhost. For HTTPS, point an A record at the server, put a reverse proxy in front, and set DOMAIN_CLIENT and DOMAIN_SERVER in .env to the public address. Once your people have registered, set ALLOW_REGISTRATION to false.

Honestly

What we would actually buy

LibreChat states no floor, and it starts six containers. Buy the 8 GB machine.

For LibreChat and a team

BD-8 · $12.90/mo

4 vCPU, 8 GB and 100 GB at $12.90: the whole official stack with memory left for MongoDB, Meilisearch and the vector database to grow, disk for uploads and CPU for embedding documents without the chat stalling. The models live elsewhere, behind an API key, so this machine never needs a GPU. If you need a city the cheapest row does not have, C4-8-160 at $75.90 is the same shape elsewhere.

Questions

What people ask before they buy one.

What are LibreChat's system requirements?
Its documentation does not publish any. The Docker guide lists Git and Docker as prerequisites and says nothing about RAM, CPU or disk. What we can read is the official compose file, which starts six containers: the LibreChat app, an admin panel, MongoDB, Meilisearch, a pgvector database and the RAG API. The sizes on this page are ours, reasoned from that stack, and the table says so. An 8 GB machine is where a team stops being tight.
Does LibreChat need a GPU?
No. LibreChat is the interface: it calls whichever model you configure, through an API key for OpenAI, Anthropic, Google and others, or through a custom endpoint such as Ollama. If you want to host a model yourself as well, that is a separate machine and a separate question: the Ollama page sizes CPU inference by model, and the GPU line is where interactive speed lives.
Which ports does it use?
The compose file publishes the app on the PORT from .env, 3080 by default, and the admin panel on 3000. MongoDB, Meilisearch, the vector database and the RAG API are not published and stay on the compose network. The app is plain HTTP, so keep 3080 and 3000 firewalled until a reverse proxy gives you HTTPS, and register your own account first: the first one created becomes the admin.
Which API keys do I need?
None to start the stack, and one per provider you want to use. OPENAI_API_KEY, ANTHROPIC_API_KEY and GOOGLE_KEY default to user_provided in .env.example, which means each user enters their own key in the interface; put a real key there to share one across everyone instead. File search is separate: the RAG API uses OpenAI embeddings by default, and RAG_OPENAI_API_KEY overrides OPENAI_API_KEY for it, so file search needs an embeddings key unless you change the provider.
How do I use local models with it?
Add a custom endpoint in librechat.yaml pointing at an OpenAI-compatible server such as Ollama, at its /v1/ address on port 11434. LibreChat's own guide says to use host.docker.internal instead of localhost when LibreChat runs in a container, and that Ollama ignores the API key but the field cannot be empty. Run the model on its own machine if it is more than a small one; this page's machines are sized for the interface.
LibreChat or Open WebUI or Dify?
LibreChat and Open WebUI are both chat interfaces for many models, and LibreChat leans on multi-user accounts, agents and MCP tools across hosted providers. Dify is an LLM app platform: prompts, workflows and RAG apps you build and expose, rather than a chat front end for a team. All of them run on the same machines, and we keep a page for each.
How do I update it?
From the docs: docker compose down, remove the old images, git pull, docker compose pull, then docker compose up. Back up the data-node directory (MongoDB), the Meilisearch data directory and your .env first: those are the conversations, the search index and the keys.