GitHub tarafından barındırılan runner'lar iyi bir varsayılandır. Bir derleme onlarda olmayan bir şey istediği an onlara ihtiyacınız kalmaz — özel paket kaydınız, her çalıştırmada yeniden kurmaktan bıktığınız belirli bir araç zinciri sürümü, kendi ağınızdaki bir veritabanı ya da sadece makine üzerinde daha fazla kontrol. İşte o zaman bir VPS'teki kendi kendine barındırılan bir runner ekmeğini kazanır.
Bu rehber bir tanesini düzgünce çalıştırıyor: kurulu, kaydedilmiş, systemd altında hayatta ve — insanların yanlış anladığı kısım — güvenli. O son kısımla başlayalım, çünkü ısıran kısım o.
Tek güvenlik kuralı
Bir GitHub Actions iş akışı rastgele kod çalıştırır — iş akışı dosyasında ne varsa ve o kodun çektiği ne varsa. Kendi deponuzda bu sizin kodunuzdur ve sorun yok. Genel bir depoda, bir yabancıdan gelen bir çekme isteği runner'ınızda onların kodunu çalıştırabilir. Bu bir hata değil; CI'nin çalışma biçimidir. GitHub'ın kendi belgeleri açıkça söyler: kendi kendine barındırılan runner'ları genel depolarla kullanmayın.
Yani kural basit ve tartışılmaz: kendi kendine barındırılan runner'lar özel depolar içindir. Deponuz genelse, GitHub tarafından barındırılan runner'ları kullanın ve devam edin. Aşağıdaki her şey özel bir depo varsayar.
Bir runner kutudan neye ihtiyaç duyar
Derlemeye bağlıdır ve bir sayfadaki rakama değil, kendinizinkine göre boyutlandırmalısınız:
- Tipik bir derle-ve-test işi — 2 çekirdek ve 4-8 GB rahat. Small ($8, 4 vCPU / 4 GB) ya da Medium ($12, 6 vCPU / 6 GB) bunların çoğunu karşılar.
- Daha ağır derlemeler — büyük yerel derlemeler, büyük Docker imaj derlemeleri, bellek-aç test paketleri — daha fazla pay ister. Bir gerçek çalıştırmayı izleyin (
htopderlerken) ve umuda değil, gerçekte gördüğünüze göre boyutlandırın.
Disk de önemlidir: derleme önbellekleri, Docker katmanları ve klonlanmış depolar birikir. Göz kulak olun ve temizleyin.
1. Kutuyu hazırlayın
Runner için root olmayan bir kullanıcı oluşturun — GitHub'ın kurucusu zaten root olarak çalışmayı reddeder ve öyle olmasını istersiniz:
sudo adduser --disabled-password --gecos "" runner
sudo usermod -aG sudo runner # only if your builds genuinely need sudo
Derlemelerinizin ihtiyaç duyduğu her şeyi kurun — bir dil araç zinciri, Docker, derleme araçları. Örneğin, işleriniz kapsayıcı derliyorsa:
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker runner
2. Runner'ı indirin ve kaydedin
GitHub'da deponuzda (ya da kuruluşunuzda) Settings → Actions → Runners → New self-hosted runner'a gidin. GitHub size tam indirme komutlarını ve bir kayıt token'ı verir (kısa ömürlüdür — taze alın). runner kullanıcısı olarak:
sudo -iu runner
mkdir actions-runner && cd actions-runner
# use the exact URL GitHub shows you for your OS/arch:
curl -o actions-runner-linux-x64.tar.gz -L "URL_FROM_GITHUB"
tar xzf actions-runner-linux-x64.tar.gz
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
config.sh bir runner adı, etiketler ve bir çalışma klasörü ister — başlamak için varsayılanlar iyidir. Etiketler, iş akışınızın bu runner'ı hedeflediği biçimdir (runs-on: self-hosted).
3. Onu bir systemd servisi olarak çalıştırın
Runner, sizin için bir systemd servisi kuran bir yardımcıyla gelir — onu kullanın ki runner yeniden başlatmalardan sağ çıksın ve hatada yeniden başlasın. Hâlâ runner kullanıcısının kurulumundan, ama servis komutları root ister:
sudo ./svc.sh install runner
sudo ./svc.sh start
sudo ./svc.sh status
Bu, actions.runner.*'ı runner kullanıcısı olarak çalışan, önyüklemede başlayan bir systemd birimi olarak kaydeder. Kayıtlar journald'a gider:
sudo journalctl -u 'actions.runner.*' -f
GitHub'ın Runners sayfasına geri dönün, runner'ınız artık Idle gösterir — yeşil nokta. Bir iş akışını ona yöneltin:
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- run: make test
Push edin, iş kutunuzda çalışır.
4. Onu temiz tutun
Kendi kendine barındırılan bir runner, işler arasında dosya sistemini yeniden kullanır — bu hem hız kazancıdır (sıcak önbellekler) hem de tetik tehlikesidir (artık durum). İki alışkanlık onu sağlıklı tutar:
- Düzenli temizleyin. Özellikle Docker — bir cron üzerinde
docker system prune, yoksa disk ölü katmanlarla sessizce dolar. - Kutuda sırlar saklamayın. Runner'ın ana dizininde duran dosyaları değil, çalıştırma başına enjekte edilen GitHub Actions sırlarını kullanın. Runner ele geçirilirse, diskteki her şey de gider.
İş başına gerçekten temiz bir ortama ihtiyacınız varsa, her işi bir kapsayıcı adımı içinde çalıştırın — runner kalır, işin dağınıklığı kalmaz.
Ne zaman kendiniz barındırmalısınız, dürüstçe
Kendi araç zincirinizin gömülü olmasına, özel ağ kaynaklarına erişime ya da makine üzerinde kontrole ihtiyacınız olduğunda kendiniz barındırın. Temiz, tek kullanımlık bir ortam ve onların dakikaları size uyduğunda GitHub tarafından barındırılan runner'larda kalın — bu gerçekten daha basittir ve daha basit bir şeydir. Ve asla, bir genel depoda, kendiniz barındırmayın. O bir tercih değildir.
Özel-depo bir runner ihtiyacınız olan şeyse: bir plan seçin — daha hafif derlemeler için Small ($8), daha ağırlaştıklarında Medium ($12) — USDC veya USDT ile ödeyin (KYC yok, belge yok) ve yaklaşık 60 saniyede root'a sahip olursunuz. Sonra bu sayfada aşağı doğru ilerleyin, birkaç dakika sonra iş alan bir runner'ınız olur.
Yorumlar
Henüz yorum yok. İlk olun.