Setup OpenWebUI + Ollama trên VPS: ChatGPT clone hoàn toàn tự host

Chia sẻ bài viết

Mục lục
TL;DR
  • OpenWebUI là ChatGPT-clone UI tự host, hỗ trợ Ollama, OpenAI/Anthropic/Gemini API, đẹp như ChatGPT chính chủ, 70k+ star GitHub.
  • Combine với Ollama backend: chat full local với Llama 3.3, Qwen 2.5, Mistral, không lộ data ra ngoài.
  • VPS Cloud TND 80 (4GB RAM, 799k/tháng) đủ chạy Qwen2.5 7B Q4 cho team 5-10 user.
  • Tính năng đầy đủ: multi-user RBAC, RAG document upload, web search, image gen (DALL-E/Stable Diffusion), code interpreter, function calling.
  • Tiết kiệm 20 USD/user/tháng so với ChatGPT Plus team, data privacy đảm bảo cho doanh nghiệp.

ChatGPT Plus 20 USD/user/tháng, team 10 người là 200 USD. Bonus: data của bạn lên server OpenAI, không kiểm soát được. OpenWebUI + Ollama giải bài này: ChatGPT-like UI đẹp y chang, chạy trên VPS riêng, model open source local hoặc dùng API bất kỳ provider nào. Free hoàn toàn, data nội bộ, RBAC chuyên nghiệp cho team.

Mình đang chạy OpenWebUI cho 3 công ty Việt Nam: 1 marketing agency 8 user, 1 startup B2B 12 user, 1 cá nhân solo. Setup 1 buổi, dev và non-dev đều dùng được. Bài này hướng dẫn full setup + best practice từ kinh nghiệm production.

1. OpenWebUI vs LobeChat vs LibreChat

Tiêu chíOpenWebUILobeChatLibreChat
GitHub star70k50k20k
StackPython FastAPI + SvelteTypeScript Next.jsNode.js + React
RAM idle500MB400MB500MB
Multi-userCó (RBAC)Có (Clerk)
RAG built-inCó (plugin)
Image genDALL-E, SD, ComfyUIDALL-E onlyDALL-E only
Function callingHạn chế
UI quality10/109/108/10

OpenWebUI win về tính năng đầy đủ và UX. LobeChat đẹp nhưng ít integration. LibreChat ổn định nhưng UI cũ.

2. Cài Ollama backend trước

# Cloud VPS 80 (4GB RAM, 4 core)
curl -fsSL https://ollama.com/install.sh | sh
systemctl enable --now ollama

# Bind localhost only
systemctl edit ollama.service
# Thêm:
# [Service]
# Environment="OLLAMA_HOST=127.0.0.1:11434"
# Environment="OLLAMA_NUM_PARALLEL=4"
# Environment="OLLAMA_KEEP_ALIVE=24h"

systemctl daemon-reload
systemctl restart ollama

# Pull model phổ biến
ollama pull qwen2.5:7b
ollama pull llama3.3:latest
ollama pull nomic-embed-text       # cho RAG embedding

3. Cài OpenWebUI Docker

mkdir -p /opt/openwebui && cd /opt/openwebui
# docker-compose.yml
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: unless-stopped
    network_mode: host    # để access Ollama localhost
    environment:
      OLLAMA_BASE_URL: http://127.0.0.1:11434
      WEBUI_AUTH: "true"
      WEBUI_NAME: "TND AI"
      DEFAULT_LOCALE: vi
      ENABLE_SIGNUP: "false"   # admin invite only
      WEBUI_SECRET_KEY: $(openssl rand -base64 32)
      ENABLE_RAG_WEB_SEARCH: "true"
      RAG_WEB_SEARCH_ENGINE: searxng
      SEARXNG_QUERY_URL: http://127.0.0.1:8888
      ENABLE_IMAGE_GENERATION: "true"
      IMAGE_GENERATION_ENGINE: openai
      OPENAI_API_KEY: sk-...
    volumes:
      - openwebui-data:/app/backend/data

volumes:
  openwebui-data:
docker compose up -d
docker logs -f openwebui

4. Caddy reverse proxy

ai.your-domain.com {
    reverse_proxy 127.0.0.1:8080 {
        flush_interval -1
        transport http {
            response_header_timeout 5m
        }
    }
    encode gzip
}

5. Tạo admin user và invite team

  1. Truy cập https://ai.your-domain.com, đăng ký user đầu tiên thành admin tự động
  2. Settings -> Users -> Invitations -> Generate link mới
  3. Send link cho team member, họ đăng ký với email công ty
  4. Settings -> Roles -> assign role: admin / user / pending
  5. Disable Signups để không ai bên ngoài đăng ký được

6. Multi-model: combine local + cloud API

Setting -> Connections, add multiple backend:

  • Ollama local: http://127.0.0.1:11434 (free, local model)
  • OpenAI: API key, dùng GPT-4o/o1 cho task khó
  • Anthropic: API key, dùng Claude Sonnet 4.7
  • Google Gemini: API key, dùng Gemini 2.5 Pro
  • Groq: API key, dùng Llama fast inference

User dropdown chọn model tuỳ task. Routine -> Qwen local free. Task khó -> Claude/GPT paid. Cost transparent, mỗi user xem token usage của mình.

7. RAG: upload document chat với

Trong chat panel, click clip icon, upload PDF/Word/Markdown/CSV. OpenWebUI tự embed bằng nomic-embed-text local hoặc OpenAI embedding, lưu vào ChromaDB internal:

# Settings -> Documents
Embedding Engine: ollama
Embedding Model: nomic-embed-text
Embedding Batch Size: 1
Chunk Size: 1500
Chunk Overlap: 100
Top K: 4
Vector DB: ChromaDB (default)

Bonus: tạo Knowledge Collection chứa nhiều document, gắn vào model preset. Mỗi câu hỏi tự lookup context, trả lời sát.

8. Web search tích hợp SearXNG

# Add SearXNG vào docker-compose
searxng:
  image: searxng/searxng:latest
  container_name: searxng
  ports:
    - "127.0.0.1:8888:8080"
  environment:
    SEARXNG_BASE_URL: http://localhost:8888
  volumes:
    - ./searxng:/etc/searxng

Trong chat, toggle "Web Search" icon. Model tự query SearXNG, lấy 5 kết quả top, summarize trả lời. Như Perplexity nhưng tự host, free.

9. Image generation

  • OpenAI DALL-E 3: chất lượng tốt, ~0.04 USD/ảnh, tích hợp dễ.
  • Stable Diffusion local: free, cần GPU, dùng Automatic1111 API.
  • ComfyUI: workflow phức tạp hơn, control tốt, cần GPU.
  • Higgsfield API: Nano Banana, Soul models, tích hợp qua custom function.

Mình recommend DALL-E 3 cho team không có GPU. Hoặc Nano Banana qua Higgsfield API rẻ và đẹp.

10. Code interpreter và function calling

OpenWebUI hỗ trợ Code Execution: model gen Python code, chạy sandboxed (Pyodide hoặc Docker), trả output. User hỏi "tính lãi kép 100 triệu trong 10 năm lãi 8%", AI gen code và chạy, trả số chính xác.

Function calling: define tool JSON schema, model tự gọi:

# Tool example
{
  "type": "function",
  "function": {
    "name": "get_order_status",
    "description": "Get order status by order ID",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": {"type": "string"}
      },
      "required": ["order_id"]
    }
  }
}

Backend handle function call, return JSON, model integrate vào response.

11. Preset model với system prompt

Workspace -> Models -> Create. Define preset model với system prompt riêng:

  • "HR Assistant": Qwen 7B + knowledge "HR Policy 2026" + prompt "Trả lời câu hỏi nhân sự"
  • "Sales Bot": Claude Sonnet + knowledge "Product Catalog" + prompt "Trả lời theo tone sales"
  • "Code Helper": GPT-4o + tool exec code + prompt "Senior backend engineer"
  • "Vietnam SEO Writer": Claude Sonnet + prompt detail SEO formula

User chọn preset từ sidebar, không cần copy paste prompt mỗi lần.

12. Cost monitor và budget per user

# Settings -> Admin Panel -> Users -> Usage
# Hiển thị token usage per user, per model

# Limit budget qua Pipeline
# Settings -> Pipelines -> Add Pipeline "rate_limit"
# Set: max 50 messages/day per user, alert admin khi vượt

Useful khi dùng cloud API, tránh 1 user nuốt 100 USD/ngày. Local model thì không lo cost nhưng vẫn nên limit để fair share.

13. Backup data và migration

# Volume openwebui-data chứa: user data, chat history, knowledge base, settings
docker run --rm -v openwebui-data:/data -v /backup:/backup alpine 
  tar czf /backup/openwebui-$(date +%F).tar.gz /data

# Restore
docker run --rm -v openwebui-data:/data -v /backup:/backup alpine 
  tar xzf /backup/openwebui-2026-06-01.tar.gz -C /

Cron daily backup, push lên R2/S3. Snapshot Cloud VPS TND làm backup layer 2.

14. Performance tuning

  1. OLLAMA_NUM_PARALLEL=4: chạy 4 request concurrent trên cùng model, multi-user OK.
  2. OLLAMA_KEEP_ALIVE=24h: giữ model trong RAM, lần gọi sau không phải reload.
  3. Cache embedding: document upload 1 lần, cache vector. Re-search không tốn embed lại.
  4. Quantize model phù hợp: Q4 cho speed, Q8 cho quality. Cho team nhỏ Q4 đủ.
  5. Disable web search nếu không cần: giảm latency mỗi câu hỏi.

15. Use case thực tế cho doanh nghiệp VN

  • Marketing agency: viết content social, brainstorm ý tưởng campaign, dịch Vietnamese -> English.
  • HR team: trả lời câu hỏi policy, viết JD, screen CV.
  • Sales: drafting email customer, lookup product catalog, RAG sales playbook.
  • Customer support: chatbot first-line, escalate human khi không xử lý được.
  • Engineering: code review, refactor, write test, debug log.
  • Finance: SQL query analytics, generate report, summarize meeting note.

16. Cost breakdown realistic team 10 người

SetupCost/tháng
VPS Cloud 80 (4GB) chạy OpenWebUI + Ollama Qwen 7B799k
+ OpenAI credit cho task khó (optional)~250k (10 USD)
+ Anthropic credit (optional)~500k (20 USD)
Tổng~1.500k
So với ChatGPT Plus 10 user~5.000k (200 USD)

Tiết kiệm 70%+ và data nội bộ không lộ ra ngoài. Quá hợp cho doanh nghiệp VN.

17. Pipeline custom: filter, transform, route

OpenWebUI có Pipeline framework: viết Python script chèn vào flow request/response. Use case:

  • Filter inappropriate content: scan user prompt, reject nếu chứa keyword nhạy cảm.
  • Translate Vietnamese to English: pre-process VN prompt sang EN cho model hiểu tốt hơn, post-process result về VN.
  • Cost tracking: log mỗi request vào DB, calculate cost per user.
  • Route model: classify intent, route question khó sang GPT-4o, dễ sang Qwen local.
  • Add metadata: inject timestamp, user role, location vào context.
# Pipeline example: cost tracking
class Pipeline:
    class Valves(BaseModel):
        budget_per_user_daily: float = 2.0

    def __init__(self):
        self.name = "Cost Tracker"

    async def inlet(self, body: dict, user: dict) -> dict:
        cost_today = await get_user_cost_today(user['id'])
        if cost_today > self.valves.budget_per_user_daily:
            raise Exception("Daily budget exceeded")
        return body

    async def outlet(self, body: dict, user: dict) -> dict:
        tokens = body['usage']['total_tokens']
        cost = calculate_cost(body['model'], tokens)
        await log_cost(user['id'], cost)
        return body

18. Multi-tenancy: serve nhiều client trên 1 instance

Agency host OpenWebUI cho 5 client khác nhau: tách workspace, knowledge collection, model preset per client. Mỗi client login subdomain riêng:

# Caddy multi-domain routing
client-a.ai.your-domain.com {
    reverse_proxy 127.0.0.1:8080
    header X-Tenant-ID "client-a"
}

client-b.ai.your-domain.com {
    reverse_proxy 127.0.0.1:8080
    header X-Tenant-ID "client-b"
}

Pipeline đọc header X-Tenant-ID, filter knowledge collection và user theo tenant. 1 instance host được 5-10 client small, tiết kiệm cost infrastructure.

19. Mobile app: PWA và iOS shortcut

OpenWebUI là PWA, user install vào home screen iOS/Android như native app. Truy cập offline với cache prompt history. Bonus: tạo iOS Shortcut gọi API OpenWebUI từ Siri, voice-to-chat tiện lợi.

# iOS Shortcut: voice -> Whisper -> OpenWebUI chat -> TTS response
# 1. Dictate text (Siri voice)
# 2. POST to https://ai.your-domain.com/api/chat/completions
#    Headers: Authorization Bearer YOUR_TOKEN
#    Body: { messages: [{role:"user", content: TEXT}] }
# 3. Get response
# 4. Speak response (TTS)

20. Backup chat history và migration

Chat history lưu trong SQLite hoặc Postgres tuỳ config. Export per user qua API:

curl -H "Authorization: Bearer $TOKEN" 
  https://ai.your-domain.com/api/v1/chats/all 
  > backup-chats-$(date +%F).json

Migration giữa instance: export, import vào instance mới. Snapshot volume Docker cũng OK.

21. So sánh production sau 1 năm dùng

Sau 1 năm chạy OpenWebUI cho 3 công ty, đây là review thực tế:

  1. Uptime 99.5%, ít downtime ngoài kế hoạch.
  2. User adoption cao, sau 2 tuần dùng đều đặn thay ChatGPT.
  3. Cost giảm 70% so với ChatGPT Plus team license.
  4. Data privacy là điểm bán hàng lớn cho khách hàng VN ngại data leak.
  5. RAG knowledge base hữu ích nhất, replace phần lớn confluence search.
  6. Update OpenWebUI hằng tháng có breaking change nhỏ, test trên staging trước.

Setup này mình recommend cho mọi doanh nghiệp VN 5+ nhân viên muốn dùng AI nội bộ mà không phụ thuộc SaaS đắt và lo data leak.

Cloud VPS cho vibe coder

VPS chạy OpenWebUI + Ollama cho ChatGPT clone tự host

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Cloud VPS 80 (4GB RAM, 799k) đủ cho team 5-10 user với Qwen 7B local. Scale lên Cloud VPS 160 cho Qwen 14B chất lượng cao hơn.

Xem 8 cấu hình Cloud VPS →

FAQ

OpenWebUI có miễn phí hoàn toàn không?

Có, license BSD-3-Clause hoàn toàn free self-host. Chỉ tốn VPS và optional API key cloud nếu muốn dùng GPT-4o/Claude. Local model Ollama free, chi phí 0 cho LLM.

Model nào tốt nhất cho tiếng Việt local?

Qwen 2.5 7B tốt nhất cho tiếng Việt local hiện tại (2026). Llama 3.3 cũng OK nhưng yếu hơn về văn phong VN. Cho chất lượng cao nhất, fallback Claude Sonnet 4.7 qua API cho prompt phức tạp.

Có support voice chat không?

Có, OpenWebUI hỗ trợ Whisper STT (speech-to-text) và TTS (text-to-speech) qua OpenAI hoặc local Coqui TTS. Chat bằng voice như ChatGPT app. Setup thêm 1-2 giờ cho TTS local có giọng Việt.

So với LM Studio thì khác gì?

LM Studio là desktop app local cá nhân, không multi-user, không web access. OpenWebUI server-based, multi-user team, RBAC, RAG, knowledge collection. Cho cá nhân dùng LM Studio dễ. Cho team dùng OpenWebUI.

Có chạy được trên CPU không cần GPU không?

Có. Ollama CPU mode chạy được mọi model với quantization Q4/Q5. Tốc độ chậm hơn GPU 5-10x (5-15 token/s thay vì 50-100). Cho team nhỏ dùng được, latency 3-10s/response chấp nhận được.

22. Tổng kết roadmap cho doanh nghiệp Việt Nam

Bắt đầu Cloud VPS 80 với Ollama Qwen 7B cho team 5-10 user, validate use case trong 1 tháng. Khi team grow lên 20+ user hoặc cần model chất lượng cao, upgrade Cloud VPS 160 chạy Qwen 14B. Add Anthropic API hoặc OpenAI cho task khó. Setup RAG với knowledge base 1 tháng để ai cũng dùng tốt. Tổng đầu tư dưới 5 triệu/tháng cho team 30 user, productivity tăng 20-30% theo report nội bộ. Đây là setup vibe coder tốt nhất cho doanh nghiệp Việt Nam 2026, balance giữa cost, privacy, và quality. Bạn có thể combine với LangChain agent, Flowise, Continue.dev tạo thành full AI stack nội bộ, replace gần như mọi SaaS AI bên ngoài.

Đầu tư 1 buổi setup, sau đó tận hưởng ChatGPT clone tự host bền vững nhiều năm với chi phí thấp và data privacy đảm bảo. Đây là setup ROI cao nhất mình từng recommend cho doanh nghiệp Việt Nam trong các năm gần đây.

2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666