ALL ARTICLES

VPS Graph'ı Neden Yaptım? JetBrains İçinde Read-Only Bir VPS Infrastructure Explorer

VPS Graph'ı, kendi sunucumda Docker, Caddy, systemd, portlar ve diğer altyapı parçalarının birbirine nasıl bağlandığını hatırlamak için sürekli SSH açmaktan yorulduğum için geliştirdim. Ücretsiz, açık kaynak, local-first ve read-only bir JetBrains infrastructure explorer.

5 MIN READBY CEMİL İLKİM TEKE
JetBrains IDE içerisinde çalışan VPS Graph'ın keşfedilmiş Linux VPS kaynaklarını ve infrastructure görünümünü gösteren ekran görüntüsü.

Problem Nereden Çıktı?#

Bir süredir kendi projelerimin bir kısmını tek bir Linux VPS üzerinde çalıştırıyorum.

Zaman geçtikçe sunucuda Docker container'ları, Compose projeleri, Caddy route'ları, systemd servisleri, açık portlar, networkler, mount'lar ve başka birçok küçük altyapı parçası birikmeye başladı.

Sistem çalışıyordu.

Asıl problem birkaç hafta veya birkaç ay sonra ortaya çıkıyordu.

Bu domain hangi container'a gidiyordu?

Caddy bu isteği nereye yönlendiriyordu?

Bu port Docker tarafından mı açılmıştı, yoksa host üzerindeki bir servis mi dinliyordu?

Bu container hangi Compose projesine aitti?

Bunların hepsini bulabiliyordum.

SSH ile sunucuya bağlanıp birkaç komut çalıştırmak yeterliydi.

Ama birkaç hafta sonra aynı şeyleri tekrar yapıyordum.

Bir noktada fark ettim ki problem bilgiye ulaşamamak değildi.

Problem, sunucunun kafamdaki haritasını her seferinde baştan oluşturmak zorunda kalmamdı.

Böylece VPS Graph ortaya çıktı.

VPS Graph Nedir?#

VPS Graph, Linux VPS'ler için local-first ve read-only bir infrastructure explorer.

JetBrains IDE'lerinin içinde çalışıyor ve sunucuya public-key SSH üzerinden bağlanıyor.

Amacı terminalin veya klasik server management panellerinin yerini almak değil.

Tek bir probleme odaklanıyor:

VPS üzerinde ne çalıştığını ve bu parçaların birbirine nasıl bağlandığını anlamayı kolaylaştırmak.

Şu anda başlıca şunları keşfedebiliyor:

  • Docker ve Docker Compose
  • container'lar
  • Docker networkleri
  • published portlar
  • mount'lar
  • Caddy route'ları
  • domain ve upstream ilişkileri
  • systemd servisleri
  • host listener'ları
  • bu kaynakların birbirleriyle bağlantıları

Sonuç yalnızca uzun bir servis listesi değil.

VPS Graph'ta topology, sunucuyu anlatmanın ana yollarından biri.

Örneğin bir route şu şekilde görülebiliyor:

monitor.example.com → Caddy → host port 19999 → netdata.service

Bu, benim altyapıyı düşünme şeklime terminal çıktısından veya klasik tablolardan çok daha yakın.

Neden Read-Only?#

Projenin başında verdiğim en önemli kararlardan biri şuydu:

VPS Graph sunucuyu değiştirmemeli.

Deploy yapan, container restart eden, configuration dosyalarını düzenleyen veya uzaktan yönetim sağlayan zaten birçok araç var.

VPS Graph'ın amacı farklı.

Bu nedenle özellikle read-only tasarlandı.

VPS Graph:

  • uygulama deploy etmez
  • servis restart etmez
  • container başlatıp durdurmaz
  • configuration dosyalarını değiştirmez
  • keyfi remote management komutları çalıştırmaz

Amaç sunucuyu yönetmek değil, keşfetmek ve anlamak.

Bir sunucunun nasıl çalıştığını görmek için başka bir uygulamaya geniş kontrol yetkileri vermek istemedim.

Local-First#

VPS Graph hesabı diye bir şey yok.

VPS Graph cloud backend'i yok.

Infrastructure verilerinin gönderildiği bir cloud database yok.

Telemetry yok.

Scan işlemleri kullanıcı tarafından manuel olarak başlatılıyor ve infrastructure snapshot'ları lokal olarak saklanıyor.

Hatırlanabilen bağlantı bilgileri de özellikle sınırlandırıldı:

  • host
  • SSH port
  • username
  • private key dosyasının yolu

Private key içeriği, password veya passphrase VPS Graph tarafından saklanmıyor.

SSH bağlantısında bilinmeyen sunucular otomatik olarak güvenilir kabul edilmiyor. Host doğrulaması lokal known_hosts dosyası üzerinden yapılıyor.

Daha Derin Keşif İçin Opsiyonel Helper#

Sunucudaki her altyapı bilgisini normal bir kullanıcıyla güvenli şekilde keşfetmek mümkün değil.

Bu nedenle VPS Graph'ın opsiyonel bir server helper'ı da bulunuyor.

Ama özellikle şunu yapmak istemedim:

Plugin'e sınırsız sudo verelim.

Helper bunun yerine oldukça dar bir yetki modeliyle çalışıyor.

Daemon değil.

Herhangi bir network servisi açmıyor.

Yalnızca Scan veya Rescan sırasında çağrılıyor ve önceden izin verilen infrastructure metadata'sını döndürüyor.

Basic discovery helper olmadan da çalışabiliyor.

Helper, Docker, Caddy, systemd ve host listener gibi alanlarda daha derin görünürlük sağlıyor.

Daha iyi privilege isolation için VPS Graph'a özel, yetkisiz bir SSH kullanıcısı kullanılması öneriliyor. Ancak mevcut bir SSH kullanıcısını kullanmak da mümkün.

Helper bu kullanıcıyı docker grubuna eklemiyor ve sınırsız sudo yetkisi vermiyor. Yalnızca VPS Graph'ın sabit, argumentsız inspection helper komutunu çalıştırmasına izin veriyor.

Snapshot ve Changes#

Sunucunun şu anda nasıl göründüğünü bilmek faydalı.

Ama neyin değiştiğini bilmek bazen daha değerli.

VPS Graph her taramada infrastructure snapshot'larını lokal olarak saklayabiliyor ve bunları önceki snapshot'larla karşılaştırabiliyor.

Changes ekranında:

  • eklenen kaynaklar
  • değiştirilen kaynaklar
  • kaldırılan kaynaklar
  • yeni ilişkiler
  • kaldırılan ilişkiler
  • discovery eksik olduğunda kesin olarak doğrulanamayan değişiklikler

görülebiliyor.

Örneğin bir Docker container'ı bir networkten diğerine geçtiğinde yalnızca container metadata değişikliği değil, topology üzerindeki ilişki değişimi de gösterilebiliyor.

Bütün history lokal cihazda kalıyor.

Neden JetBrains Plugin'i?#

VPS Graph bir JetBrains plugin'i olarak dağıtılıyor.

Scanner core Kotlin ile yazıldı ve IDE entegrasyonundan ayrı tutuldu.

UI tarafında React, TypeScript ve React Flow kullanılıyor. Arayüz JetBrains IDE'leri içerisinde JCEF üzerinden çalışıyor.

Mimariyi basitleştirirsek:

SSH → scanner-core → infrastructure graph → JetBrains bridge → React UI

Scanner'ın JetBrains IDE entegrasyonundan bağımsız tutulması bilinçli bir karar.

Eğer VPS Graph ileride yeterince büyür ve talep oluşursa aynı core üzerinde standalone desktop uygulaması geliştirmek de mümkün.

Ama bugün için ana ürün JetBrains plugin'i.

Gerçek VPS Üzerinde Test Etmek#

Geliştirme sürecinin önemli bir bölümünde yalnızca fixture ve otomatik testlere güvenmek yerine gerçek bir Debian VPS üzerinde test yaptım.

Bunun ne kadar önemli olduğu geliştirme sırasında ortaya çıktı.

Gerçek kullanım, sentetik testlerin yakalamadığı bazı problemleri gösterdi.

Bunlardan biri JCEF içerisinde text selection sırasında native drag davranışının arayüzü kilitlemesiydi.

Bir diğeri ise Changes sisteminde Kotlin'den frontend'e gönderilen response içerisindeki bir schema alanının eksik kalmasıydı.

Snapshot ve diff doğru olmasına rağmen frontend güvenli şekilde response'u reddediyordu.

İki problem de public release öncesinde yakalanıp çözüldü.

Changes sistemi gerçek sunucu üzerinde:

  • resource ekleme
  • resource kaldırma
  • modification
  • relationship ekleme
  • relationship kaldırma
  • historical comparison

senaryolarıyla test edildi.

Bu süreç bana tekrar şunu gösterdi:

Infrastructure tool geliştiriyorsanız, bir noktada gerçek infrastructure üzerinde test etmeniz gerekiyor.

VPS Graph 0.1.1 Bugün Ne Sunuyor?#

VPS Graph 0.1.1, uyumlu JetBrains IDE'leri için tek bir plugin olarak dağıtılıyor.

Şu ana kadar manuel olarak test ettiğim IDE'ler:

  • IntelliJ IDEA
  • PyCharm
  • WebStorm
  • GoLand
  • Rider

Bunun yanında mevcut sürüm:

  • tek aktif Linux VPS
  • Debian ve Ubuntu odaklı discovery
  • manuel scan
  • public-key SSH

üzerine odaklanıyor.

JetBrains Marketplace teknik olarak başka JetBrains ürünleriyle de uyumluluk gösterebiliyor. Ancak bir IDE'nin Marketplace üzerinde uyumlu görünmesi, benim o ürünü manuel olarak test ettiğim anlamına gelmiyor.

Password authentication, SSH agent, ProxyJump ve bastion host gibi bazı SSH senaryoları henüz desteklenmiyor.

Bu sınırlamaların çoğu bilinçli.

0.1.x serisinde mümkün olan her SSH konfigürasyonunu desteklemek yerine sınırlarını net olarak anlayabildiğim daha küçük bir güvenlik modeliyle başlamayı tercih ettim.

Ücretsiz ve Açık Kaynak#

VPS Graph tamamen ücretsiz.

Apache License 2.0 altında açık kaynak olarak yayınlandı.

Paid tier yok.

Hesap açma zorunluluğu yok.

Bu erken public beta aşamasında benim için asıl önemli olan, benim yaşadığım problemi başka geliştiricilerin de yaşayıp yaşamadığını görmek.

Bir JetBrains IDE kullanıyor, kendi Linux VPS'inizi yönetiyor ve arada sırada yalnızca:

"Bu sunucuda ne neye bağlıydı?"

sorusunu cevaplamak için SSH açıyorsanız VPS Graph'ı denemenizi çok isterim.

VPS Graph'ı Deneyin#

JetBrains Marketplace

VPS Graph - JetBrains Marketplace

GitHub

VPS Graph - GitHub

Proje açık kaynak.

Bug report, feedback ve fikirlerin hepsi değerli.

VPS Graph hâlâ 0.1.x aşamasında ve gerçek kullanıcı geri bildirimi ürünün bundan sonra nereye gideceğini belirleyecek.

ILKIM.DEV logo

About The Author

Cemil İlkim Teke

Full-stack developer building practical web, mobile, backend, and AI-enabled products.

WORK WITH ME