İçeriğe Atla
Mustafa Erbay
Teknoloji · 7 dk okuma · görüntülenme Read in English

Self-hosted GitHub Actions Runner: Maliyet ve Kontrol Dengesi

GitHub Actions runner'larınızı kendi sunucularınızda çalıştırmanın avantajlarını ve dezavantajlarını, maliyet, performans ve kontrol açısından inceliyorum.

100%

GitHub Actions ile CI/CD süreçlerimizi otomatize etmek artık standart bir pratik haline geldi. Ancak, büyük projelerde veya özel gereksinimlere sahip durumlarda, GitHub’ın sunduğu genel runner’lar yerine kendi altyapımızda runner’lar barındırma fikri akla yatkın hale gelebiliyor. Bu yaklaşım, maliyetleri düşürme, daha fazla kontrol sağlama ve performans optimizasyonu gibi vaatlerle geliyor. Peki, self-hosted runner’lar gerçekten bu vaatleri karşılıyor mu? Bu yazıda, kendi altyapımda bu kurulumları yaparken karşılaştığım avantajları, dezavantajları ve dikkat edilmesi gereken noktaları somut örneklerle derinlemesine inceleyeceğim.

Bu rehberde, GitHub Actions’ın self-hosted runner’larını kurma ve yönetme sürecine odaklanacağız. Hedefimiz, bu konudaki temel faydaları ve maliyetleri net bir şekilde ortaya koymak. Özellikle, kendi donanımınızı veya sanal makinelerinizi kullanarak CI/CD süreçlerinizi nasıl daha verimli hale getirebileceğinizi adım adım ele alacağız. Bu, sadece bir kurulum rehberi değil, aynı zamanda uzun vadeli bir strateji belirlemenize yardımcı olacak bir analiz olacak.

Neden Self-hosted GitHub Actions Runner? Maliyet ve Kontrol Dinamikleri

GitHub Actions runner’larını kendi sunucularımızda çalıştırmanın temel motivasyonu genellikle maliyet ve kontrol ikileminde yatar. GitHub’ın sunduğu hosted runner’lar, kullanıma hazır ve yönetimi kolaydır, ancak yoğun kullanımlarda maliyeti artırabilir. Self-hosted runner’lar ise, başlangıçta bir yatırım gerektirse de, uzun vadede operasyonel maliyetleri düşürme potansiyeli taşır. Özellikle, mevcut sunucu altyapınız varsa veya zaten yoğun bir CI/CD trafiğiniz varsa, bu model daha ekonomik olabilir.

Örneğin, bir projede haftalık ortalama 10.000 dakika build süresi harcadığımızı düşünelim. GitHub’ın ücretlendirmesine göre bu, aylık yaklaşık 400-500 USD’ye denk gelebilir. Ancak kendi sunucularımızda, mevcut bir VPS üzerinde (örneğin aylık 50 USD) veya şirket içi sunucularda bu işi yaptığımızda, donanım ve elektrik maliyetleri bu rakamın oldukça altında kalabilir. Tabii ki bu hesaplamaya, yönetici zamanı ve olası sorun giderme maliyetleri de eklenmeli.

Kontrol konusu da bir diğer önemli faktör. Hosted runner’lar belirli bir işletim sistemi ve yazılım setine sahipken, self-hosted runner’lar üzerinde tam kontrol sizdedir. Bu, spesifik bağımlılıkları yüklemek, özel araçları entegre etmek veya güvenlik politikalarını sıkılaştırmak gibi konularda büyük esneklik sağlar. Örneğin, belirli bir donanım gerektiren veya kapalı kaynak bir yazılımı kullanan build’leriniz varsa, self-hosted runner’lar bu ihtiyacı karşılayabilir.

Kurulum Süreci: Adım Adım Self-hosted Runner Yapılandırması

Self-hosted runner kurulumu, temelde GitHub’ın resmi dokümantasyonunda belirtildiği gibi birkaç adımdan oluşur. Öncelikle, runner’ı barındıracağınız bir makineye ihtiyacınız var. Bu bir sanal makine (VM), fiziksel sunucu veya hatta bir Docker container olabilir. Ardından, GitHub’dan runner uygulamasını indirip kurmanız ve GitHub organizasyonunuza veya deponuza bağlamanız gerekiyor.

İlk adım, runner’ı kuracağınız sunucuda gerekli yazılımları hazırlamaktır. Genellikle bu, Node.js ve bazı temel sistem araçlarını içerir. Ardından, GitHub Actions’ın resmi deposundan runner paketini indirirsiniz. Bu paket, platformunuza göre farklılık gösterebilir (Linux x64, ARM, Windows vb.).

Yapılandırma tamamlandıktan sonra, runner’ı bir servis olarak çalıştırmak en pratik yoldur. Linux sistemlerde systemd kullanarak bunu kolayca yapabilirsiniz. Bu, sunucu yeniden başlatıldığında runner’ın otomatik olarak çalışmasını sağlar. svc.sh script’i bu konuda size yardımcı olacaktır. Örneğin, systemd unit dosyası şu şekilde görünebilir:

[Unit]
Description=GitHub Actions Runner
After=network.target

[Service]
User=runneruser
Group=runnergroup
WorkingDirectory=/home/runneruser/actions-runner
ExecStart=/home/runneruser/actions-runner/run.sh
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Bu yapılandırma, runner’ın arka planda sürekli çalışmasını ve bir hata durumunda otomatik olarak yeniden başlatılmasını sağlar. Bu, özellikle üretim ortamlarında kesintisiz bir CI/CD süreci için kritik öneme sahiptir.

Performans Optimizasyonu ve Kaynak Yönetimi

Self-hosted runner’ların en büyük avantajlarından biri de performans optimizasyonudur. Hosted runner’lar genel amaçlıdır ve her zaman sizin özel ihtiyaçlarınıza en uygun donanıma sahip olmayabilirler. Kendi runner’larınızı kurarken, iş yükünüze en uygun CPU, RAM ve disk yapılandırmasını seçebilirsiniz.

Örneğin, büyük derleme (compilation) işlemleri yapan projeler için yüksek çekirdek sayısına sahip ve bol RAM’li bir makine tercih edilebilir. Veritabanı testleri veya yoğun I/O gerektiren işlemler için ise hızlı SSD’ler ve yeterli disk alanı kritik önem taşır. Bu esneklik, build sürelerini önemli ölçüde kısaltabilir. Büyük bir C++ projesinin derlenmesi, hosted runner’lara kıyasla iş yüküne özel yapılandırılmış bir self-hosted runner ile belirgin biçimde hızlanabiliyor. Bu, sadece build süresini değil, aynı zamanda developer’ların geri bildirim alma hızını da doğrudan etkiler.

Kaynak yönetimi konusunda dikkat edilmesi gereken bir diğer nokta ise runner’ların ölçeklenmesidir. Yoğun zamanlarda birden fazla runner’a ihtiyaç duyabilirsiniz. Bunun için Docker Swarm veya Kubernetes gibi container orkestrasyon araçlarını kullanarak otomatik ölçeklenebilir bir yapı kurabilirsiniz. Bu, talebe göre runner sayısını dinamik olarak artırıp azaltmanıza olanak tanır, böylece hem maliyetleri optimize eder hem de iş akışlarınızın kesintisiz çalışmasını sağlarsınız. Örneğin, belirli bir saatte veya belirli bir sayıda iş geldiğinde otomatik olarak yeni runner container’ları başlatılabilir.

Güvenlik: Self-hosted Runner’ların Riskleri ve Önlemleri

Self-hosted runner’lar, size daha fazla kontrol sağlasa da, güvenlik açısından bazı ek sorumluluklar getirir. Kendi altyapınızda çalışan her servis gibi, runner’larınız da potansiyel güvenlik açıklarına karşı korunmalıdır. GitHub’ın hosted runner’ları GitHub tarafından yönetilirken, self-hosted runner’ların güvenliği tamamen sizin sorumluluğunuzdadır.

İlk olarak, runner’ı çalıştırdığınız sunucunun güncel tutulması ve güvenlik yamalarının düzenli olarak uygulanması şarttır. İşletim sistemi, Node.js, Docker ve runner uygulamasının kendisi gibi tüm bileşenler güncel olmalıdır. Ayrıca, runner’ın çalıştığı kullanıcıya en az ayrıcalığı vermek (principle of least privilege) güvenlik açısından önemlidir. Runner’ın yalnızca CI/CD işlerini yürütmek için gerekli olan izinlere sahip olması gerekir.

Ayrıca, runner’larınızın üzerinde çalıştırdığınız işlerin de güvenliğini sağlamalısınız. Örneğin, build süreçlerinizde kullanılan tüm bağımlılıkların güvenilir kaynaklardan geldiğinden emin olun. npm audit veya yarn audit gibi araçlarla bağımlılıklarınızdaki bilinen güvenlik açıklarını düzenli olarak tarayın. CVE takibi yaparak, kullandığınız araçlardaki kritik güvenlik açıklarını erkenden tespit edip önlem alın.

Dezavantajlar ve Dikkat Edilmesi Gerekenler

Self-hosted runner’lar harika potansiyel sunsa da, bazı önemli dezavantajları ve göz ardı edilmemesi gereken zorlukları vardır. Bunların başında, altyapıyı yönetme ve bakım yükü gelir. Runner’larınızın çalıştığı sunucuları izlemek, güncellemek, sorunları gidermek ve ölçeklendirmek için ek bir çaba gereklidir. Bu, özellikle küçük ekipler veya sınırlı IT kaynağına sahip şirketler için önemli bir yük olabilir.

Bir diğer dezavantaj ise, başlangıç maliyetidir. Kendi sunucularınızı kurmak veya mevcut altyapıyı bu iş için tahsis etmek, ilk etapta önemli bir yatırım gerektirebilir. Donanım alımı, lisanslar (eğer kapalı kaynak yazılımlar kullanılıyorsa) ve ilk kurulum süreçleri bütçeyi zorlayabilir. GitHub’ın hosted runner’ları ile bu tür bir ön yatırım yapmadan hemen kullanmaya başlayabilirsiniz.

Son olarak, ölçeklenebilirlik ve esneklik konusunda da bazı sınırlamalar olabilir. Kendi donanımınızla ölçeklenmek, hosted runner’lar kadar hızlı ve dinamik olmayabilir. Yeni sunucular eklemek veya mevcut kapasiteyi artırmak zaman alabilir. GitHub’ın sunduğu ölçeklenebilir altyapı, ani talep artışlarını karşılamada genellikle daha başarılıdır. Bu nedenle, iş yükünüzün ne kadar değişken olduğunu ve ne kadar hızlı ölçeklenme ihtiyacınız olacağını iyi değerlendirmeniz gerekir.

Sonuç: Kendi Runner’larınızı Kullanmalı mısınız?

Self-hosted GitHub Actions runner’lar, doğru senaryolarda maliyetleri düşürmek, performansı artırmak ve altyapı üzerinde tam kontrol sağlamak için güçlü bir çözüm sunar. Ancak, bu yaklaşımın getirdiği yönetim yükü, başlangıç maliyetleri ve güvenlik sorumlulukları da göz ardı edilmemelidir.

Eğer projeniz büyük ölçekli, yoğun CI/CD trafiğine sahipse, özel donanım veya yazılım bağımlılıkları varsa ve bu altyapıyı yönetebilecek teknik kaynağınız mevcutsa, self-hosted runner’lar sizin için doğru tercih olabilir. Mevcut sunucu altyapınızı verimli kullanmak veya uzun vadede hosted runner maliyetlerinden tasarruf etmek istiyorsanız, bu yöntemi ciddi olarak değerlendirmelisiniz.

Ancak, ekibiniz küçükse, CI/CD süreçleriniz daha standartsa ve yönetim yükünü üstlenmek istemiyorsanız, GitHub’ın hosted runner’ları daha pratik ve maliyet-etkin bir çözüm sunacaktır. Nihai karar, projenizin özel gereksinimlerine, bütçenize ve ekibinizin teknik kapasitesine bağlı olacaktır. Kendi altyapınızda runner çalıştırmak, bir otomasyon aracı olmanın ötesinde, kendi CI/CD bulutunuzu inşa etmek anlamına gelir.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Self‑hosted runner kurulumuna nereden başlamalıyım ve hangi araçları kullanmalıyım?
Ben ilk adımı GitHub'ın resmi dokümantasyonunda yer alan “Self‑hosted runner” paketini indirmekle attım, ardından Ubuntu 22.04 LTS sunucuma `curl` ve `tar` ile paketimi çıkardım. Kurulum sırasında `config.sh` scriptiyle runner token'ını ve repository bilgilerini girdim. İşletim sistemi seviyesinde Docker’ı tercih ediyorum; çünkü container içinde runner çalıştırmak, bağımlılık çakışmalarını önler ve güncellemeleri izole eder. Ayrıca `systemd` servisi oluşturarak runner’ı otomatik başlatır ve izlerim. Bu adımları bir bash scriptiyle otomatikleştirerek, yeni bir VM oluşturduğumda sadece scripti çalıştırmak yeterli oluyor.
Self‑hosted runner kullanmanın en büyük avantajı ve dezavantajı nedir?
Benim deneyimime göre en büyük avantaj, maliyet ve performans kontrolüdür; aynı donanımı uzun vadeli CI/CD iş yükleri için kullandığımda GitHub’ın ücretli hosted runner’larına göre belirgin tasarruf sağladım ve I/O‑ağ gecikmelerini hissedilir ölçüde azalttım. En büyük dezavantaj ise bakım sorumluluğudur; güvenlik yamalarını, runner versiyon güncellemelerini ve ağ erişim politikalarını kendiniz yönetmelisiniz. Birkaç kez unuttuğum güncelleme, iş akışının beklenmedik bir anda başarısız olmasına neden oldu ve ekstra izleme araçları eklemeyi zorunlu kıldı. Bu yüzden otomatik güncelleme ve izleme çözümleri eklemek kritik.
Runner’da bir hata alırsam sorunu nasıl teşhis edip çözebilirim?
Ben hata aldığımda önce `systemd` loglarını (`journalctl -u actions.runner…`) incelerim; çoğu zaman “permission denied” ya da “network timeout” gibi net mesajlar çıkar. Eğer runner konteyner içinde çalışıyorsa `docker logs` ile konteyner çıktısını kontrol ederim. Sorun bir bağımlılık eksikliği ise, CI adımında `apt-get install` ya da `pip install` komutlarını ekleyerek düzeltirim. Bazen GitHub API rate‑limit’i nedeniyle başarısız olur; bu durumda runner token’ını yenileyip `config.sh` ile yeniden kaydederim. Çözüm bulamazsam GitHub’ın “self‑hosted runner” forumunda aynı hatayı arar, topluluk yanıtlarından faydalanırım.
Self‑hosted runner’ların güvenlik konusunda riskli olduğu doğru mu?
Bu yaygın bir mit; ben başlangıçta da aynı endişeyi taşımıştım. Gerçek şu ki, self‑hosted runner’lar, doğru izolasyon ve erişim kontrolleriyle güvenli bir şekilde çalıştırılabilir. Ben runner’ı ayrı bir VLAN’da, minimum ayrıcalıklı bir sistem hesabıyla ve SSH anahtarları yerine kısa ömürlü token’larla yapılandırdım. Ayrıca `firewall` kurallarıyla sadece GitHub IP’lerine izin verdim ve `auditd` ile işlem kayıtlarını izledim. Bu önlemler sayesinde dış saldırı yüzeyi çok daraldı. Tabii ki, hosted runner’lar da GitHub tarafından yönetildiği için tamamen risksiz değil; sorumluluk dağılımı farklıdır, ama kendi altyapınızı kontrol etmek, güvenlik politikalarınızı tam olarak uygulamanıza olanak tanır.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Yeni yazılardan haberdar olun

Yeni içerikler ve teknik notlar e-postanıza gelsin.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar