- Continue.dev là extension VSCode/JetBrains open source thay Copilot, kết nối được mọi LLM backend qua chuẩn OpenAI compatible.
- Backend self-host trên VPS dùng Ollama (đơn giản) hoặc vLLM (production). Mô hình ngon: Qwen2.5-Coder 7B, DeepSeek-Coder V2 Lite.
- Cần VPS có GPU hoặc CPU 8 core + 16GB RAM cho Qwen 7B Q4, 24GB RAM cho 14B model.
- Config file ~/.continue/config.yaml chỉ định provider, model, autocomplete, embed model để chat hiểu codebase.
- Workflow này tiết kiệm 19 USD/tháng Copilot mỗi dev, code không gửi ra ngoài, hợp công ty Việt Nam ngại data leak.
GitHub Copilot 19 USD/tháng, mỗi dev mỗi tháng. Team 10 người là 190 USD, chưa kể vấn đề data sensitive bị gửi ra Microsoft. Continue.dev là alternative open source: extension cho VSCode và JetBrains, dùng được mọi LLM, kể cả model tự host trên VPS riêng. Bài này hướng dẫn setup full stack: VPS chạy Ollama backend, Continue extension trên máy dev, autocomplete + chat hiểu codebase.
Mình đang chạy setup này cho team 4 dev gần 1 năm, model Qwen2.5-Coder 14B trên VPS 32GB RAM, latency autocomplete khoảng 200-400ms, chất lượng chat code tương đương GPT-4o-mini. Không phụ thuộc internet, không bị rate limit, code internal không lo bị leak.
1. Continue.dev là gì và khác Cursor/Copilot ra sao
Continue.dev là extension AI coding open source được Y Combinator W23 đầu tư, hiện đã 25k star GitHub. Triết lý: tách rõ frontend (extension trong IDE) và backend (LLM provider), cho phép mix and match. Bạn có thể dùng Claude cho chat, GPT-4 cho autocomplete, hoặc full local Ollama.
| Tiêu chí | Continue.dev | GitHub Copilot | Cursor |
|---|---|---|---|
| License | Apache 2.0 | Closed | Closed |
| Self-host backend | Có | Không | Không |
| Hỗ trợ IDE | VSCode, JetBrains | VSCode, Visual Studio, Neovim | Fork VSCode riêng |
| Custom model | Bất kỳ OpenAI-compatible | Chỉ Microsoft hosted | Anthropic + OpenAI |
| Chi phí 10 dev/tháng | Free (self-host VPS) | 190 USD | 200 USD |
| Codebase context | Có (RAG) | Hạn chế | Tốt nhất hiện tại |
Nhược điểm: setup ban đầu phức tạp hơn Copilot (copy-paste-go). Trade-off đáng để bỏ vài giờ chiều thứ Sáu setup, đổi lại 1 năm không tốn subscription.
2. Chọn cấu hình VPS phù hợp cho LLM backend
2 lựa chọn: CPU only (rẻ, chậm hơn) hoặc GPU (đắt, nhanh). Cho dev nội bộ team nhỏ, CPU là đủ. Mô hình quantization Q4 hoặc Q5 cho speed/quality balance tốt nhất.
| Setup | Model | RAM | VPS khuyến nghị | Tốc độ token/s |
|---|---|---|---|---|
| Solo dev | Qwen2.5-Coder 1.5B Q4 | 2GB | Cloud VPS 20 (199k) | 20-30 |
| Small team 3-5 | Qwen2.5-Coder 7B Q4 | 8GB | Cloud VPS 80 (799k) | 10-15 |
| Team 5-15 | Qwen2.5-Coder 14B Q5 | 16GB | Cloud VPS 160 (1590k) | 8-12 |
| Production high-load | DeepSeek-Coder V2 16B | 24GB+ GPU | VPS GPU (dedicated) | 50+ |
Mình recommend bắt đầu Cloud VPS 80 với Qwen 7B Q4. Đủ tốc độ cho chat, autocomplete có chút lag nhưng chấp nhận được. Upgrade khi team grow.
3. Cài Ollama trên VPS AlmaLinux 9
Ollama là cách dễ nhất chạy LLM local: 1 lệnh install, 1 lệnh pull model, expose API OpenAI-compatible ngay. Cài đặt:
curl -fsSL https://ollama.com/install.sh | sh
systemctl enable --now ollama
systemctl status ollama
Mặc định Ollama bind 127.0.0.1:11434. Để dev máy local truy cập, mở qua reverse proxy có auth, không expose thẳng port 11434. Edit systemd:
systemctl edit ollama.service
# Thêm:
# [Service]
# Environment="OLLAMA_HOST=127.0.0.1:11434"
# Environment="OLLAMA_NUM_PARALLEL=4"
# Environment="OLLAMA_KEEP_ALIVE=10m"
systemctl daemon-reload
systemctl restart ollama
Pull model coding ngon:
ollama pull qwen2.5-coder:7b
ollama pull qwen2.5-coder:1.5b-base # cho autocomplete (nhỏ, nhanh)
ollama pull nomic-embed-text # cho embed codebase
ollama list
Model 7B Q4 chiếm khoảng 4.7GB disk, load vào RAM cũng tương tự. Lần đầu pull mất 5-10 phút tuỳ tốc độ mạng.
4. Setup Caddy reverse proxy với basic auth
Expose Ollama qua HTTPS với password để tránh người ngoài lạm dụng:
caddy hash-password
# Nhập password mới, copy hash output
File /etc/caddy/Caddyfile:
ai.your-domain.com {
basicauth {
devteam $2a$14$replace_with_caddy_hash_output_here
}
reverse_proxy 127.0.0.1:11434 {
header_up Host {host}
flush_interval -1
}
log {
output file /var/log/caddy/ollama.log
format json
}
}
flush_interval -1 quan trọng cho streaming response, nếu không response sẽ bị buffer và chat trông như đứng. Reload caddy và test:
systemctl reload caddy
curl -u devteam:yourpassword https://ai.your-domain.com/api/tags
5. Cài Continue.dev extension trong VSCode
Mở VSCode, vào Extensions, search "Continue", install. Sau khi cài, sidebar bên trái có icon Continue. Click vào sẽ mở chat panel.
File config nằm ở ~/.continue/config.yaml (hoặc %USERPROFILE%.continueconfig.yaml trên Windows). Edit:
name: TND Team AI
version: 1.0.0
schema: v1
models:
- name: Qwen Coder 7B
provider: openai
model: qwen2.5-coder:7b
apiBase: https://ai.your-domain.com/v1
apiKey: devteam:yourpassword
roles:
- chat
- edit
- name: Qwen Coder 1.5B Autocomplete
provider: openai
model: qwen2.5-coder:1.5b-base
apiBase: https://ai.your-domain.com/v1
apiKey: devteam:yourpassword
roles:
- autocomplete
- name: Nomic Embed
provider: openai
model: nomic-embed-text
apiBase: https://ai.your-domain.com/v1
apiKey: devteam:yourpassword
roles:
- embed
context:
- provider: code
- provider: docs
- provider: diff
- provider: terminal
- provider: open
- provider: tree
Lưu file, Continue tự reload. Test bằng cách bôi đen 1 hàm Python, nhấn Cmd+L (Mac) hoặc Ctrl+L (Linux/Windows), gõ "explain this function".
6. Bật tab autocomplete ghost text
Autocomplete cần model riêng nhỏ và nhanh, không dùng model 7B chat vì latency cao. Qwen2.5-Coder 1.5B-base hoặc StarCoder2-3B là lựa chọn tốt. Trong config.yaml đã định nghĩa role: autocomplete, Continue tự dùng model đó cho ghost text.
Settings VSCode mở Continue config, enable Tab Autocomplete. Khi gõ code, sau 200ms sẽ thấy gợi ý xám hiện ra, nhấn Tab để accept.
Tinh chỉnh latency vs quality trong config:
tabAutocompleteOptions:
useCache: true
multilineCompletions: auto
maxPromptTokens: 1024
prefixPercentage: 0.5
debounceDelay: 250
modelTimeout: 2000
7. Index codebase cho chat hiểu context project
Continue có built-in code indexing: scan toàn bộ folder workspace, chia thành chunk, embed bằng nomic-embed-text, lưu vào local vector DB. Khi bạn hỏi "where is the auth middleware", nó query vector DB tìm chunk liên quan và đưa vào context cho LLM.
Lần đầu mở project mới, Continue tự trigger indexing. Status bar dưới góc phải hiện progress. Project 50k LOC mất khoảng 2-5 phút. Sau đó incremental update khi file thay đổi.
Trigger reindex manual khi cần:
// Trong Continue chat panel
@codebase explain the auth flow
@codebase find all api endpoints that return 500
@codebase how does the payment webhook work
8. Tạo slash command custom cho team
Continue cho phép define slash command tái sử dụng. Ví dụ /review để code review, /test để gen unit test:
slashCommands:
- name: review
description: Review code for bugs, security, style
run: |
Review the following code thoroughly:
- Find potential bugs and edge cases
- Check security vulnerabilities (SQL injection, XSS, auth bypass)
- Suggest cleaner naming and refactoring
- Verify error handling
Output as markdown checklist.
- name: test
description: Generate unit tests with Vitest
run: |
Generate comprehensive unit tests using Vitest:
- Cover happy path and edge cases
- Mock external dependencies
- Use describe/it structure
- Include arrange/act/assert pattern
Trong chat panel gõ /review sau khi bôi đen code, Continue inject prompt và gửi tới LLM. Tiết kiệm thời gian gõ prompt lặp lại.
9. Cài thêm vLLM cho production high-throughput
Ollama đơn giản nhưng throughput hạn chế (1-2 request concurrent). Cho team 10+ dev, vLLM hoặc TGI scale tốt hơn nhiều nhờ continuous batching.
pip install vllm
vllm serve Qwen/Qwen2.5-Coder-7B-Instruct
--host 127.0.0.1
--port 8000
--dtype auto
--max-model-len 16384
--gpu-memory-utilization 0.85
vLLM yêu cầu GPU NVIDIA với CUDA. Nếu VPS CPU only, dùng llama.cpp server hoặc Ollama. Cho coding team 10-30 người, GPU VPS hoặc dedicated server với RTX 4090 là sweet spot price/performance.
10. So sánh chất lượng các coding model
Benchmark thực tế mình test trên 50 task daily (debug, refactor, generate test, explain legacy code):
| Model | Chất lượng (1-10) | Tốc độ token/s (CPU) | RAM |
|---|---|---|---|
| Qwen2.5-Coder 1.5B Q4 | 5 | 30+ | 2GB |
| Qwen2.5-Coder 7B Q4 | 7.5 | 10-15 | 5GB |
| Qwen2.5-Coder 14B Q5 | 8.5 | 5-8 | 11GB |
| DeepSeek-Coder V2 Lite 16B | 9 | 4-6 | 14GB |
| Codestral 22B | 8.5 | 3-5 | 16GB |
| GPT-4o-mini (reference) | 8 | cloud (40) | N/A |
| Claude Sonnet 3.5 (reference) | 9.5 | cloud (50) | N/A |
Sweet spot cho team Việt Nam: Qwen2.5-Coder 14B Q5 trên Cloud VPS 160 hoặc dedicated server có 32GB RAM. Chất lượng đủ dùng cho 80% task daily.
11. Tips và lỗi thường gặp
- Lỗi CORS khi Continue gọi Ollama: thêm Caddy header Access-Control-Allow-Origin "*" hoặc set OLLAMA_ORIGINS=https://*.your-domain.com.
- Model unload sau idle: Ollama tự unload model khỏi RAM sau 5 phút không dùng, lần gọi tiếp theo bị chậm. Set OLLAMA_KEEP_ALIVE=24h để giữ.
- Autocomplete latency cao: dùng model nhỏ 1.5B cho autocomplete, model 7B+ chỉ cho chat. Bật useCache: true.
- Codebase quá lớn không index nổi: thêm file .continueignore tương tự .gitignore, exclude node_modules, dist, build folder.
- Multi-dev share 1 VPS bị bottleneck: dùng vLLM với batching, hoặc tách 2 VPS: 1 cho chat (model lớn), 1 cho autocomplete (model nhỏ).
12. Bonus: kết hợp với Claude Code cho task khó
Self-host model chất lượng giới hạn. Cho task khó (debug bug phức tạp, design architecture), fallback sang Claude Sonnet hoặc GPT-4o qua Continue. Config nhiều model song song:
models:
- name: Qwen Local (default)
provider: openai
model: qwen2.5-coder:14b
apiBase: https://ai.your-domain.com/v1
apiKey: devteam:yourpassword
roles: [chat, edit]
- name: Claude Sonnet (premium)
provider: anthropic
model: claude-sonnet-4-7-20260520
apiKey: $YOUR_ANTHROPIC_KEY
roles: [chat, edit]
Trong chat panel, dropdown chọn model. 90% task dùng Qwen local free, 10% task khó dùng Claude tốn 5-10 cent/lần. Tổng chi phí thấp hơn nhiều so với Copilot subscription cho cả team.
13. Setup MCP server tích hợp tool ngoài cho Continue
Continue v0.9 trở lên hỗ trợ Model Context Protocol (MCP), cho phép LLM gọi tool ngoài như search GitHub issue, query database, list file trên VPS. Đây là tính năng giúp Continue tiệm cận Cursor và Claude Code về khả năng agent.
Cài MCP server filesystem để LLM list/read file project:
npm install -g @modelcontextprotocol/server-filesystem
npm install -g @modelcontextprotocol/server-github
# Trong config.yaml:
mcpServers:
- name: filesystem
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/home/dev/projects"
- name: github
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-github"
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "$GITHUB_TOKEN"
Restart Continue, trong chat panel gõ @tools sẽ thấy danh sách MCP tool có sẵn. Mô hình tự quyết định khi nào gọi tool. Ví dụ: bạn hỏi "tìm file user authentication trong project", Continue tự gọi filesystem search rồi đọc file đó.
14. Quản lý multi-project và workspace settings
Continue cho phép override config theo workspace. Tạo file .continue/config.yaml trong root project để dev khác clone về dùng chung setting:
# .continue/config.yaml trong project root
models:
- name: "Project-specific model"
provider: openai
model: deepseek-coder-v2:16b
apiBase: https://ai.your-domain.com/v1
apiKey: devteam:yourpassword
systemMessage: |
You are a senior engineer at TND working on the WHMCS billing module.
Always follow PSR-12 coding standards.
Database is MariaDB 10.6.
Use Vietnamese for comments and English for code.
docs:
- title: "WHMCS API Docs"
url: "https://developers.whmcs.com/api-reference/"
- title: "Project Wiki"
url: "https://wiki.internal.your-domain.com/whmcs"
SystemMessage rất hữu ích vì cho phép tinh chỉnh tone và context theo từng project. Team mình thường thêm coding standards và stack info để model trả lời sát với codebase.
15. Monitor backend usage và cost
Theo dõi xem dev nào dùng nhiều, model nào hot, có overload không. Caddy log đã ghi đủ JSON request, parse bằng script Python đơn giản:
import json
from collections import Counter
users = Counter()
models = Counter()
with open('/var/log/caddy/ollama.log') as f:
for line in f:
try:
log = json.loads(line)
user = log.get('user_id', 'unknown')
users[user] += 1
body = log.get('request', {}).get('body', '')
if 'qwen' in body:
models['qwen'] += 1
elif 'deepseek' in body:
models['deepseek'] += 1
except Exception:
pass
print("Top users:", users.most_common(10))
print("Model usage:", models.most_common())
Hoặc dùng Grafana + Loki để monitor realtime, biểu đồ request/giờ, latency p95, model hottest. Setup tham khảo bài Loki + Grafana + Promtail trong cùng cluster blog này.
16. Roadmap nâng cấp khi team tăng trưởng
Lộ trình mình thường đề xuất cho client startup:
- Tháng 0-3 (3 dev): Cloud VPS 80, Ollama + Qwen 7B, chi phí 799k/tháng.
- Tháng 3-6 (5 dev): Cloud VPS 160, Ollama + Qwen 14B, chi phí 1590k/tháng.
- Tháng 6-12 (10 dev): VPS GPU dedicated với RTX 4090, vLLM + DeepSeek-Coder 16B, chi phí 3-5 triệu/tháng.
- Năm 2+ (20+ dev): Multi-node setup với load balancer, model riêng cho chat và autocomplete, dùng vLLM hoặc TGI cluster.
Mỗi giai đoạn pay-back trong 2-3 tháng so với subscription Copilot/Cursor cho cả team. Bonus: dev hài lòng hơn vì không lo data leak, customize được prompt và model theo nhu cầu domain.
VPS chạy Ollama backend cho team dev tự host AI coding
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. Cấu hình 8-16GB RAM đủ chạy Qwen2.5-Coder 7B-14B cho team 3-10 dev, replace Copilot tiết kiệm hàng trăm USD/tháng.
Xem 8 cấu hình Cloud VPS →FAQ
Continue.dev có miễn phí hoàn toàn không?
Extension hoàn toàn miễn phí, license Apache 2.0. Chi phí duy nhất là VPS chạy backend LLM (199k-1590k/tháng tuỳ model). So với Copilot 19 USD/tháng/dev, tiết kiệm rất nhiều nếu team từ 3 người trở lên.
Có chạy được trên VPS không có GPU không?
Chạy được, dùng Ollama hoặc llama.cpp với model quantization Q4/Q5. Tốc độ chậm hơn GPU 5-10 lần nhưng vẫn dùng được cho team nhỏ. Khuyến nghị CPU 8 core trở lên (Cloud VPS 80 hoặc 160). Cho autocomplete realtime, GPU vẫn là lựa chọn tốt nhất.
Codebase index lưu ở đâu, có gửi ra server không?
Index vector store lưu local máy dev tại ~/.continue/index. Chỉ gửi chunk embedding nhỏ tới LLM khi chat. Code source và file gốc không gửi đi đâu nếu bạn dùng LLM self-host. Đây là điểm mạnh của Continue so với Copilot hay Cursor (gửi code lên cloud).
So với Cursor IDE thì Continue có gì kém hơn?
Cursor có "Composer" mode mạnh hơn (multi-file refactor agent), UX mượt hơn vì fork VSCode tích hợp sâu. Continue là extension nên một số tính năng agent phức tạp hạn chế hơn. Bù lại Continue self-host được, mã nguồn mở, không phải đăng ký subscription riêng.
Model nào tốt nhất hiện tại cho VPS 16GB RAM CPU only?
Qwen2.5-Coder 14B quantization Q5_K_M là sweet spot: chất lượng gần Claude Sonnet cho task code, RAM 11GB, tốc độ 5-8 token/s trên CPU 16 core. Cho autocomplete ghost text, dùng kèm Qwen2.5-Coder 1.5B-base làm model phụ cho latency thấp dưới 300ms.

