Site logo
Ev geliştirme ortamım, homelab

Ev geliştirme ortamım, homelab

Ideal bir geliştirme ortamı var mı, yok mu tartışabiliriz ama ben bu sorunun cevabını aramaktan vazgeçeli çok oldu. Artık bu konudaki hedefim en esnek geliştirme ortamı.

İşletim Sistemi Seçimi

Yılların geyiği. Herkesin rahat ettiği, alışkanlıklarına hitap eden bir işletim sistemi olabilir elbette. Geçmişte Linux ve macOS, birçok geliştirme aracını default olarak sunarken, Windows bu konuda geride kalabiliyordu fakat bir şekilde bu küçük zorlukların üstesinden gelebiliyorduk elbette.

WSL’in hayatımıza girişinden sonra, Windows üzerinde host ettiğimiz küçük Linux dağıtımları ile artık gerçekten bu OS’ler arasında bir seçim yapmamız da gerekmiyor.

Linux, macOS, Windows… Ne seçersek seçelim, doğru tercih fakat ideal değil. Linux’u birincil işletim sistemimiz seçmişken bir Windows uygulaması geliştirmemiz gerekiyorsa?

Elbette her zaman dual boot var, ya da diğer çözümler…

Standart Dışı Bir Yaklaşım

OS seçiminde polygamous bir yaklaşım izleyip, “D Hepsi” diyebiliriz. Hepimiz hayatımızın bir bölümünde tip-2 sanal makinelere denk gelmişizdir. Örneğin bir Windows üzerinde sanal makina yaratıp Linux çalıştırabiliriz. WSL de böyle. Hypervisor ile yaratılmış sanal bir Linux.

Öte yandan tip-1 sanal makineler bunun tam tersi. Yani bir OS üzerinde sanal makina çalıştırmaktansa, sanal makina üzerinde OS’ler çalıştırıyoruz.

Fark ettiysen çoğul konuştum… Windows, Linux, macOS, her makinayı bu tip-1 sanal makina üzerinde çalıştırabilirsin.

Proxmox Sanal Makina

Proxmox yukarıda bahsettiğim bir tip-1 sanal makina işletim sistemi. Debian ve KVM gibi platformlar üzerine kurulmuş bu işletim sistemi ile kaynakların kadar sanal makina ve container yaratabilirsin.

Evimde sürekli açık olan bilgisayar kasama bu işletim sistemini kurup, homelab dünyasına gireli uzun zaman oldu. Sana da tavsiye ederim. Şu sebepler yüzünden;

Profesyonel Getiriler

  • İstediğim işletim sisteminde çalışma
  • İşletim sistemlerinin aynı dosyaları paylaşabilmesi
  • Ev genelinde yarattığım dosya sunucuları (NAS)
  • Müşterilerim için oluşturduğum hosting’ler
  • Development ve production sunucular

Kişisel Getiriler

  • Media server sunucuları
  • Network izleyicileri
  • Oyun sunucuları
  • Firewall
  • Router
  • Dosya istemleri (Radarr, Sonarr, Tdarr)

Geliştirme Rutinim

Öncelikle bir şey itiraf edeyim; kod editörüm olarak Neovim kullanıyorum. Yani kodlama arayüzüme SSH ile erişiyorum. Bunun sanal makina ile kombinasyonu, her ortamdan kodlama yapabilme yeteneği anlamına geliyor.

Proxmox sunucum üzerinde Debian bir container yarattım. Buraya gerekli kodlama yazılımlarını (Node, Python, Git vs. vs.) yükledim. Network üzerinden herhangi bir cihaz ile;

ssh root@devserver

yazdığımda bu makinaya erişip kodlama yapabiliyorum. Windows CMD ya da Putty, Linux’ta ve macOS’te terminal var ama bitmedi… Android üzerinden de Termux ile çok rahat bir şekilde kodlarıma erişip yazılım geliştirebiliyorum.

Hatta bu sunucuya Tailscale yükleyip, network dışından da erişimimi güvenli bir şekilde yapıp bu geliştirme rutinimi gerçekleştiriyorum.

Bir sahil kenarında, Bluetooth klavye bağlanmış Android tabletimi açıp, yüzdükten hemen sonra oturup istediğim ortam için kodlama yapabiliyorum. Eğer yazdığım kod bir web sunucusu içinse, klavyem üzerindeki “açık pencereler arasında geçip” tuşuna basarak, tek bir tıklamada web arayüzünü görüp, bir tıklamada geri kodlarıma dönebiliyorum.

Dev ve Production Sunucular

Öncelikle production sunucusunu evde host etmeni tavsiye etmem. En az 50-100 Mbps upload, elektrik kesintileri için UPS, firewall güvenlik sistemleri derken oldukça meşakkatli bir işe dönebilir.

Öte yandan development ya da beta sunucu olarak dışarıdan herhangi bir kaynak kullanmana gerek yok.

Bunun için bir örnek vermem gerekirse, şu şekilde bir sistem kurabilirsin;

  • Router üzerinden tüm 80 ve 443 portuna gelen istekleri bir IP adresine portforward yap
  • Proxmox ile bu IP adresine sahip bir Debian container yarat
  • Bu containera Nginx proxy yazılımını kur
  • Proxmox ile yeni bir container ya da sanal makina yarat ve sunucunu buraya kur. Örneğin http://ip:9000 gibi bir adreste çalışıyor olsun sunucu.
  • Public IP adresine bir subdomain yönlendir. server1.domain.com gibi
  • Nginx proxy sunucuna girip, server1.domain.com adresini http://ip:9000 adresine yönlendir

Yukarıdaki talimatlarla, müşterin ya da çalışma arkadaşın http://server1.domain.com adresine girdiğinde, senin geliştirme sunucuna girecektir.

Haliyle yoldayken, reverse proxy, Nginx proxy, temel firewall kuralları vs. öğrenmiş oluyorsun ki bunlar çok işine yarayacak şeyler.

Cabası

Tabii evde sürekli çalışan bir geliştirme sunucun varken, kendi Netflix’ini kurmaman için de bir sebep yok. Dediğim gibi Sonarr, Radarr, Plex vs. gibi media server dünyasına da dalabilirsin. En sevdiğin oyunları host edebilirsin vs. vs.