GitHub-होस्टेड रनर एक ठीक डिफ़ॉल्ट हैं। आप उनकी ज़रूरत उस पल बंद कर देते हैं जब एक बिल्ड कुछ ऐसा चाहे जो उनके पास नहीं है — आपकी निजी पैकेज रजिस्ट्री, एक ख़ास टूलचेन संस्करण जिसे हर रन इंस्टॉल करते आप थक गए हैं, आपके ख़ुद के नेटवर्क पर एक डेटाबेस, या बस मशीन पर ज़्यादा नियंत्रण। तभी एक VPS पर एक स्व-होस्टेड रनर अपनी क़ीमत कमाता है।
यह गाइड एक को ठीक से चलाती है: इंस्टॉल, रजिस्टर, systemd के तहत ज़िंदा, और — वह हिस्सा जिसे लोग ग़लत करते हैं — सुरक्षित। आइए उस आख़िरी से शुरू करें, क्योंकि यही वह हिस्सा है जो काटता है।
वह एक सुरक्षा नियम
एक GitHub Actions वर्कफ़्लो मनमाना कोड चलाता है — जो भी वर्कफ़्लो फ़ाइल में हो, और जो भी वह कोड खींचे। आपके ख़ुद के रेपो पर वह आपका कोड है, और ठीक है। एक सार्वजनिक रेपो पर, एक अजनबी से एक pull request उनका कोड आपके रनर पर चला सकता है। यह एक बग नहीं; यह CI कैसे काम करता है वह है। GitHub के अपने दस्तावेज़ साफ़ कहते हैं: सार्वजनिक रिपॉज़िटरी के साथ स्व-होस्टेड रनर इस्तेमाल न करें।
तो नियम सरल और ग़ैर-समझौता योग्य है: स्व-होस्टेड रनर निजी रेपो के लिए हैं। अगर आपका रेपो सार्वजनिक है, GitHub-होस्टेड रनर इस्तेमाल करें और आगे बढ़ें। नीचे सब कुछ एक निजी रेपो मानता है।
एक रनर को बॉक्स से क्या चाहिए
यह बिल्ड पर निर्भर है, और आपको एक पेज से एक संख्या के बजाय अपने के लिए साइज़ करना चाहिए:
- एक सामान्य compile-and-test जॉब — 2 कोर और 4-8 GB आरामदेह है। Small ($8, 4 vCPU / 4 GB) या Medium ($12, 6 vCPU / 6 GB) इनमें से ज़्यादातर को कवर करता है।
- भारी बिल्ड — बड़े native compile, बड़े Docker image बिल्ड, मेमोरी-भूखे टेस्ट सूट — ज़्यादा गुंजाइश चाहते हैं। एक असली रन देखें (बिल्ड करते वक़्त
htop) और जो आप असल में देखें उसके लिए साइज़ करें, उम्मीद के लिए नहीं।
डिस्क भी मायने रखती है: बिल्ड कैश, Docker परतें, और क्लोन किए रेपो जुड़ते हैं। इस पर नज़र रखें और prune करें।
1. बॉक्स तैयार करें
रनर के लिए एक ग़ैर-root उपयोगकर्ता बनाएँ — GitHub का इंस्टॉलर वैसे भी root के रूप में चलने से इनकार करता है, और आप इसे वैसे ही चाहते हैं:
sudo adduser --disabled-password --gecos "" runner
sudo usermod -aG sudo runner # सिर्फ़ अगर आपके बिल्ड को सच में sudo चाहिए
जो भी आपके बिल्ड को चाहिए इंस्टॉल करें — एक भाषा टूलचेन, Docker, बिल्ड टूल। उदाहरण के लिए, अगर आपके जॉब कंटेनर बनाते हैं:
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker runner
2. रनर डाउनलोड और रजिस्टर करें
GitHub पर अपने रेपो (या org) में, Settings → Actions → Runners → New self-hosted runner पर जाएँ। GitHub आपको ठीक डाउनलोड कमांड और एक registration token देता है (यह अल्पकालिक है — इसे ताज़ा लें)। runner उपयोगकर्ता के रूप में:
sudo -iu runner
mkdir actions-runner && cd actions-runner
# अपने OS/arch के लिए GitHub जो ठीक URL दिखाए इस्तेमाल करें:
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 एक रनर नाम, लेबल, और एक work फ़ोल्डर माँगता है — शुरू करने को डिफ़ॉल्ट ठीक हैं। लेबल वह हैं जिनसे आपका वर्कफ़्लो इस रनर को लक्ष्य करता है (runs-on: self-hosted)।
3. इसे एक systemd सेवा के रूप में चलाएँ
रनर एक हेल्पर के साथ आता है जो आपके लिए एक systemd सेवा इंस्टॉल करता है — इसे इस्तेमाल करें, ताकि रनर रीबूट झेले और विफलता पर रीस्टार्ट हो। अब भी runner उपयोगकर्ता के इंस्टॉल के रूप में, पर सेवा कमांड को root चाहिए:
sudo ./svc.sh install runner
sudo ./svc.sh start
sudo ./svc.sh status
वह actions.runner.* को runner उपयोगकर्ता के रूप में चलती एक systemd यूनिट के रूप में रजिस्टर करता है, बूट पर शुरू होती। लॉग journald पर जाते हैं:
sudo journalctl -u 'actions.runner.*' -f
GitHub के Runners पेज पर वापस, आपका रनर अब Idle दिखाता है — हरा बिंदु। एक वर्कफ़्लो को इस पर इंगित करें:
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- run: make test
पुश करें, और जॉब आपके बॉक्स पर चलता है।
4. इसे साफ़ रखें
एक स्व-होस्टेड रनर जॉब के बीच अपने फ़ाइलसिस्टम को दोबारा इस्तेमाल करता है — यही रफ़्तार की जीत है (गर्म कैश) और फ़ुटगन (बचा हुआ स्टेट)। दो आदतें इसे स्वस्थ रखती हैं:
- नियमित prune करें। ख़ासकर Docker — एक cron पर
docker system prune, वरना डिस्क चुपचाप मृत परतों से भर जाती है। - बॉक्स पर सीक्रेट्स न रखें। GitHub Actions सीक्रेट्स इस्तेमाल करें, प्रति-रन इंजेक्ट किए, न कि रनर के home में बैठी फ़ाइलें। अगर रनर समझौता हो, डिस्क पर जो कुछ भी है उसके साथ जाता है।
अगर आपको प्रति जॉब एक सचमुच साफ़ परिवेश चाहिए, हर जॉब को एक कंटेनर स्टेप के अंदर चलाएँ — रनर रहता है, जॉब की गंदगी नहीं।
कब स्व-होस्ट करें, ईमानदारी से
स्व-होस्ट करें जब आपको अपनी ख़ुद की टूलचेन बेक की हुई चाहिए, निजी नेटवर्क संसाधनों तक पहुँच, या मशीन पर नियंत्रण। GitHub-होस्टेड रनर पर रहें जब एक साफ़, फेंकने-योग्य परिवेश और उनके मिनट आपको सुहाएँ — वह सचमुच सरल है, और सरल कुछ मूल्य रखता है। और कभी, एक सार्वजनिक रेपो पर, स्व-होस्ट न करें। वह एक पसंद नहीं है।
अगर एक निजी-रेपो रनर वह है जो आपको चाहिए: एक प्लान चुनें — हल्के बिल्ड के लिए Small ($8), जब वे भारी हों तो Medium ($12) — USDC या USDT में भुगतान करें (कोई KYC नहीं, कोई दस्तावेज़ नहीं), और आपके पास लगभग 60 सेकंड में root होगा। फिर इस पेज पर नीचे काम करें और आपके पास कुछ मिनट बाद जॉब उठाता एक रनर होगा।
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।