SSD Nodes Learn
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-07-24

Ollama VPS kurulumu ve güvenli kullanım

7B modeller için 8 GB RAM gereklidir. CPU ile 4-10 token/sn hız alınır. 127.0.0.1:11434 portunu dış dünyaya açmadan güvenli kurulum yapın.

Ne inşa ediyorsunuz

Sahip olduğunuz bir sunucuda çalışan, HTTP API üzerinden yanıt veren ve isteğe bağlı olarak tarayıcıda bir sohbet sayfası sunan tek bir açık ağırlıklı (open-weight) dil modeli. Ollama; modeli indiren, belleğe yükleyen ve http://127.0.0.1:11434 üzerinden istekleri sunan bileşendir. Kurulum tek bir komuttan ibarettir. Bu süreçteki zorlu kısımlar başka alanlarda yer alır: VPS cihazınızın RAM kapasitesine uygun bir model seçmek ve kimlik doğrulaması olmayan bir çıkarım sunucusunu yanlışlıkla tüm internete açmamak.

Öncelikle iki önemli uyarı. Sadece CPU kullanan bir VPS, küçük modelleri yavaş çalıştırır ve API üzerinde yerleşik bir kimlik doğrulama bulunmaz. Her iki konu da aşağıda ayrıntılı olarak ele alınmaktadır; çünkü hatalar genellikle bu noktalarda yapılmaktadır.

Boyutlandırma gerçekleri, yalın rakamlarla

Bir modelin bellek kullanımı kabaca dosya boyutu, yaklaşık bir gigabayt çalışma zamanı yükü ve bağlam penceresi için gereken ek miktardan oluşur. Ollama'nın varsayılan modelleri 4-bit kuantize edilmiştir (Q4 olarak etiketlenir); bu durum her bir milyar parametre için yaklaşık yarım gigabayt RAM gerektirir. Hesaplama basittir ve her şeyi bu belirler.

llama3.2:3b gibi bir 3B model, ~2 GB indirme boyutu gerektirir ve çalışmak için yaklaşık 4 GB boş RAM ister. mistral:7b veya llama3.1:8b gibi bir 7B veya 8B model, diskte ~5 GB yer kaplar ve yaklaşık 8 GB RAM ister; rahat bir kullanım için 16 GB gereklidir. 13B veya 14B bir model kabaca 16 GB ister. 30B ile 70B aralığındaki her şey yüksek RAM kapasiteli bir sistem veya gerçekçi olarak bir GPU gerektirir; CPU tabanlı bir VPS üzerinde model ya sığmayacaktır ya da kullanılamayacak kadar yavaş yanıt verecektir.

Hız konusuna değinilmelidir, çünkü bu kısım genellikle hafife alınır. CPU çıkarımı (inference), saat hızından ziyade bellek bant genişliğine bağlıdır ve paylaşımlı bir vCPU VPS mütevazı bir bant genişliğine sahiptir. Saniyede tek haneli veya düşük çift haneli token değerleri beklenmelidir: bir 7-8B Q4 modeli saniyede 4 ila 10 token, bir 3B model ise 10 ila 25 token üretebilir. Bir GPU, kabaca bir mertebe daha hızlıdır. Bu rakamlar kasıtlı olarak kaba tahminlerdir; en doğru yöntem kendi sisteminizi ölçmektir; aşağıdaki çalıştırma adımı bunun nasıl yapılacağını göstermektedir. Herhangi bir makaletteki sayıya değil, kendi eval rate değerinize güvenin.

Pratik sonuç: Eğer hızı kabul edebiliyorsanız, CPU üzerindeki küçük kuantize modeller taslak oluşturma, özetleme ve sınıflandırma için gerçekten kullanışlıdır. Daha büyük veya daha hızlı bir işlem için bir GPU örneği (instance) için bütçe ayırın.

Belirli bir modeli belirli bir sistemle kıyaslamak için bellek kullanımını buradan tahmin edin:

ToolLLM VRAM and model-size calculator

Ollama Kurulumu

İki temiz yöntem bulunmaktadır. Boş bir VPS üzerinde resmi script en basit yöntemdir:

curl -fsSL https://ollama.com/install.sh | sh

Bu işlem ollama adında bir sistem kullanıcısı oluşturur, binary dosyasını /usr/local/bin/ollama dizinine yükler ve açılışta çalışan ve 127.0.0.1:11434 portuna bağlanan ollama.service adlı bir systemd servisi kaydeder. Çalıştığını şu komutla doğrulayın:

systemctl status ollama
ollama --version

Eğer halihazırda Docker kullanıyorsanız, konteyner yöntemini kullanın:

docker run -d --name ollama \
  -p 127.0.0.1:11434:11434 \
  -v ollama:/root/.ollama \
  --restart always \
  ollama/ollama

Port eşlemesindeki 127.0.0.1: önekine dikkat edin. Bu, portu yalnızca localhost'a bağlar. -p 11434:11434 kullanımı ise portu tüm arayüzlerde yayınlar; güvenlik bölümünde uyarılan hata budur. Tek bir kurulum yöntemi seçin; script ve konteyner'ı aynı anda çalıştırmayın, aksi takdirde iki süreç port için çakışacaktır.

İlk modelinizi çekin ve çalıştırın

ollama pull llama3.2:3b
ollama run llama3.2:3b

pull model katmanlarını diske indirir (bu model için yaklaşık 2 GB). run bu katmanları belleğe yükler ve sizi bir >>> istemine yönlendirir. Bir soru yazın. Ağırlıklar diskten RAM'e yüklenirken ilk token birkaç saniye sürebilir, ardından yanıt akmaya başlar. Sohbetten ayrılmak için /bye yazın; Ollama arka planda çalışmaya devam eder.

Yüklenenleri ve nasıl yerleştiğini inceleyin:

ollama ps

PROCESSOR sütunu gerçek durumu gösterir. 100% CPU herhangi bir GPU kullanılmadığı anlamına gelir; yavaşlığın sebebi budur. Gerçek hızı verbose flag ile ölçün:

ollama run --verbose llama3.2:3b "Write two sentences about Linux."

Sonunda yazdırılan eval rate satırı, bu donanım üzerindeki saniye başına token sayınızdır. Planlamalarınızı bu sayıya göre yapın.

Modellerin bulunduğu yer ve satın alınması gereken disk miktarı

Script tarafından yüklenen ve servis olarak çalıştırılan modeller, ollama kullanıcısının home dizininde bulunur:

sudo du -sh /usr/share/ollama/.ollama/models

Kendi kullanıcınızla interaktif olarak çalıştırıldığında modeller ~/.ollama/models dizininde tutulur. Konteyner içerisinde ise ollama adlı volume içinde yer alırlar. Quantized ağırlıklar hızlıca yer kapladığı için bu durum önemlidir: 3B bir model ~2 GB, 7-8B bir model ~5 GB, 14B bir model ise ~9 GB yer kaplar. Karşılaştırma yapmak için dört model çekerseniz, fark etmeden 20 GB alan harcamış olursunuz. Diski, saklamayı planladığınız modellerin boyutuna göre belirleyin ve geri kalanları ollama rm <model> ile silin.

Kontrol edebileceğiniz bir servis olarak çalıştırın

Yükleme betiği ollama.service birimini zaten kaydetti, bu nedenle ek bir işlem yapmaya gerek kalmadan sistem açılışında yeniden başlatılır. Değiştirilmesi gereken ayar, bir modelin ne kadar süre bellekte kalacağıdır; bazı kurulumlarda bind address ayarı da buna dahildir. Her iki ayar da Ollama güncellemesi sırasında üzerine yazılmaması için bir systemd drop-in dosyasına eklenmelidir:

sudo systemctl edit ollama.service

Düzenleyici tarafından gösterilen [Service] başlığı altına şunları ekleyin:

[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"

OLLAMA_KEEP_ALIVE, son istekten sonra bir modelin bellekte ne kadar süre kalacağını belirler (varsayılan 5 dakikadır). Her seferinde ağırlıkların yeniden yüklenmesini önlemek için gün boyu sorgu gönderilen bir sistemde bu süreyi artırın; RAM kullanımını azaltmak için ise kısıtlı kaynaklı bir sistemde bu değeri 0 olarak ayarlayın. systemctl edit birim dosyalarını sizin için yeniden yükler, bu nedenle değişikliği uygulamak için sistemi yeniden başlatın:

sudo systemctl restart ollama

En önemli güvenlik noktası

Varsayılan olarak Ollama 127.0.0.1:11434 adresine bağlanır, bu nedenle yalnızca VPS üzerindeki süreçler ona erişebilir. Bu varsayılan ayar doğrudur. Değiştirmeyin.

API'nin kimlik doğrulaması yoktur. Hiçbir şekilde yoktur. API anahtarı, giriş işlemi, hız sınırı veya izin listesi bulunmamaktadır. Port 11434'e erişebilen herkes, indirdiğiniz tüm modelleri çalıştırabilir, yeni modeller indirebilir, mevcut olanları silebilir ve CPU veya GPU kullanımınızı süresiz olarak tam yükte tutabilir. Shodan gibi tarayıcılar açık Ollama örneklerini binlerce adet olarak indeksler; açık bir örnek saatler içinde bulunur ve kötüye kullanılır.

Bu nedenle, asla yapılmaması gereken tek hata şudur: OLLAMA_HOST=0.0.0.0 ayarını yapmayın ve güvenlik duvarınızda 11434 portunu açmayın. Bu işlem, kimlik doğrulaması olmayan bir çıkarım sunucusunu tüm internete açar. Hiçbir yapılandırma, 0.0.0.0 üzerindeki ham 11434 portunu güvenli hale getirmez; çünkü Ollama'da yapılandırılacak bir şey yoktur — kimlik doğrulama özelliği mevcut değildir.

Modele makine dışından erişmek için üç güvenli yöntem vardır:

  • Yerel tutun. Eğer tek çağırıcı aynı VPS üzerindeki başka bir program ise — bir cron betiği, bir bot veya araçlarınızı modele bağlayan bir MCP sunucusu — bağlamayı 127.0.0.1 adresinde bırakın ve o programın http://127.0.0.1:11434 adresini çağırmasını sağlayın. Hiçbir şey dışarıya açılmaz ve başka bir şeye gerek duyulmaz.
  • Özel bir tünel üzerinden erişin. VPS'i kendiniz barındırdığınız bir WireGuard VPN ağına dahil edin, OLLAMA_HOST ayarını tünel adresi olarak (örneğin 10.8.0.1, 0.0.0.0 değil) ayarlayın; böylece yalnızca VPN eşleri bağlanabilir. Genel internet 11434 portunda hala hiçbir şey görmez.
  • Önüne kimlik doğrulama yapan bir ters proxy (reverse proxy) yerleştirin. TLS bağlantısını sonlandırın ve nginx, Traefik veya Caddy üzerinde bir şifre veya token gerekliliği getirin, ardından 127.0.0.1:11434 adresine yönlendirin. Ollama localhost bağlamasını korur; proxy, genel portu dinleyen tek unsurdur. Bu, herhangi bir yerel servisin önüne nginx üzerine bir Let's Encrypt sertifikası yerleştirmekle aynı mantıktır.

Ters proxy seçeneği, bir sonraki adımda gerçek bir giriş işlemiyle birlikte size sunulan sohbet arayüzünün (chat UI) sağladığı yapının aynısıdır.

Open WebUI ile TLS arkasında bir sohbet arayüzü ekleyin

Open WebUI, kendi sunucunuzda barındırabileceğiniz bir sohbet arayüzüdür. Docker üzerinde çalıştırın ve yerel Ollama adresine yönlendirin:

docker run -d \
  --name open-webui \
  --network=host \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  -v open-webui:/app/backend/data \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Linux VPS üzerinde --network=host flag'i kritik öneme sahiptir. Bu flag, konteyneri host'un network namespace'ine dahil eder; böylece konteyner içindeki 127.0.0.1, host'un kendi loopback adresidir ve konteyner, Ollama başka bir arayüzü dinlemediği halde 127.0.0.1:11434 üzerinden Ollama'ya ulaşır. Başka yerlerde görebileceğiniz bridge-network yöntemi — --add-host=host.docker.internal:host-gateway ile OLLAMA_BASE_URL=http://host.docker.internal:11434 — burada çalışmaz: bu isim Docker bridge gateway adresine çözümlenir ve host üzerinde 127.0.0.1 adresine bağlı bir servise bridge üzerinden ulaşılamaz; bu nedenle Open WebUI, Ollama'ya bağlanamadığını belirten bir hata verir.

Host networking kullanımının dezavantajı, Open WebUI'ın artık her arayüzde host'un 8080 portunu dinlemesidir; tüm -p eşleştirmeleri geçersiz sayılır ve Docker bu durumu belirten bir uyarı verir. Bu yüzden, hem host hem de sağlayıcı firewall üzerinde 8080 portunu kapatın ve TLS reverse proxy'nin tek halka açık kapı olmasını sağlayın. İlk ziyarette Open WebUI sizden bir admin hesabı oluşturmanızı ister; bu hesap kimlik doğrulama katmanınızdır, bu yüzden güçlü bir şifre seçin.

Sohbet arayüzüne dizüstü bilgisayarınızdan HTTPS üzerinden erişmek için 127.0.0.1:8080 önüne bir TLS reverse proxy yerleştirin. Eğer sunucuda halihazırda birkaç Docker uygulaması yönlendiriyorsanız, birden fazla uygulama için otomatik TLS sağlayan Traefik en temiz çözümdür: tek bir label bloğu sertifikayı oluşturur ve chat.example.com trafiğini Open WebUI'a yönlendirir. Güvenlik bölümündeki kural geçerliliğini korur: proxy, halka açık portu ve girişi yönetirken; Ollama localhost üzerinde kalır ve Open WebUI'ın kendi 8080 adresi firewall arkasında tutulur.

OpenAI uyumlu uç noktayı kodunuzdan kullanın

Ollama, /v1 adresinde OpenAI chat API'sinin bir alt kümesini kullanır. Bu nedenle, base URL ve geçici bir anahtar değiştirildikten sonra çoğu OpenAI istemci kütüphanesi çalışır.

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama")

resp = client.chat.completions.create(
    model="llama3.2:3b",
    messages=[{"role": "user", "content": "Name three Linux distributions."}],
)
print(resp.choices[0].message.content)

api_key istemci kütüphanesi tarafından gereklidir ancak Ollama tarafından yok sayılır; bu yüzden herhangi bir metin kullanılabilir. model daha önce çekilmiş bir model adı olmalıdır; bilinmeyen bir isim model "x" not found, try pulling it first hatası döndürür. Standart bir curl çağrısı da aynı mantıkla çalışır:

curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"llama3.2:3b","messages":[{"role":"user","content":"Hello"}]}'

Modelin ajan ve editör araçlarına bağlanması da bu şekilde sağlanır. Eğer yerel makinede geliştirme yapıyorsanız, yerel bir model tmux içindeki VPS üzerinde çalışan Claude Code ile birlikte script ve eklentileri destekleyebilir. Bu yöntem, düşük maliyetli taslak çalışmalarını ücretli bir API dışında tutarken, yoğun muhakeme gerektiren işlerin barındırılan bir modelde kalmasını sağlar.

Hata modları, göreceğiniz tam metinler

İşlem oluşturma sırasında "Killed" hatası verir. Büyük bir model başlatırsınız ve terminal Killed çıktısını verir veya sunucu günlüğü llama runner process has terminated: signal: killed hatasını gösterir. Linux OOM killer, modelin sistemdeki mevcut RAM miktarından daha fazla belleğe ihtiyaç duyması nedeniyle işlemi durdurmuştur. Nedeni sudo dmesg | grep -i oom komutu ile doğrulayabilirsiniz; burada Out of memory: Killed process ... (ollama) şeklinde bir satır göreceksiniz. Çözüm, daha küçük veya daha yoğun kuantize edilmiş bir model kullanmaktır — 13B yerine llama3.2:3b kullanmak gibi — veya swap alanı eklemektir; böylece fiziksel RAM miktarını az miktarda aşan yükler, çökmek yerine yavaş da olsa tamamlanır. Swap, anlık çökmeyi yavaş bir yanıta dönüştürür; ancak 4 GB bellekte 70B bir modeli kullanışlı hale getirmez.

"Error: model requires more system memory". Ollama modeli başlatmayı reddeder ve Error: model requires more system memory (X GiB) than is available (Y GiB) çıktısını verir. Bu, yukarıdaki çökmenin daha nazik bir versiyonudur: Ollama hesaplamayı yapmış ve OOM killer'ın işlemi durdurmasına izin vermek yerine kendisi durdurmuştur. Hatta size iki sayısal değer sunar. Gereksinimi boş RAM miktarınızdan az olan bir model seçin (free -h ile kontrol edin), bağlam uzunluğunu (context length) kısaltın veya daha büyük bir VPS'e geçin. Hiçbir flag modelin sığmasını sağlamaz; bellek ihtiyacı gerçektir.

İlk token çok uzun sürer, ardından her şey normale döner. Soğuk bir model beş ile otuz saniye boyunca hiçbir çıktı vermez, ardından normal şekilde akış (stream) sağlar. Bu duraksama, ağırlıkların (weights) diskten RAM'e ilk kez yüklenmesinden kaynaklanır ve yavaş depolama birimleri bu durumu kötüleştirir. Yüklendikten sonra model OLLAMA_KEEP_ALIVE süresi boyunca bellekte kalır, bu nedenle ikinci istem (prompt) anında yanıtlanır. Eğer bu boşluklar rahatsız ediciyse bu değeri artırın ve bir modelin şu an yüklü olup olmadığını görmek için ollama ps komutunu kullanın.

Her şey sadece yavaştır. Hiçbir hata olmaksızın saniyede on token veya daha az hız. Bu, CPU çıkarımının (inference) doğal çalışma şeklidir. ollama ps çıktısı 100% CPU gösteriyorsa, GPU bulunmuyor demektir. Bu bir hata değildir ve hiçbir ayar bunu düzeltemez; çünkü limit bir yanlış yapılandırma değil, bellek bant genişliğidir. Daha küçük bir model kullanın, hızı kabul edin veya bir GPU örneğine geçin; herhangi bir şeyin bozuk olduğuna karar vermeden önce gerçek hızınızı --verbose ile ölçün.

Başka bir makineden bağlantı reddedildi (Connection refused). Dizüstü bilgisayarınızdan curl: (7) Failed to connect to <ip> port 11434: Connection refused hatası alırsınız. Bu sistemin tasarlandığı şekilde çalışmasıdır: Ollama yalnızca localhost'a bağlanır. 0.0.0.0 adresine bağlayarak bunu "düzeltmeye" çalışmayın; bu, yukarıda belirtilen maruziyet hatasının tam kendisidir. Modele bunun yerine VPN veya kimlik doğrulama yapan bir proxy üzerinden erişin.

11434 portunu internete açtınız. Eğer OLLAMA_HOST=0.0.0.0 ayarını yaptıysanız, güvenlik duvarını (firewall) açtıysanız ve şimdi başlatmadığınız model çekme (pull) işlemlerini veya CPU'nun bilinmeyen istemciler tarafından %100 kullanıldığını görüyorsanız, tespit edildiniz ve kullanıldınız. Bu uç bir durum değil, temel bir hatadır. 127.0.0.1 adresine veya VPN adresine yeniden bağlayın, güvenlik duvarında 11434 portunu kapatın ve önüne kimlik doğrulama katmanı ekleyin. Port açık olduğu süre boyunca o adrese erişilebilen her şeyin yabancılar tarafından sorgulandığını varsayın.

Backups and upgrades

Kaybedilecek veri miktarı azdır. Modeller tekrar indirilebilir; bu nedenle yedeklenmesi gereken tek şeyler Open WebUI veri hacmi (hesaplar, sohbet geçmişi, ayarlar) ve yazılmış olan systemd drop-in dosyalarıdır. Hacmi geçici bir container kullanarak yedekleyin:

docker run --rm -v open-webui:/data -v "$PWD":/backup alpine \
  tar czf /backup/open-webui.tgz -C /data .

Ollama'yı kurulum scriptini tekrar çalıştırarak güncelleyin; Open WebUI'ı docker pull ghcr.io/open-webui/open-webui:main komutuyla ve ardından container'ı yeniden oluşturarak güncelleyin. Hiçbir bileşeni uzun vadeli olarak sabitlemeyin: hem model kalitesi hem de çalışma zamanı hızlı değişmektedir; bu nedenle geçen çeyreğin verilerine güvenmek yerine sürüm notlarını okuyun ve kendi sisteminizde yeniden performans testi yapın.

FAQ

Sadece CPU içeren bir VPS üzerinde LLM çalıştırabilir miyim?

Evet, belirli sınırlar dahilinde. 3B ile 8B aralığındaki küçük kuantize edilmiş modeller CPU üzerinde çalışabilir. Taslak oluşturma, özetleme ve sınıflandırma işlemleri için kullanışlıdırlar; ancak paylaşımlı bir vCPU üzerinde saniyede tek haneli veya düşük çift haneli token hızında yavaş çalışırlar. 13B ve üzeri modeller çok yavaştır veya RAM kapasitesine sığmaz. Yüksek hız veya daha büyük modeller için GPU instance gereklidir.

Her model ne kadar RAM'e ihtiyaç duyar?

Varsayılan 4-bit kuantize modeller için kaba bir kural: ağırlıklar için milyar parametre başına yaklaşık 0.5 GB RAM, üzerine yaklaşık 1 GB ek yük ve bağlam (context) için biraz daha fazla alan gerekir. Bu durumda 3B bir model yaklaşık 4 GB boş alana, 7-8B bir model yaklaşık 8 GB alana ve 14B bir model yaklaşık 16 GB alana ihtiyaç duyar. free -h ile boş alanınızı kontrol edin; işletim sistemi ve diğer servislar için pay bırakın.

Ollama API kimlik doğrulaması gerektiriyor mu?

Hayır. Ollama'nın yerleşik bir kimlik doğrulaması, API anahtarı veya hız sınırı yoktur; 11434 portuna erişebilen herkes tam kontrole sahiptir. Bu nedenle varsayılan olarak 127.0.0.1 adresine bağlanır ve 11434 portunu 0.0.0.0 üzerinden internete asla açmamalısınız. Erişimi yerel olarak, özel bir VPN üzerinden veya giriş işlemi ekleyen bir reverse proxy aracılığıyla sağlayın.

Web sohbet arayüzü nasıl eklenir?

Open WebUI'ı, host'un loopback adresini paylaşması ve yerel Ollama'ya http://127.0.0.1:11434 üzerinden erişebilmesi için --network=host ile Docker üzerinde çalıştırın. Dizüstü bilgisayarınızdan erişim sağlamak için port 8080 önüne bir TLS reverse proxy yerleştirin. Proxy'nin tek halka açık kapı olması için 8080 portunu güvenlik duvarında kapalı tutun. Open WebUI'ın kendi admin hesabı giriş imkanı sağlar; şifreyi ilk çalıştırmada belirlersiniz.

Kendi uygulamamdan nasıl çağırabilirim?

http://127.0.0.1:11434/v1 adresindeki OpenAI uyumlu endpoint'i kullanın. Herhangi bir OpenAI SDK'sını bu temel URL'ye yönlendirin, API anahtarı olarak herhangi bir metin girin (çünkü bu değer yok sayılır) ve model değerini indirdiğiniz model ismi olarak ayarlayın. Mevcut OpenAI kodları, temel URL ve anahtar dışında genellikle değiştirilmeden çalışır.