Uzaktan Geliştirme Ortamı
2014 yılında Windows kullanmaya başladığımda geliştirme ortamımı Linux’ta tutmaya devam ettim. Bunu ilk zamanlar Vagrant ile yaptım; sonra WSL, Docker, WSL2 gibi teknolojileri kullandım. O zamandan beri kafamda şekillenen bir fikir vardı. Zaten bir makinede iki farklı sistemi aynı anda kullanıyorum, birini thin client gibi kullanıp öbürüne uzaktan bağlanmak mümkün mü?
AMAÇ
Önce bunu neden istediğimi anlatmakla başlayayım:
-
İki sistemi aynı anda kullanabilmek için güçlü bir makineye ihtiyacım var. Öte yandan daha güçlü bir makine yerine, daha hafif, ekran kalitesi daha iyi, şarjı daha uzun süre giden makine kullanmak istiyorum.
-
Zaten çalıştığım şirketin sağlamış olduğu bir makine var ve iki makine birden taşımak istemiyorum. Öte yandan, kişisel dosyalarımı ve hobi projelerimi o makinede tutmak istemiyorum.
-
Kişisel makinemdeki geliştirme ortamıma bazen tablet ve telefon gibi başka bir cihazdan da bağlanabilmek istiyorum. Bunu yapabilmek için kişisel makinemi (laptop) sürekli açık tutmak zorundayım.
Peki, geliştirme ortamını nerede tutabilirim, seçenekler neler, ona bakalım.
PLAN
DigitalOcean veya AWS Lightsail gibi bir VPS hizmetini kullanarak sanal sunucu oluşturmak aslında benim işime en çok gelen yöntemdi; ancak Docker yüzünden RAM ihtiyacı artınca, VPS masrafıyla iki yılda bir Mac Mini alabilir hale geliyordum. O yüzden bu yöntemi eledim.
İlk aklıma gelen, Raspberry Pi 4 kullanarak taşınabilir bir PC yapmaktı. Bu konuda yeteri kadar deneyimim olmadığı için ilk başta yapabilirim diye düşünmüştüm; ama sistem gereksinimleri arttıkça epey sorunlar çıktı ve hayal ettiğim yapıdan uzaklaştı. Örneğin, SSD ekleyince ısı problemi oluştu, onu çözmek için soğutucu eklemek zorunda kaldım. Gücü karşılamak için adaptöre ihtiyaç oldu ve ona uygun güzel bir kasa bulmak zorlaştı.
Daha sonra hazır çözümlere baktıysam da hoşuma gidecek bir ürün bulamadım. Son olarak yapılan masrafa göre elde edilen performans beni memnun etmeyince, diğer alternatiflere yöneldim.
Geliştirme ortamını tutacağım makinenin laptop olmasının bir avantajı yoktu; ama makinenin taşınabilir olmasını istiyordum çünkü arada Türkiye’ye gidiyordum, nadir de olsa Zürih’te çalışıyordum. Bu makineyi sürekli aynı yerde tutmayı da düşündüm ancak sistem hatası, elektrik kesintisi gibi acil bir şey olduğunda makineye fiziken erişebilmek istiyordum.
Intel NUC, Beelink gibi diğer alternatiflere de baktım, tuğla gibi adaptörlerinden tiksindiğim için, biraz daha minimal olması nedeniyle Mac Mini almayı tercih ettim. Bu adaptör meselesini PC’de neden çözemiyorlar, hala anlamış değilim.
BAĞLANTI
Geliştirme ortamımı sağlayacak makineyi satın alıp eve kurduktan sonra ilk güncellemeleri yaptım ve makinenin beklemede uyku moduna girmesini engellemek için güç tüketimi ile ilgili ayarları gözden geçirdim.
Sonra makineye bağlanabilmek için kullanacağım yazılımları belirledim. Neden bir makineye bağlanmak için birden fazla yöntem ve araç kullandığımı daha sonra anlatacağım:
-
TAILSCALE: Önce bilmem gereken şey, makinemin sabit bir adresi. Bulabildiğim en pratik yöntem TailScale oldu. WireGuard teknolojisini kullanıyor. Örneğin makinemi gerudo ismiyle tanıttığımda,
ssh gerudo
diyerek bağlanabiliyorum. Tabi istemci olarak kullandığım makinemin de TailScale hesabımda kayıtlı olması gerekiyor ki gerudo’nun hangi adrese kayıtlı olduğunu bulabilsin. -
SSH & MOSH: Kullandığım editör ve terminal alışkanlıklarım nedeniyle en çok ihtiyacım olan şey SSH ve Mosh.
-
REALVNC: Aslında macOS için ayrıca bir VNC uygulaması kurmaya gerek yok; ama RealVNC hesabıyla giriş yaptığınızda makinenin adresini görebiliyorsunuz. TailScale kullandıktan sonra
vnc://gerudo
diyerek herhangi bir VNC client ile bağlanabilirsiniz; ama RealVNC aynı zamanda client olarak kullanabildiğim en güzel client. Geliştirme yapmak amaçlı kullanmıyorum, sadece gerektiğinde kullanıyorum. -
DUET DISPLAY: Eğer gerçekten sunucuya bir monitör bağlamak zorunda kalırsam kullanacağım uygulama.
Geliştirme ortamı, yani sunucu tarafı tamam, artık o makineyi evde unutabiliriz. Şimdi, yanımızda sürekli bulunduracağımız istemci makineye gelelim. Siz kendi durumunuza göre karar verin, ben kendi tercihlerimi anlatacağım:
-
WORKSTATION: Şirketin bana sağlamış olduğu bilgisayardan ssh veya mosh ile editörüme erişebiliyorum, herhangi bir vnc client ile masaüstüne erişebiliyorum.
-
IPAD: İkinci bir laptop taşımayı sevmediğim için tablet kullanıyorum. Eğer evdeysem, duet display sayesinde tableti direkt monitör olarak kullanabiliyorum. Uzaktan masaüstüne erişmek istediğimde RealVNC client kullanıyorum. Ama genel olarak işlerimi Blink terminal emulatörünü kullanarak yapıyorum.
-
IPHONE: Her ne kadar tercih ettiğim bir yöntem olmasa da arada grafik arayüze erişip işim düşebiliyor. Sadece RealVNC kullanıyorum.
Daha önce söylediğim gibi bütün cihazlarda TailScale kullanıyorum. Telefonda belki gerekmeyebilir, çünkü RealVNC zaten kullanıcı hesabı üzerinden makinenin adresini biliyor.
Şimdi organizasyonu anlattıktan sonra gelelim neden bir makineye bağlanmak için birden fazla yöntem ve araç kullanıyoruma. Sanki bütün bu yapı sorunsuz çalışıyor gibi anlattım ama o kadar kolay değil, en azından bir kerelik yaşanan birkaç önemli sorun var.
SORUNLAR
İlk aklıma gelen sorun, Mac Mini’yi ilk defa açıp yazılımları kurana kadar bir görüntüye ihtiyacınız olması. Onun için aslında ilk Raspberry Pi 4 ile yola çıkmıştım, onda bu problem yaşanmayacaktı. Ama Mac Mini için böyle bir sorun malesef var.
İkinci aklıma gelen sorun ise, tüm ayarlamaları yaptıktan sonra farklı bir eve veya ofise götürdüğünüzde, o ilk internet bağlantısını yapabilmek. İşte burada benim iPhone kullanıyor olmam büyük bir avantaj, çünkü telenfonum, yeni mekanın internet bilgisini otomatik olarak Mac Mini ile eşleştirebiliyor.
Bir diğer sorun Duet Display ile ilgili. Bir sebepten ötürü makine yeniden başlar ve oturumunuz kapanırsa, Duet’i kullanabilmeniz için tekrar oturum açmak gerekiyor. Otomatik giriş yaparak bu sorunu çözmek mümkün; ancak güvenlik zaafiyet oluşturacağı için çok da içime sinen bir yöntem değil. Onun yerine, RealVNC ile bağlanıp oturumu bir kez açıyorum. Sonrasında yola Duet Display ile devam ediyorum.
Gelelim iş ile alakalı sorunlara. Tabi benim için hava hoş, ne frontend işi yapıyorum, ne de mobil geliştirme. Arada oyun geliştirme yapıyorum, onda da Duet Display sorunumu çözüyor. Ancak frontendçi olsaydım sanırım client olarak sadece iş bilgisayarımı kullanır, kodu yine sunucumda tutar; ancak yine iş bilgisayarımdaki browser’dan kodu debug ederdim. Mobil geliştirmede bu söylediklerimin hiçbirisi işe yaramazdı diye düşünüyorum. Bu konuda önerileriniz varsa bilmek isterim.
SON OLARAK
Türkiye’de elektrik ve internet kesintilerinin sıklığından dolayı sanıyorum bu tarz uzaktan geliştirme ortamına UPS (kesintisiz güç kaynağı) eklemek gerekiyor. Onun dışında iyice paranoyaklaşıp wifi ile kontrol edebileceğiniz, makinenin güç düğmesine basan bir mini robot yapmayı düşünebilirsiniz.