Mac Mini’mi Yapay Zeka Sunucusuna Çevirdim
Uzun süredir aklımın bir köşesinde duran bir şeyi sonunda hayata geçirdim: Bir kaç ay önce TurkNet’in 1000 mpbs download 1000 mpbs upload hizmetini almaya başladığım gün “ofis bilgisayarı” olarak ofiste tuttuğum M4 Mac Mini’yi sıfırlayıp bir “web server” haline getirmiştim. 30+ irili ufaklı blog ve web sitesini host etmek için gayet iyi olsa da yeni duyduğum CloudPanel’in de gazıyla Hetzner’a bir sunucu daha açıp bu ufak hostingleri oraya geri koydum. CloudPanel kadar sevindiğim diğer husus; bu sitelerin çoğu WP olduğu için hepsini birden yönetecek bir eklenti varmış. Onu da kurup 20 yılda sayısı 30’a yaklaşan blogları tek yerden yönetmeyi anca başarabildim. Sonra Mac Mini’yi yeniden sıfırlayıp yerelde çalışan bir yapay zeka sunucusuna dönüştürdüm.
ChatGPT’ye, Claude’a, Copilot’a her gün girip çıkıyorum. Bunların hepsinin bulutta çalıştığını, verilerimin bir yerlere gittiğini, her sorgunun bir maliyeti olduğunu biliyorum. Bir de şu var: Bazen çok basit, tekrarlayan işler için bile bu servislere bağlanmak zorunda kalıyorum. Hâlbuki evde güçlü bir makine var, neden bunu kullanmayayım? Hem böylece AI mutfağına da girmiş olurum, diye düşündüm. Üstelik işin güzel tarafı bütün süreçleri yapay zeka ile beraber ilerletebiliyoruz artık. Yani “nasıl yaparım?” derdi kalmadı. Yapay zeka sayesinde ensesine kablo takılıp kasetten Kung-Fu öğrenen Neo gibi olduk. Matrix izlemeyenler yorum yazsın.
M4 Mac Mini, Unified Memory mimarisi sayesinde 16GB RAM’i neredeyse VRAM gibi kullanabiliyor. Böylece 7-13 milyar parametreli modeller gayet rahat çalışıyor. Sıfır ek maliyet, sıfır internet bağımlılığı.
“Üç adım” meselesi
İşe Ollama ile başladım. Ollama, büyük dil modellerini kendi bilgisayarında çalıştırmana olanak tanıyan açık kaynaklı bir araç. Homebrew ile tek satırda kuruldu, varsayılan olarak 11434 portunda çalışıyor. Laptop’tan Mac Mini’nin yerel IP’sine gidip denedim, “Ollama is running” yazdı. Buraya kadar her şey güzeldi, içimden “bu iş çok kolay olacak” dedim. Tabii o his genellikle yanlış çıkar.
Sıra web arayüzüne geldi. Terminale bakarak model çalıştırmak bir noktaya kadar eğlenceli ama ChatGPT benzeri bir arayüz olmadan bu kurulumun pek anlamı yok. Open WebUI tam da bu iş için yapılmış, üstelik kullanıcı yönetimi de var, yani arkadaşlarıma da açabilecektim.
Docker ile kurulabilirdi ama performans yiyebilir diye pip yolunu tercih ettim. Mac’teki Python 3.9 çok eskiydi, Open WebUI minimum 3.11 istiyor. Homebrew ile önce Python 3.11’i kurdum, sonra pipx ile Open WebUI’yi. launchd’ye servis olarak ekledim ki Mac her açıldığında otomatik başlasın. Birkaç ufak takla attım ama sonunda çalıştı. Sağolsun bu macerada baştan itbaren Claude ileydik. Bu yazıyı da aslında o kaleme aldı (bütün işi o yaptı, ben detayları onun kadar iyi toparlayamazdım) ama ben de düzenleyip kişisel kısımları ekledim. Yani ben sadece Ollama’yı duymuştum ve Erhan Meydan’ın bir kaç videosunu izlemiştim. Gerisi Claude’da.
Asıl mesele: Dışarıdan erişim
Ev ağım biraz karmaşık bir yapıda. Turknet ve Superonline’ın modemleri bridge modda bir TP-Link ER605 gateway’e bağlı, oradan AP modundaki Deco mesh sistemine, oradan da WiFi üzerinden Mac Mini’ye gidiyor. Dışarıdan gelen trafik Turknet’in sabit IP’sine çarpıyor, oradan ER605’e geçiyor. Teoride port yönlendirme yapıp işi bitirmek gerekiyordu.
Teoride.
ER605’te port yönlendirme kurdum. Olmadı. HTTP portunu değiştirdim, yeniden başlattım. Yine olmadı. Bir noktada curl ile dış IP’yi deneyince karşıma ER605’in kendi login sayfası çıktı. Yani tüm bu süre boyunca port yönlendirmeyle değil, doğrudan router’ın kendi arayüzüyle konuşmuşum. ER605 80. portu kendine alıp bırakmıyordu, Virtual Servers kuralına rağmen.
Bu tür şeyleri çözmenin iki yolu var: Ya saatlerce uğraşmaya devam edersin ya da daha akıllıca bir yol bulursun.
O akıllıca yol Cloudflare Tunnel. Port açmaya gerek yok, port yönlendirmeye gerek yok, hatta statik IP bile şart değil. Mac Mini’ye cloudflared kurdum, Cloudflare hesabıma bağladım, bir tunnel oluşturdum ve yapay zeka işleri için aldığım domaini bu tunnel’a yönlendirdim. Cloudflare kendi SSL sertifikasını da getirdiği için HTTPS de üstüne bedava geldi. (Yazıyı düzenlerken farkettim, statik ip’ye de mi gerek yokmuş! Vaaay).
Şu an ne durumda?
Artık evdeki yapay zeka sunucuma kendi domaini ile her yerden erişebiliyorum ve karşıma Open WebUI’nin giriş ekranı çıkıyor. Arkadaşlarım kayıt olabiliyor ama içeri girebilmek için benim onayım gerekiyor. Onaylananlar Ollama’da çalışan yerel modellere ücretsiz erişebiliyor. Aylık maliyeti sıfır.
Bir sonraki adım model seçimi ve bu sunucunun Laravel projelerime entegrasyonu. Onu da yazarım. (İnşallah de Claude.. İnşallah).