Kendi verilerinizi üçüncü bir şirkete göndermeden çalışan bir yapay zeka asistanı istiyorsanız en pratik yollardan biri, açık kaynak bir modeli kendi sanal sunucunuzda çalıştırmak. Bu yazıda VPS'te Ollama ile yerel LLM çalıştırma sürecini baştan sona anlatıyoruz: kurulum, model seçimi, sunucu ayarları, özel asistan oluşturma, API kullanımı, tarayıcı arayüzü ve güvenli şekilde yayına alma. Model boyutu, RAM ihtiyacı ve CPU/GPU farkı gibi temel konuları yapay zeka sanal sunucuda nasıl çalışır yazımızda anlattığımız için burada doğrudan uygulamaya geçiyoruz.
Neden Kendi Sunucunda Yerel LLM?
- Gizlilik: Sorular, dokümanlar ve cevaplar sunucunuzdan dışarı çıkmıyor.
- Sabit maliyet: Token başına ödeme yok; sunucunun aylık ücreti belli.
- Bağımsızlık: Bir sağlayıcının fiyat, kota veya politika değişikliğinden etkilenmiyorsunuz.
- Özelleştirme: Modeli kendi sistem talimatlarınızla, kendi uygulamanıza göre ayarlayabiliyorsunuz.
Ön Koşullar
Ubuntu 24.04 çalışan bir sanal sunucu, root yetkisi ve seçeceğiniz modele yetecek RAM. 7B–8B bir model için en az 16 GB RAM öneriyoruz; model dosyaları birkaç GB olduğu için NVMe disk de yükleme süresini ciddi şekilde kısaltıyor.
1. Ollama'yı Kurun
Resmi kurulum betiği Ollama'yı kurup otomatik başlayan bir systemd servisi olarak ayarlıyor:
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama # servis çalışıyor mu?
ollama --version
2. Doğru Modeli Seçin
Ollama'nın model kütüphanesinde yüzlerce model var. Aşağıdaki tablo başlangıç için örnek seçenekler; model aileleri hızla yenilendiği için güncel listeyi ve sürümleri ollama.com/library adresinden kontrol edin.
| İhtiyaç | Örnek model etiketi | Yaklaşık RAM (Q4) | Not |
|---|---|---|---|
| Hafif sohbet, sınıflandırma | llama3.2:3b | ~3 GB | Küçük paketlerde bile hızlı |
| Genel amaçlı asistan | qwen2.5:7b, mistral:7b | ~5–6 GB | Kalite/hız dengesi iyi, çok dilli |
| Daha tutarlı cevaplar | gemma2:9b | ~6–7 GB | Biraz daha yavaş, daha başarılı |
| Kod yardımı | qwen2.5-coder:7b | ~5 GB | Kod tamamlama ve açıklama |
| Doküman arama (embedding) | nomic-embed-text | <1 GB | RAG için metni vektöre çevirir, CPU'da hızlı |
Quantization Etiketleri Ne Demek?
Model adının sonundaki etiketler sıkıştırma seviyesini gösteriyor. Etiket belirtmezseniz Ollama genelde 4-bit bir sürüm indiriyor.
| Etiket | Boyut | Kalite | Ne zaman? |
|---|---|---|---|
q4_K_M | En küçük (pratik) | Çoğu iş için yeterli | CPU'lu sunucular için varsayılan seçim |
q5_K_M | Biraz daha büyük | Daha iyi | RAM'iniz biraz fazlaysa |
q8_0 | Yaklaşık iki kat | Orijinale çok yakın | Kalitenin kritik olduğu, RAM'in bol olduğu durumlar |
fp16 | En büyük | Orijinal | Genelde GPU'lu sistemler için |
Modelleri indirip deneyelim:
ollama pull qwen2.5:7b
ollama pull nomic-embed-text
ollama list # indirilen modeller
ollama run qwen2.5:7b "Merhaba, kendini kısaca tanıt."
ollama ps # bellekte yüklü modeller
3. Sunucu Ayarlarını Yapın
Ollama'nın davranışını ortam değişkenleriyle ayarlıyoruz. Servis dosyasını doğrudan değiştirmek yerine bir "override" dosyası kullanmak, güncellemelerde ayarlarınızın kaybolmamasını sağlar:
sudo systemctl edit ollama
# açılan dosyaya şunları ekleyip kaydedin:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_NUM_PARALLEL=2"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
# sonra servisi yeniden başlatın:
sudo systemctl daemon-reload
sudo systemctl restart ollama
| Değişken | Ne işe yarar? | Öneri |
|---|---|---|
OLLAMA_HOST | Ollama'nın dinleyeceği adres ve port | 127.0.0.1:11434 bırakın; asla doğrudan internete açmayın |
OLLAMA_KEEP_ALIVE | Kullanılmayan modelin bellekte ne kadar kalacağı | Sık kullanılıyorsa uzun tutun (ör. 30m), ilk yanıt gecikmesi azalır |
OLLAMA_NUM_PARALLEL | Aynı anda işlenecek istek sayısı | CPU'da 1–2; arttırmak her isteği yavaşlatır |
OLLAMA_MAX_LOADED_MODELS | Bellekte aynı anda tutulacak model sayısı | RAM sınırlıysa 1 |
OLLAMA_MODELS | Model dosyalarının saklanacağı dizin | Disk ayrı bir bölümdeyse oraya yönlendirin |
4. Modelfile ile Kendi Asistanınızı Oluşturun
Modelfile, bir modeli kendi sistem talimatınız ve ayarlarınızla paketlemenizi sağlıyor. Böylece her istekte aynı talimatı göndermenize gerek kalmıyor. Proje klasöründe Modelfile adında bir dosya oluşturun:
FROM qwen2.5:7b
PARAMETER temperature 0.3
PARAMETER num_ctx 4096
SYSTEM """
Sen bir şirketin destek asistanısın. Kısa, net ve Türkçe cevap ver. Bilmediğin konularda tahmin yürütme.
"""
ollama create destek-asistani -f Modelfile
ollama run destek-asistani
num_ctx modelin aynı anda "hatırlayabildiği" metin uzunluğunu belirler. Büyüttükçe daha uzun dokümanları işleyebilir ama RAM kullanımı ve yavaşlama da artar; CPU'lu sunucularda 4096 iyi bir başlangıç.
5. Uygulamanızdan API ile Kullanın
Ollama yerel bir HTTP API sunuyor. Kendi API'si ile:
curl http://127.0.0.1:11434/api/chat -d '{
"model": "destek-asistani",
"messages": [{"role": "user", "content": "NVMe disk nedir?"}],
"stream": false
}'
Daha da pratik olanı: Ollama OpenAI uyumlu bir uç nokta da sunuyor. Yani OpenAI kütüphanesiyle yazılmış bir uygulamayı sadece adres değiştirerek kendi sunucunuza bağlayabiliyorsunuz:
pip install openai
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama")
yanit = client.chat.completions.create(
model="destek-asistani",
messages=[{"role": "user", "content": "Sanal sunucu nedir?"}],
)
print(yanit.choices[0].message.content)
API kavramına yabancıysanız API nedir yazımız iyi bir başlangıç olur.
6. Open WebUI ile Tarayıcıdan Kullanın
Ekipteki herkesin terminale girmesine gerek yok. Open WebUI, Ollama'ya bağlanan ve ChatGPT benzeri bir arayüz sunan açık kaynak bir uygulama. Docker ile tek komutla çalıştırabilirsiniz:
docker run -d --network=host \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:main
--network=host sayesinde Open WebUI, sadece sunucunun içinden erişilebilen Ollama'ya (127.0.0.1) bağlanabiliyor ve 8080 portunda çalışıyor. İlk açılışta oluşturduğunuz hesap yönetici hesabı oluyor; diğer kullanıcıları buradan yönetebiliyorsunuz. Docker'a yeniyseniz Docker nedir yazımıza göz atın.
7. Güvenli Şekilde Yayına Alın
Open WebUI'yi alan adınızla, HTTPS üzerinden ve sadece gerekli portları açarak yayınlayalım. Önce /etc/nginx/sites-available/ai dosyasını oluşturup etkinleştirin:
server {
listen 80;
server_name ai.ornek.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
Ardından ücretsiz SSL sertifikasını alıp güvenlik duvarını ayarlayın:
sudo apt install -y nginx certbot python3-certbot-nginx
sudo certbot --nginx -d ai.ornek.com
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable # 11434 ve 8080 portlarını açmıyoruz
Bu yapıda dışarıdan sadece 22, 80 ve 443 portları açık; Ollama (11434) ve Open WebUI (8080) yalnızca Nginx üzerinden, şifreli bağlantıyla erişilebilir oluyor.
Ollama API'sini başka bir sunucudaki uygulamanıza açmanız gerekiyorsa, en azından kullanıcı adı/şifre koruması ekleyin:
sudo apt install -y apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd apiuser
# Nginx server bloğunun içine:
location /ollama/ {
auth_basic "Ollama API";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:11434/;
}
CPU'da Ne Kadar Hız Beklemeli?
| Model boyutu (Q4) | Kabaca hız (token/sn) | Hissiyat |
|---|---|---|
| 1B–3B | ~8–20 | Akıcı, sohbet için rahat |
| 7B–8B | ~3–10 | Okuma hızına yakın, iç asistan için yeterli |
| 13B–14B | ~1–5 | Yavaş; kısa cevaplı işler için kullanılabilir |
Değerler işlemciye, çekirdek sayısına, bağlam uzunluğuna ve aynı anda gelen istek sayısına göre değişir. Performans için birkaç ipucu:
- İşe yetecek en küçük modeli seçin; sınıflandırma ve özetleme gibi işlerde 3B modeller çoğu zaman yeterli.
num_ctx'i abartmayın; uzun bağlam hem RAM'i hem hızı olumsuz etkiler.- Modeli bellekte tutun;
OLLAMA_KEEP_ALIVEile her istekte yeniden yükleme yapılmasını önleyin. - Swap'a düşmeyin; model RAM'e sığmayıp diske taşarsa hız dramatik şekilde düşer.
Sık Karşılaşılan Sorunlar
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Cevaplar çok yavaş | Model veya quant seviyesi sunucuya göre büyük | Daha küçük model ya da q4_K_M deneyin |
| Model yüklenmiyor, bellek hatası | RAM yetersiz | Daha küçük model, OLLAMA_MAX_LOADED_MODELS=1, yada daha büyük paket |
connection refused | Servis çalışmıyor veya farklı adreste dinliyor | systemctl status ollama ve OLLAMA_HOST ayarını kontrol edin |
| Open WebUI model listesini göremiyor | Ollama adresi yanlış | OLLAMA_BASE_URL ve --network=host ayarını kontrol edin |
| İlk cevap çok geç geliyor | Model her seferinde yeniden yükleniyor | OLLAMA_KEEP_ALIVE süresini artırın |
Hangi VECDC Paketi?
3B modeller ve embedding için VPS-2, 7B–8B modellerle rahat çalışmak için VPS-3 (16 GB) veya VPS-4 (24 GB), birden fazla modeli birlikte kullanacaksanız VPS-5 (32 GB) iyi bir başlangıç. VECDC sanal sunucuları NVMe disk ve adanmış CPU ile aylık $6'dan başlıyor, otomatik kurulumla yaklaşık 5 dakikada hazır oluyor. Open WebUI için Docker kurulu gelen Developer VDS işinizi kolaylaştırır. Yerel modelinizi CRM, destek sistemi gibi mevcut uygulamalarınıza entegre etmek isterseniz AI servisimiz ile destek veriyoruz.
Sık Sorulan Sorular
Ollama GPU olmadan çalışır mı?
Evet. Ollama, GPU yoksa modeli işlemci (CPU) üzerinde çalıştırır. 1B–8B arası sıkıştırılmış modeller CPU'lu bir sanal sunucuda iç asistan, özetleme ve doküman arama gibi işler için yeterli hızda çalışır; büyük modeller ve çok kullanıcılı senaryolar için GPU gerekir.
VPS'te hangi modeli kullanmalıyım?
İşe yetecek en küçük modelle başlayın. Basit sohbet ve sınıflandırma için 3B, genel amaçlı bir asistan için 7B–8B modeller iyi bir denge sunar; doküman araması için ayrıca küçük bir embedding modeli kullanılır. Model aileleri hızla yenilendiği için güncel listeyi Ollama kütüphanesinden kontrol edin.
Yerel LLM kullanınca verilerim dışarı çıkar mı?
Model kendi sunucunuzda çalıştığı için sorular, dokümanlar ve cevaplar üçüncü bir sağlayıcıya gönderilmez. Bunun için Ollama'nın API portunu internete açmamak ve arayüzü HTTPS ile, kimlik doğrulamalı şekilde yayınlamak gerekir.
Aynı anda kaç kişi kullanabilir?
CPU'lu bir sunucuda birkaç kişilik bir ekip için yeterlidir, ancak istekler arttıkça cevaplar yavaşlar. OLLAMA_NUM_PARALLEL değeriyle eşzamanlı istek sayısını ayarlayabilirsiniz; çok sayıda kullanıcı için GPU'lu bir altyapı önerilir.
Kısacası
Ollama ile bir VPS'te yerel LLM çalıştırmak birkaç komutluk iş: kur, model indir, ayarları yap, Modelfile ile kendi asistanını oluştur, Open WebUI ile arayüz ekle ve Nginx + SSL ile güvenle yayına al. Doğru model boyutunu seçtiğinizde GPU'suz bir sunucuda bile verileriniz dışarı çıkmadan çalışan, işe yarar bir asistanınız oluyor. Kurulumda takıldığınız birşey olursa bize yazın.