[{"data":1,"prerenderedAt":183},["ShallowReactive",2],{"seo-verification":3,"blog-how-to-host-anythingllm-on-a-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":7,"views":14,"isPinned":15,"publishedAt":16,"category":17,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":132,"ctaBody":133,"ctaButton":134,"ctaUrl":135,"relatedPosts":136},9,"how-to-host-anythingllm-on-a-vps",{"fr":10,"en":8,"ar":11},"heberger-anythingllm-vps","كيفية-استضافة-anythingllm-على-خادم-vps","AnythingLLM on VPS: Full Guide with Pitfalls to Avoid","Host AnythingLLM on VPS: Docker, HTTPS, mandatory version pinning. :latest, Gemini v1.16 and Ollama Docker network pitfalls documented.",0,false,"2026-06-11T00:00:00+00:00",{"id":18,"name":19,"slug":20,"color":21,"icon":22},1,"Artificial Intelligence","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[24],{"id":18,"name":19,"slug":20,"color":21,"icon":22},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-anythingllm-vps-poster.svg",{"categorySlug":29,"appSlug":30},"artificial-intelligence","anything-llm","AnythingLLM turns your internal documents into a chat-queryable knowledge base, with multi-user management and isolated workspaces. By hosting it on your VPS, you get a private RAG assistant connected to your own files, without handing your confidential PDFs to an external service. This guide covers step-by-step deployment, but also real pitfalls reported by the community — including one that permanently destroys your embeddings if you pull the `:latest` tag without precaution.",[33,37,49,52,56,81,84,86],{"type":34,"title":35,"body":36},"h2","Why self-host AnythingLLM on a VPS","AnythingLLM is first and foremost a complete RAG engine: document ingestion, chunking, vectorization, semantic search and generation, all within a browser-accessible multi-user interface. The heart of the matter is the data: financial reports, contracts, product documentation, support knowledge base. These files have no business transiting through a third-party SaaS ingestion provider.\n\nOn a VPS, the document embedder, the vector database (LanceDB built in by default) and conversation history stay in your Docker volumes — never duplicated elsewhere without your consent. You control who accesses which workspace, freely choose the LLM (cloud API or local model via Ollama), and avoid the ingestion quotas of SaaS offerings that cap the number of pages or files.\n\nFor an agency managing several clients, each workspace becomes a watertight silo: partitioned documents, role-based permissions, no leakage between teams. For a company, compliance is the priority: data stays on your infrastructure, in your jurisdiction, under your backup policy.",{"type":38,"title":39,"items":40},"ul","The concrete benefits of a self-hosted AnythingLLM",[41,42,43,44,45,46,47,48],"Confidential documents indexed locally, never sent to a third-party ingestion service.","Workspaces partitioned by client or team, with fine-grained role management (Admin, Manager, Default).","Vector database of your choice: embedded LanceDB to start, external Chroma or Qdrant for large corpora.","Connection to 20+ LLM providers, including a local Ollama for zero-cloud and zero inference cost.","No limit on the number of documents, pages or workspaces ingested.","Simple and portable backup: the entire state fits in a single `storage` volume to archive or replicate.","Built-in no-code AI agents: create automation pipelines without leaving the interface.","Full REST API to integrate AnythingLLM into your own applications or automation scripts.",{"type":34,"title":50,"body":51},"Hardware and software requirements","The AnythingLLM container is reasonable on resources, but embedding a large corpus consumes CPU and RAM significantly. Aim for **2 vCPU \u002F 2 GB of RAM** to start with a few hundred documents and a cloud LLM API. Scale up to **4 vCPU \u002F 8 GB** if you index thousands of documents, use a local embedding model, or run Ollama on the same host.\n\nPlan for **15 to 20 GB of disk** as a minimum: vectors and the document cache grow quickly, especially with dense PDFs or multilingual corpora. Add margin if you also deploy Qdrant or Ollama on the same VPS.\n\nOn the software side, you need:\n- **Docker** and **Docker Compose** (v2 recommended)\n- A **domain name** or subdomain pointing to your VPS (e.g. `chat.your-domain.com`)\n- Port **443** open inbound on your firewall\n- An LLM API key (OpenAI, Anthropic, Mistral…) if you are not using local Ollama\n\n**Important note on versions**: before any `docker pull` command, read the Version Pinning section below. Pulling `:latest` without precaution can permanently destroy your embeddings.",{"type":53,"title":54,"body":55},"tip","Version pinning: critical and irreversible","**Never use the `:latest` tag in production.** A `docker pull mintplexlabs\u002Fanythingllm:latest` can overwrite the internal encryption key of embeddings stored in your volume, making all your vectorized documents **permanently unreadable** — with no recovery possible.\n\nThis behavior is documented as a breaking change since March 2026 (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMintplex-Labs\u002Fanything-llm\u002Fissues\u002F5256\">GitHub issue #5256\u003C\u002Fa>).\n\nThe rule to follow: always pin a fixed version in your `docker-compose.yml`:\n\n```yaml\nimage: mintplexlabs\u002Fanythingllm:v1.8.4\n```\n\nBefore updating, read the release notes for each intermediate version, back up your full `storage` volume, and test the version upgrade on a copy before applying it to production.",{"type":57,"title":58,"steps":59},"steps","Deploy AnythingLLM with Docker and HTTPS",[60,63,66,69,72,75,78],{"title":61,"body":62},"Create the directory structure and permissions","Over SSH on your VPS, create the working directory and data volume:\n\n```bash\nmkdir -p \u002Fopt\u002Fanythingllm\u002Fstorage\ncd \u002Fopt\u002Fanythingllm\nchmod -R 777 storage\n```\n\nThe container runs with a dedicated UID (non-root): `777` permissions on `storage` are necessary for the internal process to write the vector database and document uploads.",{"title":64,"body":65},"Write docker-compose.yml with a pinned version","Create `\u002Fopt\u002Fanythingllm\u002Fdocker-compose.yml`. Note the fixed version tag — **do not use `:latest`**:\n\n```yaml\nservices:\n  anythingllm:\n    image: mintplexlabs\u002Fanythingllm:v1.8.4\n    container_name: anythingllm\n    restart: unless-stopped\n    ports:\n      - \"3001:3001\"\n    volumes:\n      - .\u002Fstorage:\u002Fapp\u002Fserver\u002Fstorage\n    env_file:\n      - .env\n    cap_add:\n      - SYS_ADMIN\n```\n\nThen create `.env` in the same folder with at minimum:\n\n```bash\nJWT_SECRET=change-me-to-a-long-random-string\nSTORAGE_DIR=\u002Fapp\u002Fserver\u002Fstorage\nLLM_PROVIDER=openai\nOPEN_AI_KEY=sk-your-openai-key\n```\n\nReplace `LLM_PROVIDER` and the key according to your provider. For local Ollama, see the next step.",{"title":67,"body":68},"Configure Ollama if you opt for 100% local","If Ollama is running on the **same host** as the AnythingLLM container, **do not use `localhost`** — from inside the container, `localhost` refers to the container itself, not the host.\n\nCorrect URL by OS:\n- **Linux**: `http:\u002F\u002F172.17.0.1:11434` (default Docker bridge address)\n- **macOS \u002F Windows**: `http:\u002F\u002Fhost.docker.internal:11434`\n\nIn your `.env`:\n\n```bash\nLLM_PROVIDER=ollama\nOLLAMA_BASE_PATH=http:\u002F\u002F172.17.0.1:11434\nOLLAMA_MODEL_PREF=llama3.2\nEMBEDDING_ENGINE=ollama\nEMBEDDING_BASE_PATH=http:\u002F\u002F172.17.0.1:11434\nEMBEDDING_MODEL_PREF=nomic-embed-text\n```\n\nVerify that Ollama is listening on `0.0.0.0` (not just `127.0.0.1`) by checking `OLLAMA_HOST=0.0.0.0` in its systemd unit or environment variable.",{"title":70,"body":71},"Start the container and create the admin account","Launch the service:\n\n```bash\ndocker compose up -d\ndocker compose logs -f\n```\n\nWait for the lines `[server] Listening on port 3001` and `[database] Migration complete`. Then access `http:\u002F\u002Fyour-ip:3001` from your workstation (temporary access, to be closed after setting up the reverse proxy). The configuration wizard guides you to create the administrator account and choose the embedding model and LLM.",{"title":73,"body":74},"Set up the reverse proxy with HTTPS","With **Nginx** or **Caddy**, expose AnythingLLM behind your domain.\n\nCaddy example (simplest, automatic Let's Encrypt):\n\n```\nchat.your-domain.com {\n    reverse_proxy localhost:3001\n    request_body {\n        max_size 100MB\n    }\n}\n```\n\nNginx example (`server` block):\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name chat.your-domain.com;\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fchat.your-domain.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fchat.your-domain.com\u002Fprivkey.pem;\n    client_max_body_size 100M;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3001;\n        proxy_set_header Host $host;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n    }\n}\n```\n\nThe `client_max_body_size` directive (Nginx) or `max_size` (Caddy) is essential to allow uploading large PDFs or document archives.",{"title":76,"body":77},"Create a workspace, ingest documents and test","In the interface, click '+ New workspace', give it a name, then drag a few PDFs into the upload area. Launch the embedding (button 'Save and embed'). Once done, ask a question in the chat — answers should cite sources extracted from your files.\n\nIf citations do not appear, check in the workspace settings that RAG mode is enabled (option 'Chat mode' → 'Query'), and that the number of chunks returned is greater than 0.",{"title":79,"body":80},"Enable multi-user mode and secure access","In Settings → Multi-User Mode, enable multi-user mode. Invite your collaborators by email and assign roles: **Admin** (full access), **Manager** (workspace management), **Default** (use only).\n\nRestrict each user to only the workspaces that concern them. From the admin interface, you can also configure SSO or external authentication if your LLM provider supports it.",{"type":34,"title":82,"body":83},"Troubleshooting: the three most common pitfalls","These three issues come up regularly in the AnythingLLM community. Knowing them before deploying will save you hours of debugging.\n\n**Pitfall 1 — `:latest` destroys your embeddings (critical, irreversible)**\n\nIf you update your container with `docker pull mintplexlabs\u002Fanythingllm:latest`, a new version may overwrite the encryption key of embeddings stored in your volume. Result: all your vectorized documents become unreadable, with no recovery possible. This breaking change has been documented since March 2026 (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMintplex-Labs\u002Fanything-llm\u002Fissues\u002F5256\">issue #5256\u003C\u002Fa>). **Solution**: always pin a fixed version tag (`v1.8.4`, `v1.9.x`…) in your `docker-compose.yml` and never `pull` without a prior backup of the `storage` volume.\n\n**Pitfall 2 — Gemini agents are broken since v1.16**\n\nSince AnythingLLM v1.16, the Gemini provider produces a connection error during streaming that stays open indefinitely, blocking the agent (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMintplex-Labs\u002Fanything-llm\u002Fissues\u002F6153\">issue #6153\u003C\u002Fa>, still open). **Workaround**: disable the Gemini provider in LLM settings and use instead an OpenAI-compatible endpoint or switch to Ollama. Do not try to debug at the network level — the issue is in AnythingLLM's stream handling.\n\n**Pitfall 3 — Ollama unreachable from the container**\n\nIf Ollama is installed directly on the host (outside Docker), configuring `http:\u002F\u002Flocalhost:11434` in AnythingLLM does not work: from inside the container, `localhost` points to the container itself, not the host. Use `http:\u002F\u002F172.17.0.1:11434` on Linux (Docker bridge IP) or `http:\u002F\u002Fhost.docker.internal:11434` on macOS\u002FWindows. Also check that Ollama listens on `0.0.0.0` and not only `127.0.0.1` (`OLLAMA_HOST=0.0.0.0` variable in the systemd service).",{"type":53,"body":85},"For large corpora (more than 10,000 chunks), do not stick with embedded LanceDB: deploy Qdrant in a neighboring container on the same Docker network and point AnythingLLM to it via the `VECTOR_DB=qdrant` and `QDRANT_ENDPOINT=http:\u002F\u002Fqdrant:6333` variables. Qdrant handles millions of vectors better, offers metadata filtering and remains independently queryable, which makes debugging your semantic searches easier. The Qdrant volume is also easy to back up: a simple `docker cp` or volume snapshot is enough.",{"type":87,"title":88,"headers":89,"rows":92},"comparison","AnythingLLM vs Open WebUI: which AI workspace is right for you?",[5,90,91],"AnythingLLM","Open WebUI",[93,97,101,105,109,113,117,121,125,129],[94,95,96],"Primary focus","Document RAG + AI agents","Chat UI for LLMs",[98,99,100],"RAG \u002F document ingestion","Built-in (PDF, Word, URL, Notion, GitHub…)","Basic file upload",[102,103,104],"AI agent builder","Yes (no-code)","No",[106,107,108],"LLM providers","20+ (Ollama, OpenAI, Anthropic, Mistral…)","Ollama + OpenAI-compatible",[110,111,112],"Multi-user roles","Admin \u002F Manager \u002F Default","Basic user management",[114,115,116],"REST API","Full document & chat API","Limited",[118,119,120],"Vector store","LanceDB built-in + swappable (Qdrant, Chroma…)","External via RAG config",[122,123,124],"RAM (API-only, no local LLM)","~512 MB","~256 MB",[126,127,128],":latest risk","Critical — destroys embeddings","Less documented",[130,131,131],"Licence","MIT","Your private AI knowledge base on a ServOrbit Cloud VPS","The ServOrbit Cloud VPS provides the storage and RAM needed to index your documents and run AnythingLLM in full confidentiality. Choose your size based on your corpus and scale on demand as it grows.","Start my Cloud VPS","\u002Fvps-cloud",[137,152,168],{"id":18,"slug":138,"slugs":139,"title":142,"excerpt":143,"readTime":144,"views":14,"isPinned":15,"publishedAt":145,"category":146,"categories":147,"featuredImage":25,"bgImage":26,"posterImage":149,"relatedSolution":150},"how-to-host-open-webui-on-a-vps",{"fr":140,"en":138,"ar":141},"heberger-open-webui","كيفية-استضافة-open-webui-على-خادم-vps","How to Host Open WebUI on a VPS","A complete guide to deploying Open WebUI on your own VPS. Keep control of your data, avoid cloud API costs, and access your LLMs from a clean web interface.",4,"2026-06-01T00:00:00+00:00",{"id":18,"name":19,"slug":20,"color":21,"icon":22},[148],{"id":18,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fheberger-open-webui-poster.svg",{"categorySlug":29,"appSlug":151},"open-webui",{"id":153,"slug":154,"slugs":155,"title":158,"excerpt":159,"readTime":160,"views":14,"isPinned":15,"publishedAt":161,"category":162,"categories":163,"featuredImage":25,"bgImage":26,"posterImage":165,"relatedSolution":166},2,"deploying-dify-on-a-vps-ai-workflows-under-control",{"fr":156,"en":154,"ar":157},"deployer-dify-vps","نشر-dify-على-vps-سير-عمل-الذكاء-الاصطناعي-تحت-السيطرة","Deploying Dify on a VPS: AI Workflows Under Control","Install Dify on a ServOrbit VPS to build agents, chatflows and AI apps without losing control of your data.",3,"2026-02-11T00:00:00+00:00",{"id":18,"name":19,"slug":20,"color":21,"icon":22},[164],{"id":18,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fdeployer-dify-vps-poster.svg",{"categorySlug":29,"appSlug":167},"dify",{"id":169,"slug":170,"slugs":171,"title":174,"excerpt":175,"readTime":160,"views":14,"isPinned":15,"publishedAt":176,"category":177,"categories":178,"featuredImage":25,"bgImage":26,"posterImage":180,"relatedSolution":181},121,"hosting-openclaw-on-a-vps",{"fr":172,"en":170,"ar":173},"heberger-openclaw-vps","استضافة-openclaw-على-خادم-vps","Hosting OpenClaw on a VPS","Host OpenClaw on your VPS: the open source personal AI assistant reachable from WhatsApp, Telegram, Discord and 50+ messaging apps. Docker, LLM setup and HTTPS.","2026-02-23T00:00:00+00:00",{"id":18,"name":19,"slug":20,"color":21,"icon":22},[179],{"id":18,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fheberger-openclaw-vps-poster.svg",{"categorySlug":29,"appSlug":182},"openclaw",1787581002747]