Hafif bir Dokploy alternatifi arıyorsanız, yeni bir VPS kurduğunuzda veya Linux sunucu filonuzu yönetirken genellikle iki karşıt yaklaşım arasında rahatsız edici bir tercih yapmak zorunda kalırsınız:
- Geleneksel Kontrol Panelleri (HestiaCP, CloudPanel, cPanel vb.): PHP, Python veya Node.js tabanlı klasik siteleri yönetmekte başarılıdırlar ancak konu modern GitOps, Docker veya Compose tabanlı mikroservis mimarilerine geldiğinde ya tamamen yetersiz kalırlar ya da bu özellikleri desteklemezler. Üstelik birçoğu arka planda yüzlerce kabuk (bash) scripti çalıştırdığı için ciddi güvenlik riskleri (RCE açıkları) barındırır.
- Modern PaaS Araçları (Dokploy, Coolify vb.): Geliştirici deneyimi ve Git üzerinden otomatik deploy süreçleri mükemmeldir. Ancak bu araçların neredeyse tamamı ağır çalışma zamanları (Node.js/Next.js), tek sunucuda bile zorunlu kılınan Docker Swarm katmanları ve arka planda sürekli çalışan Traefik gibi ek container’larla gelir. Sonuç: Sunucunuz daha tek bir web sitesi bile yayınlamadan 1-2 GB RAM tüketmeye başlar.
Bu iki dünya arasındaki boşluğu doldurmak için kendi sunucu yönetim ihtiyaçlarımdan doğan bir projeye başladım: scontrol.
Bu yazıda, scontrol’ü neden geliştirdiğimi, mimarisini, Dokploy ile olan teknik farklarını ve neden Rust dilini tercih ettiğimi detaylarıyla paylaşıyorum.
scontrol Nedir?
scontrol, Ubuntu ve Debian sunucular için geliştirilmiş, bellek güvenliğini ön planda tutan, son derece hafif ve saf Rust ile yazılmış bir sunucu kontrol paneli ve PaaS dağıtım motorudur. Yerel PHP ve Node.js sitelerini barındıran, hafif bir Dokploy alternatifi olarak tasarlandı.
Temel felsefesi oldukça nettir: “Sunucunun kendi yerel gücünü kullan, gereksiz soyutlama ve container yüklerinden kurtul, güvenliği derleyici seviyesinde garanti et.”
scontrol iki ayrı dünyayı tek ve bütünleşik bir panelde birleştirir:
- Klasik Çoklu Çalışma Zamanlı Barındırma: PHP (PHP-FPM üzerinden), Node.js, Python, statik web siteleri ve Nginx ters proxy (reverse proxy) yönetimi kutudan çıktığı gibi kullanıma hazırdır.
- Dokploy Tarzı Modern Docker PaaS: Git depolarından veya doğrudan Docker Compose projelerinden deploy alma; asenkron dağıtım kuyruğu, sınırlandırılmış log saklama, canlı log akışı, kesintisiz yeniden dağıtım (zero-downtime redeploy) ve otomatik Let’s Encrypt sertifikaları.
Neden Rust? Kaynak Tüketimi ve Bellek Güvenliği
Bir kontrol panelinin birincil görevi, sunucudaki kaynakları tüketmek değil; kullanıcı uygulamalarına kaynak bırakmaktır.
Node.js tabanlı bir panel; V8 çalışma zamanı, arka plandaki paket yöneticisi (pnpm) ve WebSocket daemon’ları ile yüzlerce megabayt bellek tüketebilir. scontrol ise doğrudan sistem üzerinde yerel (native) çalışan iki hafif, derlenmiş Rust ikili dosyasından oluşur:
panel-api: Yetkisiz (unprivileged)scontrolkullanıcısıyla çalışan; Axum HTTP sunucusunu ve yerleşik Model Context Protocol (MCP) sunucusunu besleyen daemon.panel-agent: Yalnızca yerel bir Unix domain socket (/run/scontrol/agent.sock) üzerinden dinleyen ve ayrıcalıklı işlemleri (Nginx, systemd, Certbot, Docker) root yetkisiyle gerçekleştiren ana makine daemon’ı.
Gerçek Kaynak Tüketimi (Benchmark Verileri)
| Ölçüm / Bileşen | scontrol Değeri | Açıklama |
|---|---|---|
| Boşta RAM (scontrol servisleri) | ~15 – 50 MB | panel-api + panel-agent toplamı. Release build’lerde boşta toplam 13.9 MB RSS ölçüldü. |
| Sistem servisleri dahil taban RAM | ~80 – 130 MB | scontrol + PostgreSQL (panel verisi) + Nginx toplamı. |
| Taban disk alanı | ~300 – 450 MB | Ayrıştırılmış (stripped) ikililer (~35 MB), derlenmiş React arayüzü ve minimum OS bağımlılıkları. |
| Boşta CPU kullanımı | %0’a yakın | Olay güdümlü dağıtım kuyruğu (tokio::sync::Notify); meşgul bekleme (busy-wait) döngüsü yok. |
Dokploy Alternatifi Mimari Karşılaştırması: scontrol ile Dokploy
Dokploy harika bir proje ve scontrol’ün Docker PaaS akışları tasarlanırken Dokploy’un sunduğu modern deneyimden ilham alındı. Ancak mimari, kaynak kısıtları ve güvenlik modelleri taban tabana zıttır:
+-------------------------------------------------------------------------------+
| DOKPLOY |
| Node.js 24 + Next.js + Traefik Container + Docker Swarm + In-Memory Queue |
| (Yüksek bellek tüketimi, 300+ bash shell string çalıştırması) |
+-------------------------------------------------------------------------------+
VS
+-------------------------------------------------------------------------------+
| SCONTROL |
| Pure Rust + Host Nginx + Direct Docker Compose + Durable PostgreSQL Queue |
| (15-50 MB RAM, Sıfır shell çalıştırması, Derleyici seviyesinde tip güvenliği) |
+-------------------------------------------------------------------------------+
Detaylı teknik karşılaştırma tablosu:
| Kriter | Dokploy | scontrol |
|---|---|---|
| Çekirdek Teknoloji | Node.js 24 + Next.js 16 + tRPC + pnpm (panel için tek başına ~100–300+ MB boşta RAM). | Saf Rust (axum, tokio, #![forbid(unsafe_code)], ~15–50 MB boşta RAM). |
| Dağıtım Modu | Ağır konteynerli yapı (dokploy, traefik, postgres, cAdvisor). | Yerel host daemon’ları: 2 hafif Rust servisi (panel-api yetkisiz + panel-agent root). |
| Ters Proxy & Yönlendirme | Traefik v3 Container (sertifika ve label’ları yöneten, sürekli çalışan ek bir container). | Host Nginx (sistemdeki mevcut Nginx vhost’larını loopback reverse proxy’lerle kullanır; ek container yükü sıfır). |
| Orkestrasyon | Tek sunucu kurulumlarında bile Docker Swarm zorunlu kılar. | Swarm overlay ağı veya task-polling gecikmesi olmadan doğrudan Docker Compose v2. |
| Kapsam | Yalnızca container / PaaS. Yerel PHP, Node veya Python uygulamalarını barındıramaz. | Birleşik Hosting + PaaS: Yerel PHP-FPM, Python, Node.js, statik siteler; isteğe bağlı Mail & Antivirus ve Dokploy tarzı Compose Git PaaS. |
| Komut Yürütme & Güvenlik | Yüzlerce noktada execAsync ve bash -c kabuk dizgisi; komut enjeksiyonunu önlemek için regex kara listeleri. | Sıfır shell çalıştırma: sh ve bash, ALLOWED_PROGRAMS listesinden çıkarılmıştır. Tüm komutlar tip korumalı Command::new(..).arg(..) vektörleriyle çalıştırılır (RCE yapısal olarak imkânsız). |
| Gizli Veriler (Secrets) | Kimlik bilgileri komut satırı argümanlarında (ps ile görülebilir) geçebilir veya şifrelenmeden saklanabilir. | Kimlik bilgileri asla argv üzerinde geçmez (GIT_ASKPASS, GIT_SSH, 0600 dosyalar, stdin). Dinlenme halindeki veriler AES-256-GCM ile şifrelenir (SecretBox). |
| Dağıtım Kuyruğu | Bellek içi kuyruk. Yeniden başlatmada kuyruktaki işler kaybolur; eşzamanlılık fiilen seri çalışır. | PostgreSQL tabanlı dayanıklı kuyruk (FOR UPDATE SKIP LOCKED). Panel yeniden başlasa da dağıtımlar devam eder; farklı projeler eşzamanlı deploy edilir. |
| İptal Mekanizması | İptal işlemi, host genelinde pkill -f "docker build" çalıştırır ve host üzerindeki tüm build’leri öldürür. | Process group bazlı iptal (SIGINT → 10 sn sonra SIGKILL); yalnızca ilgili dağıtımı hedefler. |
| Yapay Zeka (AI) & MCP Entegrasyonu | Yerleşik Model Context Protocol (MCP) sunucusu yok. | Yerleşik MCP sunucusu (/api/mcp); Cursor, Claude Desktop ve AI kodlama ajanları için. |
| Altyapı Takibi | Yapılandırma değişiklikleri panel veritabanının içinde kalır. | Host yapılandırma değişikliklerinde GitHub üzerinde otomatik Pull Request açılır (scontrol-git-sync). |
Öne Çıkan Mühendislik Kararları
1. Sıfır Kabuk Enjeksiyonu (Zero Shell Execution)
Geleneksel web panellerinin en büyük zaafı, komutların dinamik kabuk dizgileriyle çalıştırılmasıdır (örneğin format!("systemctl restart {}", service)). Kaçış (escape) yapılmamış tek bir parametre, sunucunun anında ele geçirilmesine yol açabilir.
scontrol’de panel-agent içindeki exec.rs modülü ALLOWED_PROGRAMS adında sıkı bir beyaz listeye sahiptir ve hiçbir kabuk (sh, bash, dash, zsh) bu listede yer alamaz. Komutlar yalnızca tip korumalı argüman dilimleriyle (&[&str]) oluşturulur. Kabuk enjeksiyonu açıkları derleyici seviyesinde ortadan kaldırılır.
2. Dayanıklı Dağıtım Kuyruğu (Durable Queue)
Aktif bir derleme sırasında sunucu yeniden başlarsa, bellek içi kuyruklar bekleyen işleri kaybeder. scontrol, FOR UPDATE SKIP LOCKED kullanan kalıcı bir PostgreSQL kuyruğu kullanır. Farklı projeler, yapılandırılabilir işçi havuzları (PANEL_DEPLOY_WORKERS) üzerinden paralel derlenir ve aktif işler API yeniden başlatmalarından sağ çıkar.
3. Sınırlandırılmış Log ve Disk Güvenliği
Sınırsız Docker logları ve derleme artefaktları, üretim VPS’lerini aylar sonra çökertebilir. scontrol katı kaynak sınırları uygular: her dağıtım logu azami 5 MiB ile sınırlandırılır ve proje başına yalnızca son 20 dağıtım logu saklanır (deployment_log_max_bytes = 5242880, deployment_logs_retained = 20).
4. AI Çağına Uygun: Model Context Protocol (MCP)
Yazılım geliştirme süreçlerimiz artık AI asistanlarıyla (Claude Code, Cursor, Copilot vb.) iç içe. scontrol, yerleşik MCP sunucu uç noktaları (/api/mcp) barındırır. Bu sayede bir yapay zeka asistanı sistem yeteneklerini inceleyebilir, staging ortamları hazırlayabilir, güncellenmiş Git commit’lerini deploy edebilir ve container durumlarını tip güvenli RPC çağrılarıyla raporlayabilir.
Örneğin yapay zeka ajanınıza “Staging ortamındaki Node.js servisini son commit’e güncelle ve servis durumunu bana raporla” dediğinizde, ajan doğrudan scontrol API’siyle konuşarak işlemi gerçekleştirir.
Şu Anki Durum ve Gelecek Planları
Burada çok önemli bir noktayı belirtmem gerekiyor:
Önemli: scontrol henüz halka açık (public) olarak yayınlanmamıştır.
Şu anda projeyi kendi production VPS’lerimde ve canlı iş yüklerimde bizzat kullanıyorum (dogfooding aşaması). Gerçek dünya yükleri altında PostgreSQL kuyruğunun dayanıklılığını, kesintisiz (zero downtime) Nginx TLS yeniden yükleme kararlılığını, ACME Let’s Encrypt yenileme otomasyonlarını ve GitOps senkronizasyonunu titizlikle test ediyorum.
Uçtan uca (E2E) entegrasyon testleri ve kararlılık benchmark’ları tamamen sağlandığında scontrol’ü DevOps ve yazılım topluluğunun kullanımına açık kaynak olarak yayınlayacağım.
Projenin gelişimini takip etmek, mimari fikirleri tartışmak veya modern sunucu yönetimi hakkında görüş alışverişinde bulunmak isterseniz bana umutbey.com üzerinden veya LinkedIn’den ulaşabilirsiniz.
Hafif bir Dokploy alternatifi arıyorsanız sürüm duyurusu için takipte kalın. Bir sonraki teknik yazıda görüşmek üzere!